文档章节

4.17. HTTP 请求走私

o
 osc_2wq8ft8d
发布于 07/07 16:57
字数 847
阅读 30
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

4.17. HTTP 请求走私

4.17.1. 简介

HTTP请求走私是一种干扰网站处理HTTP请求序列方式的技术。

4.17.2. 成因

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

4.17.3. 分类

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

4.17.4. 攻击

4.17.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\n

GET /secret HTTP/1.1\r\n
Host: example.com\r\n
\r\n

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

4.17.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\n

12345\r\n
a

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

4.17.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.17.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.17.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

4.17.5. 防御

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

4.17.6. 参考链接

o
粉丝 0
博文 61
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
用vertx实现高吞吐量的站点计数器

工具:vertx,redis,mongodb,log4j 源代码地址:https://github.com/jianglibo/visitrank 先看架构图: 如果你不熟悉vertx,请先google一下。我这里将vertx当作一个容器,上面所有的圆圈要...

jianglibo
2014/04/03
3.8K
3
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
21
HTTPS切换工具--HttpsSwitcher

HttpsSwitcher 是一个帮你进行 HTTPS 切换的 Chrome 插件,本工具可以帮你尝试使用https打开指定的域名,点击本插件的浏览器图标后会自动切换本标 签页的http/https状态,并且会记住你的选择...

leehorsley
2013/01/26
874
0
漏洞检测工具--Peach Fuzzer

Peach是一种用Python编写的 Fuzzer。这种工具有助于发现并公开许多漏洞,并认为是黑客和安全团体中最流行的工具之一。为了利用Peach框架,必须创建Phthon脚本,脚本 中包含了在服务器上执行的...

匿名
2013/02/06
8.7K
1
REST/HTTP 工具包--Spray

Spray 是一个开源的 REST/HTTP 工具包和底层网络 IO 包,基于 Scala 和 Akka 构建。轻量级、异步、非堵塞、基于 actor 模式、模块化和可测试是 spray 的特点。 示例代码: val responses: F...

匿名
2013/02/20
6.9K
0

没有更多内容

加载失败,请刷新页面

加载更多

五分钟搞定WebRTC视频录制

WebRTC中文社区是一个为大家解决在使用WebRTC当中遇到问题所建立的社区,欢迎更多学习和使用WebRTC的人加入进来,一起建设。 视频录制 在之前的文章里我们提到过视频录制的两种方式:客户端录...

死磕音视频
20分钟前
13
0
互联网技术架构的设计原则 - 架构真经

这本书的英文原名是《Principles for Scaling Web Sites》,又名可扩展网站的50条军规,

这先生
21分钟前
13
0
📢📢 (2020.07.29)上午 10:30 📢📢开启第二轮红包赠书📚活动(小板凳请提前准备好)截至本月月末前还有最后 1 轮分享赠书活动 🎁(会在月末直接揭晓)具体...

本文分享自微信公众号 - 日拱一兵(gh_6235a38420b9)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。...

tan日拱一兵
07/28
0
0
CentOS-Docker安装Elasticsearch(单点)

下载镜像 $ docker pull elasticsearch:7.6.0 运行镜像 $ docker run --restart=always --name elasticsearch -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearc......

-自由人生-
32分钟前
19
0
贼好用的Java工具类库,GitHub星标10k+,你在用吗?

作者:Ryan Wang ryanc.cc/archives/hutool-java-tools-lib 简介 Hutool是Hu + tool的自造词,前者致敬我的“前任公司”,后者为工具之意,谐音“糊涂”,寓意追求“万事都作糊涂观,无所谓失...

路人甲Java
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部