服务器端漏洞篇 | Web缓存欺骗专题
字数 1939 2025-08-20 18:18:10
Web缓存欺骗攻击详解
1. 基本概念
Web缓存欺骗(Web Cache Deception)是一种利用缓存服务器和源服务器处理请求方式差异的安全漏洞,攻击者通过构造特殊URL诱骗缓存服务器存储敏感的动态内容。
1.1 与Web缓存投毒的区别
- Web缓存投毒:操纵缓存密钥,将恶意内容注入到缓存的响应中
- Web缓存欺骗:诱骗缓存存储敏感或私有内容,然后攻击者访问这些内容
2. Web缓存工作原理
2.1 缓存基本流程
- 客户端请求静态资源
- 请求首先被定向到缓存
- 如果缓存不包含资源副本(缓存未命中),请求转发到源服务器
- 源服务器响应后,响应先发送到缓存,再发送给用户
- 后续相同请求直接从缓存提供(缓存命中)
2.2 缓存键(Cache Key)
缓存通过生成"缓存键"决定是否提供缓存响应,通常包含:
- URL路径
- 查询参数
- 可能包含各种其他元素(如头部和内容类型)
2.3 缓存规则
缓存决定可以缓存什么内容及缓存时间的规则,常见类型:
- 静态文件扩展名规则:匹配资源文件扩展名(.css, .js等)
- 静态目录规则:匹配以特定前缀开头的URL路径(/static, /assets等)
- 文件名规则:匹配特定文件名(robots.txt, favicon.ico等)
3. Web缓存欺骗攻击实施
3.1 攻击步骤
-
识别目标端点:找到返回敏感信息的动态响应端点
- 关注支持GET、HEAD或OPTIONS方法的端点
- 检查响应中不可见的敏感信息
-
识别解析差异:找出缓存和源服务器解析URL路径的差异
- URL映射到资源的方式不同
- 处理分隔符的方式不同
- 规范化路径的格式不同
-
构造恶意URL:利用差异欺骗缓存存储动态响应
- 受害者访问URL后,响应存储在缓存中
- 攻击者请求同一URL获取受害者数据
3.2 实用技巧
-
使用缓存消除器(Cache Buster)
- 每次请求添加唯一查询字符串
- 可使用Param Miner插件自动执行
-
检测缓存响应
- 检查响应头:
X-Cache: hit- 响应由缓存提供X-Cache: miss- 从源服务器获取X-Cache: dynamic- 动态生成内容X-Cache: refresh- 缓存内容已过期
- 检查
Cache-Control头 - 比较响应时间差异
- 检查响应头:
4. 利用静态资源扩展名缓存规则
4.1 路径映射差异
两种常见URL映射样式:
-
传统URL映射:直接对应文件系统路径
- 示例:
http://example.com/path/in/filesystem/resource.html
- 示例:
-
RESTful URL映射:抽象为API逻辑部分
- 示例:
http://example.com/path/resource/param1/param2
- 示例:
4.2 攻击示例
考虑URL:http://example.com/user/123/profile/wcd.css
- 源服务器:可能解释为对
/user/123/profile端点的请求,忽略wcd.css - 缓存:视为对
/user/123/profile/wcd.css文件的请求- 如果配置为存储
.css请求的响应,将缓存配置文件信息
- 如果配置为存储
4.3 测试方法
-
测试源服务器映射:
- 向目标URL添加任意路径段
- 如果响应仍包含相同敏感数据,说明服务器忽略了添加的段
-
测试缓存映射:
- 修改路径添加静态资源扩展名(.js, .css等)
- 如果响应被缓存,说明:
- 缓存解释完整URL路径
- 存在对应扩展名的缓存规则
5. 防御措施
-
禁用缓存敏感内容:
- 使用
Cache-Control: no-store或private指令
- 使用
-
统一路径解析:
- 确保缓存和源服务器使用相同的URL解析逻辑
-
限制缓存规则:
- 精确指定可缓存的路径和资源类型
- 避免过于宽泛的缓存规则
-
用户敏感操作:
- 对涉及敏感数据的操作使用POST而非GET
-
缓存键配置:
- 在缓存键中包含更多变量(如用户会话标识)
6. 工具推荐
- Burp Suite:自带扫描器可检测路径映射差异导致的漏洞
- Web Cache Deception Scanner插件:专门检测配置错误的Web缓存
- Param Miner插件:自动添加缓存消除器
7. 靶场实践示例
目标:获取carlos的API key
步骤:
- 登录测试用户
- 访问返回API key的路径
- 构造恶意URL添加静态扩展名(如
.css) - 诱使carlos访问该URL
- 访问相同URL获取缓存的API key
通过理解Web缓存欺骗的原理和攻击方法,安全人员可以更好地防御此类漏洞,同时也能在授权测试中有效识别相关风险。