缓存投毒之CPDOS
字数 1764 2025-08-22 18:37:14

Web缓存投毒攻击(CPDoS)深度解析与实战教学

一、缓存投毒概述

缓存投毒(Web Cache Poisoning)是一种利用Web缓存机制漏洞的攻击手段,攻击者将恶意数据注入缓存系统,导致其他用户访问相同资源时接收到被篡改的内容。这种攻击可导致多种危害:

  • 拒绝服务(DoS)
  • 跨站脚本攻击(XSS)
  • 恶意重定向
  • 数据泄露

CPDoS(Cache-Poisoned Denial-of-Service)是2019年提出的针对Web缓存系统的特殊攻击类型,利用缓存系统与源服务器处理HTTP请求的差异,导致缓存错误响应页面,引发拒绝服务。

二、HTTP请求头溢出(HHO)攻击

原理

利用CDN/代理与后端服务器对HTTP请求头大小限制的差异:

  • 服务器限制(如Apache):~8,192字节
  • CDN限制(如Cloudfront):可达20,480字节

当攻击者发送介于两者之间的请求头时:

  1. CDN正常处理请求
  2. 后端服务器返回异常(如400错误)
  3. CDN缓存此异常响应
  4. 后续用户请求都收到错误响应

实战案例

案例1:云点播服务漏洞

  • 缓存键:任意GET参数
  • 后端对超大请求返回400状态码
  • CDN配置为缓存400响应3秒
  • 攻击效果:每3秒发送一次恶意请求,可维持持续拒绝服务状态

案例2:无缓存键目标的攻击

  • 目标缓存过期时间极短(30秒)
  • 在缓存失效瞬间发送恶意请求
  • 攻击效果:所有用户请求都收到400错误响应
  • 风险:可能影响正常业务(Bugcrowd评级P4,赏金$850)

三、HTTP方法覆盖(HMO)攻击

原理

利用Web框架提供的特殊请求头绕过中间设备限制:

  • 常见中间设备(负载均衡器、WAF等)通常只允许GET/POST方法
  • Web框架提供覆盖头:
    • X-HTTP-Method-Override
    • X-HTTP-Method
    • X-Method-Override

攻击流程

  1. 攻击者添加方法覆盖头(如X-HTTP-Method-Override:POST)
  2. CDN/代理将请求方法重置为POST转发给后端
  3. 目标接口不支持POST方法,返回400错误
  4. CDN缓存错误响应
  5. 维持攻击:每3秒发送一次恶意请求

四、HTTP重定向DoS攻击

原理

通过缓存恶意重定向响应,导致用户陷入无限重定向循环或访问不存在的资源。

实战案例

案例1:参数差异利用

  • 缓存键:Origin请求头
  • 发现特殊参数page
    • 无值时:301跳转并在Location中添加?page
    • 有值时:不添加到Location
  • 攻击效果:请求/被重定向到/?page,形成无限循环

案例2:Accept-Language头利用

  • 缓存键:Accept-Language请求头
  • GET参数不是缓存键
  • 发现:
    • 默认请求301跳转到/en/
    • GET参数会跟随跳转并URL解码
    • 传递非法参数可导致500错误
  • 攻击效果:构造恶意请求导致持续错误(赏金$2900)

五、黑名单缓存投毒

原理

利用目标站点对特定User-Agent的黑名单机制:

  • 当UA被识别为扫描器/爬虫时返回异常
  • 攻击者伪造此类UA使异常响应被缓存
  • 后续合法用户请求也收到错误响应

六、畸形HOST头攻击

实战案例

  • 缓存键:仅Lang GET参数
  • 攻击构造:https://xxxx.com?Lang=11111111
  • 效果:目标无限跳转到自身URL,导致拒绝服务
  • 赏金:1000欧元

七、其他可疑请求头攻击

除上述类型外,还需注意:

  • MAX-forwards
  • if-modified-since
  • 其他业务相关的自定义头

八、防御措施

  1. 严格配置缓存键:只包含必要的参数/头
  2. 统一请求处理规范:确保CDN与后端一致
  3. 限制缓存错误响应:避免缓存4xx/5xx状态码
  4. 请求头大小限制:前后端保持相同限制
  5. 方法过滤:严格限制支持的HTTP方法
  6. 黑名单策略优化:避免可预测的拦截行为

九、检测工具

推荐使用wcpvs工具进行自动化检测,支持多种缓存投毒漏洞类型的扫描。


