HTTP-Request-Smuggling-Part.2 实验

1.概述

看到好像很多人都只看了part.1的原文,其实portswigger也准备了lab环境,能够让人更深的理解这个方法。

本文应该就是个自己做这个lab的流水账。

lab环境原文:https://portswigger.net/web-security/request-smuggling

2.Lab: HTTP request smuggling, basic CL.TE vulnerability

Lab地址:https://portswigger.net/web-security/request-smuggling/lab-basic-cl-te

本实验涉及前端和后端服务器,前端服务器不支持分块传输。前端服务器拒绝未使用GET或POST方法的请求。

要解决实验问题,请将请求走私到后端服务器,以便后端服务器处理的下一个请求似乎使用GPOST方法。

题目很简单,打开lab地址,随便触发了一个post包,burp直接改body

upload successful

这里有个点需要注意,抓到的包Connection是close,需要改成keep-alive

然后Content-Length Burp会自动给你补,不用自己写。

这里只需要再发一个同样的请求

upload successful

可以看到服务器提示不支持GPOST方法,说明我们已经成功了。

3.Lab: HTTP request smuggling, basic TE.CL vulnerability

Lab地址:https://portswigger.net/web-security/request-smuggling/lab-basic-te-cl

此实验涉及前端和后端服务器,后端服务器不支持分块传输。前端服务器拒绝未使用GET或POST方法的请求。

要解决实验问题,请将请求走私到后端服务器,以便后端服务器处理的下一个请求似乎使用GPOST方法。

这里首先有个问题,因为Burp自动帮你补充Content-Length,所以需要先把这个关掉

upload successful

然后你就会发现,后面有蛇毒。构造的请求包有问题服务器就会响应Invalid request。

因为要符合chunked的格式,然后我这边看了答案才想起来。

upload successful

首先那个5c指的是0之前的所有字符包括换行的长度

chunked的格式其实很简单,一个长度,然后后面跟设定长度的内容,然后再一个长度,再后面跟设定长度的内容,最后0结尾。

还有一个终极蛇皮问题,0的后面要敲两个换行。

所以这边只是卡在了构造符合chunked的请求,那么只要构造出来,再发送一次就OK了。

upload successful

4.Lab: HTTP request smuggling, obfuscating the TE header

Lab地址:https://portswigger.net/web-security/request-smuggling/lab-ofuscating-te-header

此实验涉及前端和后端服务器,两个服务器以不同方式处理重复的HTTP请求标头。 前端服务器拒绝未使用GET或POST方法的请求。

要解决实验问题,请将请求走私到后端服务器,以便后端服务器处理的下一个请求似乎使用GPOST方法。

首先这样,超时了以为CL.TE

upload successful

然后直接这样

upload successful

发了几次竟然不行,那么很有可能,上面的超时是有问题的。

根据之前的经验,这样发现报错了,如果是CL.TE,这里也应该超时,那只能是前面是TE,后面是CL了。

upload successful

然后这样,还是不行

upload successful

看答案,要多加个Transfer-encoding。

upload successful

交换下位置。

upload successful

报的是后端出错。

看我星光哥的文章,https://www.cnblogs.com/icez/p/web-security-request-smuggling.html

那么只可能是,后端也认TE,但是,由于多传了一个Transfer-encoding,然后后端服务器只认后一个Transfer-encoding,然后发现这个头不对,就用了CL解析。

那么如果交换位置,应该回正常的响应。

或者是后端发现有两个Transfer-encoding,那交换位置应该是给个正常的响应。

然后又猜测是前端给后端传的时候处理了头部,于是用评论功能,整到了交换位置了以后,发往后端的请求,结果压根啥处理都没有

upload successful

然后把TE,CL,Te,排列组合,摆放不同的情况,只有Te,在TE下面才行,想不明白到底后端是怎么做的处理,有想出来可以教教我。