服务器端漏洞篇 | Web缓存欺骗专题
字数 1939 2025-08-20 18:18:10

Web缓存欺骗攻击详解

1. 基本概念

Web缓存欺骗(Web Cache Deception)是一种利用缓存服务器和源服务器处理请求方式差异的安全漏洞,攻击者通过构造特殊URL诱骗缓存服务器存储敏感的动态内容。

1.1 与Web缓存投毒的区别

  • Web缓存投毒:操纵缓存密钥,将恶意内容注入到缓存的响应中
  • Web缓存欺骗:诱骗缓存存储敏感或私有内容,然后攻击者访问这些内容

2. Web缓存工作原理

2.1 缓存基本流程

  1. 客户端请求静态资源
  2. 请求首先被定向到缓存
  3. 如果缓存不包含资源副本(缓存未命中),请求转发到源服务器
  4. 源服务器响应后,响应先发送到缓存,再发送给用户
  5. 后续相同请求直接从缓存提供(缓存命中)

2.2 缓存键(Cache Key)

缓存通过生成"缓存键"决定是否提供缓存响应,通常包含:

  • URL路径
  • 查询参数
  • 可能包含各种其他元素(如头部和内容类型)

2.3 缓存规则

缓存决定可以缓存什么内容及缓存时间的规则,常见类型:

  1. 静态文件扩展名规则:匹配资源文件扩展名(.css, .js等)
  2. 静态目录规则:匹配以特定前缀开头的URL路径(/static, /assets等)
  3. 文件名规则:匹配特定文件名(robots.txt, favicon.ico等)

3. Web缓存欺骗攻击实施

3.1 攻击步骤

  1. 识别目标端点:找到返回敏感信息的动态响应端点

    • 关注支持GET、HEAD或OPTIONS方法的端点
    • 检查响应中不可见的敏感信息
  2. 识别解析差异:找出缓存和源服务器解析URL路径的差异

    • URL映射到资源的方式不同
    • 处理分隔符的方式不同
    • 规范化路径的格式不同
  3. 构造恶意URL:利用差异欺骗缓存存储动态响应

    • 受害者访问URL后,响应存储在缓存中
    • 攻击者请求同一URL获取受害者数据

3.2 实用技巧

  1. 使用缓存消除器(Cache Buster)

    • 每次请求添加唯一查询字符串
    • 可使用Param Miner插件自动执行
  2. 检测缓存响应

    • 检查响应头:
      • X-Cache: hit - 响应由缓存提供
      • X-Cache: miss - 从源服务器获取
      • X-Cache: dynamic - 动态生成内容
      • X-Cache: refresh - 缓存内容已过期
    • 检查Cache-Control
    • 比较响应时间差异

4. 利用静态资源扩展名缓存规则

4.1 路径映射差异

两种常见URL映射样式:

  1. 传统URL映射:直接对应文件系统路径

    • 示例:http://example.com/path/in/filesystem/resource.html
  2. 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 测试方法

  1. 测试源服务器映射

    • 向目标URL添加任意路径段
    • 如果响应仍包含相同敏感数据,说明服务器忽略了添加的段
  2. 测试缓存映射

    • 修改路径添加静态资源扩展名(.js, .css等)
    • 如果响应被缓存,说明:
      • 缓存解释完整URL路径
      • 存在对应扩展名的缓存规则

5. 防御措施

  1. 禁用缓存敏感内容

    • 使用Cache-Control: no-storeprivate指令
  2. 统一路径解析

    • 确保缓存和源服务器使用相同的URL解析逻辑
  3. 限制缓存规则

    • 精确指定可缓存的路径和资源类型
    • 避免过于宽泛的缓存规则
  4. 用户敏感操作

    • 对涉及敏感数据的操作使用POST而非GET
  5. 缓存键配置

    • 在缓存键中包含更多变量(如用户会话标识)

6. 工具推荐

  1. Burp Suite:自带扫描器可检测路径映射差异导致的漏洞
  2. Web Cache Deception Scanner插件:专门检测配置错误的Web缓存
  3. Param Miner插件:自动添加缓存消除器

7. 靶场实践示例

目标:获取carlos的API key

步骤

  1. 登录测试用户
  2. 访问返回API key的路径
  3. 构造恶意URL添加静态扩展名(如.css)
  4. 诱使carlos访问该URL
  5. 访问相同URL获取缓存的API key

通过理解Web缓存欺骗的原理和攻击方法,安全人员可以更好地防御此类漏洞,同时也能在授权测试中有效识别相关风险。

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缓存欺骗的原理和攻击方法,安全人员可以更好地防御此类漏洞,同时也能在授权测试中有效识别相关风险。