【由浅入深_打牢基础】WEB缓存投毒(上)
字数 1266 2025-08-12 11:33:35

WEB缓存投毒技术详解

1. WEB缓存投毒基础概念

1.1 基本定义

WEB缓存投毒是指攻击者利用缓存机制将有害的HTTP响应提供给用户的技术。当用户发起请求时,请求会先经过缓存检查,如果缓存中不存在该请求的响应,才会向后端服务器请求并将响应添加到缓存中。

1.2 缓存键(Cache Key)机制

  • 缓存键:预先定义的请求头中的一些键作为缓存键,只要这些缓存键的值相同,后端就认为两个请求是等效的
  • 非缓存键:头部中除缓存键外的其他键,是WEB缓存投毒的关键依赖点
  • Vary头:指示哪些请求头字段被用作缓存键

1.3 攻击条件

  1. 存在可被利用的非缓存键
  2. 页面内容会根据非缓存键的值动态生成

2. 攻击技术详解

2.1 利用未键标头投毒

攻击步骤

  1. 使用Param Miner插件探测影响响应的非缓存键(如X-Forwarded-Host)
  2. 构造恶意请求,在非缓存键中注入payload
  3. 确保请求不被缓存(可添加随机参数)
  4. 验证缓存是否被污染

示例

GET / HTTP/1.1
Host: test.com
X-Forwarded-Host: #'></a><script>alert(1)</script>

2.2 利用未键入的Cookie投毒

特点

  • Cookie通常不作为缓存键
  • 需要找到影响响应的Cookie参数

示例

GET / HTTP/1.1
Host: test.com
Cookie: fehost=someString"%2Balert(1)%2B"someString

2.3 多标头组合投毒

技术要点

  • 需要同时利用多个非缓存键(如X-Forwarded-Host和X-Forwarded-Scheme)
  • 组合效果可能导致重定向或资源加载变化

利用场景

  • 通过控制重定向目标实现JS文件投毒
  • 修改资源加载路径指向恶意服务器

2.4 针对性投毒(基于User-Agent)

特殊要求

  • 当Vary头包含User-Agent时,需要匹配目标UA
  • 可通过XSS或其他方式获取目标UA

攻击流程

  1. 发现X-Host等可影响JS加载路径的非缓存键
  2. 通过评论等交互功能获取目标UA
  3. 构造匹配UA的恶意请求进行投毒

2.5 无键查询字符串投毒

特点

  • 查询参数不作为缓存键
  • 可直接修改参数值实现投毒

示例

GET /?param=<script>alert(1)</script> HTTP/1.1
Host: test.com

2.6 未键入查询参数投毒

技术要点

  • 部分参数被排除在缓存键外(如utm_content)
  • UTM相关参数通常不作为缓存键

攻击方法

  1. 识别非缓存键参数
  2. 通过该参数传递恶意payload
  3. 确保主要参数保持不变

2.7 参数隐藏技术

高级技巧

  • 利用参数解析特性隐藏恶意payload
  • 通过分号等特殊字符构造复合参数

示例

GET /js/tracking.js?callback=setCountryCookie;utm_content=xxx;callback=alert(1) HTTP/1.1

3. 防御措施

3.1 服务器端防御

  1. 严格定义缓存键,包含所有影响响应的参数
  2. 对动态内容谨慎使用缓存
  3. 实施输入验证和输出编码

3.2 缓存配置建议

  1. 避免缓存包含用户特定数据的响应
  2. 对敏感操作禁用缓存
  3. 定期清除缓存

4. 工具推荐

  • Param Miner:Burp Suite插件,用于探测非缓存键和隐藏参数
  • Burp Scanner:自动化检测缓存投毒漏洞

5. 总结

WEB缓存投毒是一种危害严重的攻击技术,攻击者通过精心构造的请求污染缓存,使其他用户在不知情的情况下接收到恶意内容。防御的关键在于合理配置缓存机制,严格控制缓存键的组成,并对所有用户输入进行严格验证。

WEB缓存投毒技术详解 1. WEB缓存投毒基础概念 1.1 基本定义 WEB缓存投毒是指攻击者利用缓存机制将有害的HTTP响应提供给用户的技术。当用户发起请求时,请求会先经过缓存检查,如果缓存中不存在该请求的响应,才会向后端服务器请求并将响应添加到缓存中。 1.2 缓存键(Cache Key)机制 缓存键 :预先定义的请求头中的一些键作为缓存键,只要这些缓存键的值相同,后端就认为两个请求是等效的 非缓存键 :头部中除缓存键外的其他键,是WEB缓存投毒的关键依赖点 Vary头 :指示哪些请求头字段被用作缓存键 1.3 攻击条件 存在可被利用的非缓存键 页面内容会根据非缓存键的值动态生成 2. 攻击技术详解 2.1 利用未键标头投毒 攻击步骤 : 使用Param Miner插件探测影响响应的非缓存键(如X-Forwarded-Host) 构造恶意请求,在非缓存键中注入payload 确保请求不被缓存(可添加随机参数) 验证缓存是否被污染 示例 : 2.2 利用未键入的Cookie投毒 特点 : Cookie通常不作为缓存键 需要找到影响响应的Cookie参数 示例 : 2.3 多标头组合投毒 技术要点 : 需要同时利用多个非缓存键(如X-Forwarded-Host和X-Forwarded-Scheme) 组合效果可能导致重定向或资源加载变化 利用场景 : 通过控制重定向目标实现JS文件投毒 修改资源加载路径指向恶意服务器 2.4 针对性投毒(基于User-Agent) 特殊要求 : 当Vary头包含User-Agent时,需要匹配目标UA 可通过XSS或其他方式获取目标UA 攻击流程 : 发现X-Host等可影响JS加载路径的非缓存键 通过评论等交互功能获取目标UA 构造匹配UA的恶意请求进行投毒 2.5 无键查询字符串投毒 特点 : 查询参数不作为缓存键 可直接修改参数值实现投毒 示例 : 2.6 未键入查询参数投毒 技术要点 : 部分参数被排除在缓存键外(如utm_ content) UTM相关参数通常不作为缓存键 攻击方法 : 识别非缓存键参数 通过该参数传递恶意payload 确保主要参数保持不变 2.7 参数隐藏技术 高级技巧 : 利用参数解析特性隐藏恶意payload 通过分号等特殊字符构造复合参数 示例 : 3. 防御措施 3.1 服务器端防御 严格定义缓存键,包含所有影响响应的参数 对动态内容谨慎使用缓存 实施输入验证和输出编码 3.2 缓存配置建议 避免缓存包含用户特定数据的响应 对敏感操作禁用缓存 定期清除缓存 4. 工具推荐 Param Miner :Burp Suite插件,用于探测非缓存键和隐藏参数 Burp Scanner :自动化检测缓存投毒漏洞 5. 总结 WEB缓存投毒是一种危害严重的攻击技术,攻击者通过精心构造的请求污染缓存,使其他用户在不知情的情况下接收到恶意内容。防御的关键在于合理配置缓存机制,严格控制缓存键的组成,并对所有用户输入进行严格验证。