关于 hunt-http-smuggling
hunt-http-smuggling 是用于评估 HTTP 请求走私风险的安全测试技能,面向渗透测试人员。它涵盖 CL.TE、TE.CL 与 HTTP/2 降级探测,并强调先识别前端代理,再验证影响是否波及其他客户端。
主要功能
- 01检查 CL.TE 与 TE.CL 请求走私
- 02探测 HTTP/2 降级相关向量
- 03依据代理类型评估目标适用性
- 04提供 Burp 扩展及手动时延验证方法
- 05关联缓存投毒与认证绕过等攻击链
- 06要求验证跨客户端影响再判定严重性
适用场景
- 01评估 CDN 或代理链的请求解析差异
- 02针对 HTTP/2 前端选择相应探测方式
- 03验证走私请求是否影响其他用户会话
- 04分析请求走私与缓存投毒的组合风险
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ elementalsouls/ claude-bughunter --skill hunt-http-smuggling安装后在 Claude Code 中输入/hunt-http-smuggling确认已加载。
详细介绍
17. HTTP 请求走私
重复率最低。奖金为 5,000–30,000 美元。PortSwigger 研究,由 James Kettle 撰写。
CL.TE(前端使用 Content-Length,后端使用 Transfer-Encoding)
POST / HTTP/1.1
Content-Length: 13
Transfer-Encoding: chunked
0
SMUGGLED
检测
1. Burp extension: HTTP Request Smuggler
2. Right-click request → Extensions → HTTP Request Smuggler → Smuggle probe
3. Manual timing: CL.TE probe + ~10s delay = backend waiting for rest of body
影响链
Poison next request → access admin as victim
Steal credentials → capture victim's session
Cache poisoning → stored XSS at scale
目标适用性矩阵(2026 年现实检查)
经典的 CL.TE / TE.CL 载荷并非在 2026 年普遍可利用。现代代理默认严格遵循 RFC 9112。投入时间前,先识别前端。
| 前端 | CL.TE | TE.CL | H2.CL | H2.TE | 备注 |
|---|---|---|---|---|---|
| Nginx ≥ 1.21 | 否 | 否 | 部分可用(H2 入口) | 部分可用 | 严格遵循 RFC;遇到 CL+TE 时返回 HTTP 400。在本地使用 Nginx 1.27 验证——前端拦截了所有 9 种已记录变体(docs/verification/phase2h-smuggling-cachepoison.md)。 |
| Caddy 2.x | 否 | 否 | — | — | 默认已加固 |
| Envoy ≥ 1.20 | 否 | 否 | 部分可用 | 部分可用 | 大多数路径都已加固 |
| HAProxy ≤ 2.4 | ✓ | ✓ | — | — | 存在漏洞,参见 CVE-2021-40346 |
| AWS ALB + 特定上游 | 部分可用 | 部分可用 | ✓ | ✓ | 2022–2024 年有多份已披露的付费报告 |
| Cloudflare → S3 / Lambda 链 | — | — | ✓ | ✓ | H2 降级攻击仍然可行 |
| 旧版 F5 BIG-IP(TMM < 16) | ✓ | — | — | — | 参见供应商公告 |
| Citrix ADC / NetScaler(旧版固件) | ✓ | ✓ | — | — | 2020–2022 年披露 |
| Squid 3.x | ✓ | — | — | — | 旧版部署 |
| Apache Traffic Server(旧版) | ✓ | ✓ | ✓ | ✓ | PortSwigger 研究 |
| Apache mod_proxy_ajp → Tomcat | — | — | — | — | 跨协议 HTTP→AJP 不同步(CVE-2022-26377);WAF 无法识别走私请求,而该请求会到达缺少外部身份验证控制的内部 AJP 管理/状态路径 |
| 自定义 Python / Go 代理 | ✓ | ✓ | — | — | 经常未能强制执行 RFC 规范 |
操作员指纹快速检查
curl -sI https://target/ | grep -i "Server:"
nginx/1.21+、Caddy、envoy→ 经典 CL/TE 已无效;如果前端支持 HTTP/2,则转向 H2.CL/H2.TE,或检查上游是否存在旧版代理HAProxy、标头指向 AWS/CDN → 运行完整载荷矩阵- 没有 Server 标头 → 假定已加固,但仍运行一次快速的
space-before-colon探测;如果没有返回 400,则深入检查
H2.CL / H2.TE(当前主要攻击向量)
H2 降级走私攻击依赖于前端与客户端使用 HTTP/2、与源站使用 HTTP/1.1。由于 HTTP/2 的帧长度标头在转换过程中无法被完整保留,这种降级会导致 CL/TE 混淆。2024–2026 年的大多数 CDN+源站链都采用这一精确拓扑。
针对 CDN 前置目标,应优先使用可发送原始 HTTP/2 帧的工具(Burp Pro 的 HTTP Request Smuggler 扩展、h2csmuggler、smuggler.py)。避免对 H2 前置目标使用仅支持 HTTP/1.1 的测试客户端(curl、原始套接字)——它们发送的协议完全不对。
大规模凭据窃取——“收集器 gadget”
影响最大的走私结果无需逐个受害者交互。不要盲目投毒队列,而是走私一条发往会回显完整请求的后端处理程序的请求——例如会反射标头的搜索端点,或会原样返回请求行的重定向。下一位受害者的标头(Cookie、Authorization、X-Access-Token)会被归入你的走私请求,而反射处理程序会在你能读取的响应中返回这些标头。在繁忙的 keep-alive 套接字上重复执行,就能大规模收集任意用户的有效凭据——即使流量经过 CDN(Akamai/Cloudflare),只要 CDN↔源站跃点发生不同步,这种方法依然有效。可链接至 hunt-ato。
相关技能与攻击链
hunt-cache-poison— 请求走私与缓存是典型的严重级别攻击链:一条走私请求会变成后续所有受害者收到的缓存响应。攻击链原语:通过 CL.TE 走私一条响应正文包含攻击者 HTML/JS 的请求 → 前端缓存将其存储在热门 URL(/、/login)下 → 发生去同步缓存投毒,走私请求成为后续 N 个受害者的缓存响应,并持续到缓存 TTL 到期。hunt-auth-bypass— 请求走私可以访问前端 WAF/身份验证代理会拦截的仅限内部路由。攻击链原语:将GET /admin/users HTTP/1.1走私经过阻止外部/admin/*的前端 ACL → 后端将走私请求当作来自可信内部来源的请求进行处理 → 通过走私内部路由请求绕过前端身份验证 → 管理员数据进入响应队列。hunt-idor— 请求走私会将下一位用户的会话 Cookie 附加到攻击者控制的请求路径。攻击链原语:走私不带 Cookie 的GET /api/me HTTP/1.1→ 后端将其与下一条合法用户入站连接的 Cookie 配对 → 受害者的会话 Cookie 被附加到攻击者走私的请求上 → 攻击者读取包含受害者 PII/令牌的响应。hunt-xss— 请求走私会将 XSS 载荷注入下一位受害者的响应流,且载荷从未出现在 URL 参数中。攻击链原语:走私请求正文包含反射型载荷,后端将其渲染到队列中的下一条响应 → 访问/的下一位访客会收到内嵌攻击者 HTML → 每位访客都会遭遇反射型 XSS,且访客或日志中都不会显示任何 URL 参数。security-arsenal— 使用请求走私载荷库(CL.TE / TE.CL / TE.TE 混淆、H2.CL 降级探测、h2csmuggler 单行命令、Burp HTTP Request Smuggler 扩展配置)和时间延迟确认模板,再进行手动十六进制编辑。triage-validation— 在认定为严重级别前,先运行 Pre-Severity Gate:走私请求的影响必须落在由其他客户端/会话发出的请求上,而不能是你自己后续发出的请求。仅在你自己的浏览器中观察到时间差异,只能说明解析器存在分歧,并不代表存在可利用的请求走私漏洞。