PortSwigger Web Cache 投毒攻击
字数 1592 2025-08-12 11:33:58
Web Cache 投毒攻击全面解析
0x01 前言
Web Cache Poisoning(Web缓存投毒)是一种辅助性攻击手段,地位高于CORS,低于CSRF。它在很多知名网站(如Google、百度、msn、必应等)中都存在潜在隐患。
0x02 基本概念
1. 什么是Web Cache
Web Cache位于服务器和用户之间,保存对特定请求的响应。当另一个用户发送等效请求时,Web Cache直接将缓存的响应副本提供给用户,无需后端交互,从而减轻服务器负载。
2. Web Cache Poisoning原理
攻击者触发服务器缓存附有恶意Payload的响应,当其他用户发送相同请求时即会接收到这个恶意响应。相比针对单个用户的攻击,Web Cache Poisoning可以影响大量用户。
3. 缓存键(Cache Key)
Web Cache通过比较请求组件的预定义子集(缓存键)来标识等效请求。一般缓存键包括Request Header和Host头。服务器只识别设置为缓存键的特征是否相同,这导致了Web缓存投毒漏洞的产生。
0x03 Web Cache Poisoning攻击思路
- 找出未被Web Cache缓存的输入:如GET请求中的某些参数
- 从后端服务器诱发被投毒的响应
- 得到被缓存的响应
0x04 基于缓存设计缺陷的攻击
1. 使用Web Cache Poisoning扩大XSS战果
示例:
GET /en?region=uk HTTP/1.1
Host: innocent-website.com
X-Forwarded-Host: a."><script>alert(1)</script>"
利用步骤:
- 使用Param Miner插件扫描可用的未缓存字段
- 发现X-Forwarded-Host头可用
- 构造XSS Payload并多次发送使缓存生效
- 其他用户访问时会触发XSS
2. 对不被缓存的Cookie进行投毒
示例:
GET /blog/post.php?mobile=1 HTTP/1.1
Host: innocent-website.com
Cookie: language=pl;
利用方法:
- 修改Cookie中不被缓存的字段值影响其他用户
3. 使用多个HTTP Header发起攻击
示例:
GET /random HTTP/1.1
Host: innocent-site.com
X-Forwarded-Proto: http
X-Forwarded-Host: evil.com
4. 通过Cache-Control导致信息泄露
- 利用
Vary头和Cache-Control头获取缓存信息 - 通过
User-Agent等字段针对特定用户群投毒
5. 对DOM型漏洞进行Web Cache投毒
特点:
- 通过缓存投毒导入恶意JSON字符串
- 需要CORS授权允许跨站
6. Web Cache完整投毒过程
综合步骤:
- 使用Param Miner探测可用字段
- 分析响应中可控部分
- 构造DOM型XSS Payload
- 通过多个字段组合实现投毒
0x05 基于Cache Key缺陷的攻击
1. 通过未被缓存的端口进行攻击
- 缓存键可能只缓存域名不缓存端口号
- 可导致DDOS或XSS攻击
2. 通过未被缓存的查询字符串攻击
示例:
/?evil='/><script>alert(1)</script>
3. 仅有几个不被缓存的查询参数时
- 需要进行Fuzz测试找出可用参数
- 如
utm_content参数常可用
4. 利用多个参数实现缓存参数隐藏
示例:
GET /?example=123?excluded_param=bad-stuff-here
- 第二个问号后的参数不会被作为缓存键处理
5. 利用Fat GET请求发起攻击
特点:
- GET请求中在HTTP Body也携带参数
- Body中的参数可能覆盖URL中的参数
6. 利用资源导入中的动态内容进行攻击
示例:
GET /style.css?excluded_param=123);@import...
7. 缓存解析URL编码的隐患
- 缓存会自动进行URL解码
- 可绕过某些XSS过滤
8. 缓存键注入
特点:
- 使用双下划线(__)分隔不同字段
- 使不同请求被识别为等效请求
9. 内部缓存投毒
- 类似于CSRF的攻击方式
- 不需要先找不被键入的参数
0x06 防御措施
- 严格安全防护,尽量使用静态响应
- 对导入资源进行严格校验
- 禁止模棱两可的请求方法(如Fat GET)
- 禁用不需要的HTTP头字段
0x07 总结
Web Cache Poisoning是一种强大的辅助攻击手段,能够扩大其他漏洞的影响范围。攻击者需要深入了解缓存机制和网站实现细节,防御者则需要全面考虑缓存设计的各个方面。