当前位置: 首页 > article >正文

HTTP 请求走私(HTTP Request Smuggling)

HTTP 请求走私(HTTP Request Smuggling)是一种通过利用前端代理(如负载均衡器、CDN)和后端服务器在 解析 HTTP 请求时存在不一致性 的漏洞,从而实现 注入恶意请求 的攻击技术。


一、基本原理

HTTP 请求走私主要依赖两个请求头字段的不一致处理:

  • Content-Length:指明请求体的长度。

  • Transfer-Encoding: chunked:指明请求体是分块传输的。

不一致的场景

当前端和后端服务器对这两个头的解释不一致时,攻击者就能将多个请求“混淆”为一个请求,从而:

  • 绕过认证

  • 注入恶意请求

  • 劫持用户会话

  • 发起缓存投毒

  • 进行 XSS / CSRF 攻击

常见的组合方式:

名称条件
CL.TE前端使用 Content-Length,后端使用 Transfer-Encoding
TE.CL前端使用 Transfer-Encoding,后端使用 Content-Length
TE.TE前端和后端都支持 Transfer-Encoding,但处理方式不同

二、CL.TE 类型攻击示例

假设你有以下攻击场景:

  • 前端(比如 Nginx)使用 Content-Length 解析请求;

  • 后端(比如 Apache)使用 Transfer-Encoding: chunked 解析请求。

攻击请求如下:

POST / HTTP/1.1
Host: vulnerable.site
Content-Length: 62
Transfer-Encoding: chunked0GET /admin HTTP/1.1
Host: vulnerable.site

解析过程:

前端(Nginx)

  • 只看 Content-Length: 62,把整段请求当作一个完整请求发送到后端。

后端(Apache)

  • 看到 Transfer-Encoding: chunked,开始以分块方式解析请求。

  • 0\r\n\r\n 表示请求体结束。

  • 后面的 GET /admin HTTP/1.1... 被解释为另一个完整的 HTTP 请求

→ 后端就会执行这个攻击者构造的请求 GET /admin,可能会绕过权限控制!


三、防御方式

  1. 统一前后端解析逻辑

    • 确保前后端对 HTTP 请求头的处理一致。

  2. 禁止混合使用 Content-LengthTransfer-Encoding

    • 可以在 Web 应用防火墙(WAF)中检测并拒绝。

  3. 升级服务器

    • 新版本的服务器通常修复了相关解析不一致的问题。

  4. 使用 Web Application Firewall(WAF)

    • 例如 ModSecurity 可以检测这种模糊请求。

  5. 启用 Chunked 请求白名单机制

    • 如果应用不需要 chunked 编码,直接禁用该特性。


以下是一个真实的 HTTP 请求走私(HTTP Request Smuggling)攻击案例,展示了其在现实世界中的危害性。


🧪 案例:利用请求走私劫持用户会话

安全公司 Outpost24 在一次渗透测试中发现,某 Web 应用存在 TE:CL 类型的请求走私漏洞。通过精心构造的请求,攻击者成功实现了响应队列的不同步(Response Queue Desynchronization),从而劫持了其他用户的会话。Outpost24+1Outpost24+1

攻击过程:

  1. 识别漏洞:使用工具检测到前端服务器使用 Transfer-Encoding 解析请求,而后端服务器使用 Content-Length,存在解析不一致。

  2. 构造恶意请求:发送包含两个请求的单个 HTTP 请求,其中第一个请求设置了特定的头部,使后端服务器将两个请求视为一个,从而导致响应队列不同步。

  3. 劫持会话:由于响应队列不同步,攻击者能够接收到属于其他用户的响应,其中可能包含敏感信息,如访问令牌。


🔍 案例:Apache Tomcat 中的请求走私漏洞(CVE-2021-33037)

Apache Tomcat 是广泛使用的 Java Web 服务器。在 2021 年,发现其存在一个请求走私漏洞(CVE-2021-33037),影响版本包括 8.5.0 至 8.5.66、9.0.0.M1 至 9.0.46 和 10.0.0-M1 至 10.0.6。该漏洞源于 Tomcat 在某些情况下未正确解析 HTTP 的 Transfer-Encoding 请求头,导致在与反向代理一起使用时可能发生请求走私。QualysPortSwigger+1Qualys+1

攻击者可以利用该漏洞,隐藏恶意请求在正常请求中,绕过安全检查,执行未授权的操作。该漏洞已在后续版本中修复,建议用户升级至最新版本。

http://www.lryc.cn/news/2379516.html

相关文章:

  • 基于WebRTC的实时语音对话系统:从语音识别到AI回复
  • typeof运算符和深拷贝
  • .Net HttpClient 使用 Cookie
  • Python爬虫实战:通过PyExecJS库实现逆向解密
  • Java中的伪共享(False Sharing):隐藏的性能杀手与高并发优化实战
  • GO语言语法---switch语句
  • 开疆智能Profient转ModbusTCP网关连接ABB机器人MODBUS TCP通讯案例
  • 解决qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
  • 【洛谷P3386】二分图最大匹配之Kuhn算法/匈牙利算法:直观理解
  • Text2SQL:自助式数据报表开发---0517
  • 使用Visual Studio将C#程序发布为.exe文件
  • 写spark程序数据计算( 数据库的计算,求和,汇总之类的)连接mysql数据库,写入计算结果
  • React Flow 边的基础知识与示例:从基本属性到代码实例详解
  • oracle 资源管理器的使用
  • 新手入门系列-linux系统下安装和使用docker
  • mysql中4种扫描方式和聚簇索引非聚簇索引【爽文一篇】
  • 贝叶斯优化Transformer融合支持向量机多变量回归预测,附相关性气泡图、散点密度图,Matlab实现
  • 水平可见直线--上凸包(andrew算法
  • 【mysql】并发 Insert 的死锁问题 第二弹
  • Docker配置SRS服务器 ,ffmpeg使用rtmp协议推流+vlc拉流
  • 一个stm32工程从底层上都需要由哪些文件构成
  • [Mac] 开发环境部署工具ServBay 1.12.2
  • 商城小程序源码介绍
  • 鸿蒙OSUniApp 实现图片上传与压缩功能#三方框架 #Uniapp
  • 科技项目验收测试对软件产品和企业分别有哪些好处?
  • javascript和vue的不同
  • duxapp 2025-01-06更新 CLI新增帮助支持,优化基础模块结构
  • 汽车零部件冲压车间MES一体机解决方案
  • hysAnalyser 从MPEG-TS导出ES功能说明
  • 家里wifi不能上网或莫名跳转到赌博及色情网站就是域名被劫持、DNS被污染了