本教学文档涵盖了CPDoS攻击的主要类型、原理和实战案例,重点突出了各种攻击手法的技术细节和实际应用场景。在实际渗透测试中,应特别注意缓存键的识别和异常响应的缓存行为分析,这是发现缓存投毒漏洞的关键所在。

Web缓存投毒攻击(CPDoS)深度解析与实战教学 一、缓存投毒概述 缓存投毒(Web Cache Poisoning) 是一种利用Web缓存机制漏洞的攻击手段,攻击者将恶意数据注入缓存系统,导致其他用户访问相同资源时接收到被篡改的内容。这种攻击可导致多种危害: 拒绝服务(DoS) 跨站脚本攻击(XSS) 恶意重定向 数据泄露 CPDoS(Cache-Poisoned Denial-of-Service) 是2019年提出的针对Web缓存系统的特殊攻击类型,利用缓存系统与源服务器处理HTTP请求的差异,导致缓存错误响应页面,引发拒绝服务。 二、HTTP请求头溢出(HHO)攻击 原理 利用CDN/代理与后端服务器对HTTP请求头大小限制的差异: 服务器限制(如Apache):~8,192字节 CDN限制(如Cloudfront):可达20,480字节 当攻击者发送介于两者之间的请求头时: CDN正常处理请求 后端服务器返回异常(如400错误) CDN缓存此异常响应 后续用户请求都收到错误响应 实战案例 案例1:云点播服务漏洞 缓存键:任意GET参数 后端对超大请求返回400状态码 CDN配置为缓存400响应3秒 攻击效果:每3秒发送一次恶意请求,可维持持续拒绝服务状态 案例2:无缓存键目标的攻击 目标缓存过期时间极短(30秒) 在缓存失效瞬间发送恶意请求 攻击效果:所有用户请求都收到400错误响应 风险:可能影响正常业务(Bugcrowd评级P4,赏金$850) 三、HTTP方法覆盖(HMO)攻击 原理 利用Web框架提供的特殊请求头绕过中间设备限制: 常见中间设备(负载均衡器、WAF等)通常只允许GET/POST方法 Web框架提供覆盖头: X-HTTP-Method-Override X-HTTP-Method X-Method-Override 攻击流程 攻击者添加方法覆盖头(如 X-HTTP-Method-Override:POST ) CDN/代理将请求方法重置为POST转发给后端 目标接口不支持POST方法,返回400错误 CDN缓存错误响应 维持攻击:每3秒发送一次恶意请求 四、HTTP重定向DoS攻击 原理 通过缓存恶意重定向响应,导致用户陷入无限重定向循环或访问不存在的资源。 实战案例 案例1:参数差异利用 缓存键:Origin请求头 发现特殊参数 page : 无值时:301跳转并在Location中添加 ?page 有值时:不添加到Location 攻击效果:请求 / 被重定向到 /?page ,形成无限循环 案例2:Accept-Language头利用 缓存键:Accept-Language请求头 GET参数不是缓存键 发现: 默认请求301跳转到 /en/ GET参数会跟随跳转并URL解码 传递非法参数可导致500错误 攻击效果:构造恶意请求导致持续错误(赏金$2900) 五、黑名单缓存投毒 原理 利用目标站点对特定User-Agent的黑名单机制: 当UA被识别为扫描器/爬虫时返回异常 攻击者伪造此类UA使异常响应被缓存 后续合法用户请求也收到错误响应 六、畸形HOST头攻击 实战案例 缓存键:仅Lang GET参数 攻击构造: https://xxxx.com?Lang=11111111 效果:目标无限跳转到自身URL,导致拒绝服务 赏金:1000欧元 七、其他可疑请求头攻击 除上述类型外,还需注意: MAX-forwards if-modified-since 其他业务相关的自定义头 八、防御措施 严格配置缓存键 :只包含必要的参数/头 统一请求处理规范 :确保CDN与后端一致 限制缓存错误响应 :避免缓存4xx/5xx状态码 请求头大小限制 :前后端保持相同限制 方法过滤 :严格限制支持的HTTP方法 黑名单策略优化 :避免可预测的拦截行为 九、检测工具 推荐使用 wcpvs 工具进行自动化检测,支持多种缓存投毒漏洞类型的扫描。 本教学文档涵盖了CPDoS攻击的主要类型、原理和实战案例,重点突出了各种攻击手法的技术细节和实际应用场景。在实际渗透测试中,应特别注意缓存键的识别和异常响应的缓存行为分析,这是发现缓存投毒漏洞的关键所在。