用途
该技能用于 HTTP 请求走私(request smuggling)与消息去同步(desynchronization)测试。当怀疑 CDN、反向代理、WAF 或负载均衡器与源站对请求结束边界判断不一致时加载,或在 HTTP/2 降级到 HTTP/1.1 过程中出现异常拼接时使用。其核心定义是:两个(或多个)HTTP 处理实体在同一个 TCP/TLS 流中,对请求一何时结束、请求二何时开始的判断不一致,使攻击者能在一个逻辑请求内夹带部分或完整的第二个请求。
手册强调,这不是「首部注入」——它是各跳之间在消息边界上的分歧。与 CRLF 注入的区别在于:CRLF 通常注入到响应或首部行,而走私针对的是 RFC 7230 消息分帧(Content-Length / chunked)的实现差异。高价值影响包括:WAF 规则绕过(夹带体在前端请求中不可见)、在共享源站连接上劫持其他用户请求(队列投毒)、辅助缓存投毒,以及认证边界混淆。
主要能力
CL.TE 探测:前端信任 Content-Length、后端信任 Transfer-Encoding: chunked 的场景。示例使用很短的 CL 让前端接受一个假结尾,而后端继续按 chunk 解析,把剩余字节留给下一个请求。
TE.CL 探测:前端解析 chunked、后端只读 Content-Length 的场景。将 CL 设为 chunk 长度行的字节数(常见为 4,即两个十六进制字符加 CRLF),使后端只消费长度行,其余字节缓冲用于拼接后续请求。示例中内嵌第二个请求,chunk 长度行 35(十六进制)= 53 字节,并提示若改动路径或首部,需重新计算 chunk 长度并更新十六进制长度行。
TE.TE 混淆:前后端都声称处理 Transfer-Encoding,但在哪个 TE 值有效或合法上存在差异,仍可产生等效去同步。手册给出 8 种混淆变体用于探测解析差异,包括 xchunked、字段名与冒号间加空格、重复的 Transfer-Encoding 行、值 x、值以 TAB 开头、行首带一个空格、利用行延续(上一行值为 X、下一行以 Transfer-Encoding 开头)、以及字段名与冒号分处不同物理行等。策略是对每个(前端,后端)组合枚举哪一侧接受哪种变体为 chunked,再映射到等效的 CL.TE 或 TE.CL。
HTTP/2 请求走私:覆盖 H2 到 H1 降级场景下的伪首部映射顺序错误、被禁止首部(如某些 Connection 组合)被错误转发、重复首部合并规则与源站不一致等。还给出伪首部 / 首部注入走私的概念载荷,说明若某一跳把完整字符串保留在首部值中、下一跳在 H1 重建时错误切分,解析可能在 \r\n\r\n 处开始新的 GET / HTTP/1.1。测试方向包括 H2 中 Transfer-Encoding / Content-Length 的重复与大小写处理、:method 或 :path 含异常字符时的降级行为、隧道或扩展 CONNECT 与走私的交互。
客户端去同步(Client-side Desync):浏览器请求体处理与中间件/源站不同,或 no-cors 加预检豁免允许非常规消息,产生类似经典 CL.TE/TE.CL 的队列效应(依赖架构)。手册给出 HEAD + GET 链的思路,以及一段 JavaScript PoC 形态的 fetch 调用(method POST、mode no-cors、credentials include、body 含原始 GET 请求字节)。并提示浏览器安全模型限制直接读取,成功通常表现为同连接上其他请求的副作用或服务端日志/行为异常,而非直接读取响应。
使用方式
手册给出检测决策树:先判断路径中是否有反向代理 / CDN;若无则经典走私可能性低(仍应测试 H2 去同步);若有则判断能否同时发送 TE 与 CL,进而按前端更信任哪一侧走向 CL.TE 探测、TE.CL 探测或 TE.TE 混淆,并结合时间 / 内容 / 队列投毒信号以及成对矩阵(哪一跳接受哪种变体)进行确认,最后用第二个请求被夹带(可重放安全)或类似 Collaborator 的侧信道信号确认。
工具部分列出:Burp Suite 的 HTTP Request Smuggler(BApp Store),用于自动化去同步检测、常见变体与时间差检查;defparam/smuggler(GitHub),用于批量生成/发送走私探测的 Python 脚本;dhmosfunk/simple-http-smuggler-generator(GitHub),用于快速拼装原始 CL.TE / TE.CL 消息模板。工具使用建议是:先被动确认前端 + 源站的两跳路径,再选择干扰最小的探测,并在生产环境降低并发。
相关路由方面:当 HTTP 客户端库为 Apache HttpClient <= 4.5.9(HTTPCLIENT-1974/1978)时,转用 ghost-bits-cast-attack 技能,向首部值注入 瘍瘊(U+760D U+760A,低字节为 \r\n)会使底层字符转字节写入器输出字面 CRLF,从而在源站切分请求,不依赖 CL/TE 分歧。若输入进入解释器/查询语言/模板(而非 HTTP 分帧),转 Injection Testing Router(再深入 XSS、SQLi、SSTI 等)。若涉及响应首部拆分 / Location CRLF,转 CRLF Injection。若涉及缓存与路径键混淆,转 Web Cache Deception。一旦确认为 HTTP 消息边界问题而非参数注入,应留在本技能内以避免误入通用注入流程。
手册还提示可加载 H2_SMUGGLING_VARIANTS.md 获取:H2.CL 与 H2.TE 变体及字节级载荷示例;CL.0(连接关闭去同步)技术与检测;Fat GET 请求走私(GET 请求中带 body);请求走私 → 缓存投毒链(响应队列错位);基于浏览器 Fetch API 的客户端去同步及 JavaScript PoC 模板;CDN/反向代理产品行为矩阵(HAProxy、Nginx、Apache、Cloudflare、AWS ALB、Envoy、Varnish 等)。
适用场景
适用于授权范围内的安全测试:存在前端代理 / CDN / 负载均衡的多跳架构、H2 降级到 H1 的边界、WAF 部署在源站之前、多租户共享源站连接等情形。也可用于 CTF 与研究环境中的消息边界问题复现。
限制
必须仅在授权范围内测试。并发走私可能污染连接池、破坏缓存或影响其他租户,应优先使用隔离环境或低流量窗口。TE.CL 中 chunk 长度必须是合法十六进制,第二个请求需符合目标对 Host、路径和会话 cookie 的预期,时序窗口与连接复用策略决定能否命中其他用户的请求。客户端去同步的成功判定受同源策略、CORS 及扩展/代理因素影响,通常无法直接读取响应。该技能的收费、价格、平台与具体使用步骤,资料中暂未提供。