写在前面
http走私的原理介绍:
Part1
在前面介绍了http走私的探测方法,基本利用。在这里来看看在实际场景中这个漏洞的相关利用吧
Exploiting HTTP request smuggling to bypass front-end security controls, CL.TE vulnerability
这里是使用http
走私来绕过前端安全限制,在一些应用程序中,会使用前端服务器来实现访问控制限制,只有授权了,前端才转发该请求。但是后端是不识别的,后端接受每个请求,默认前端完成访问控制。
比如:当前用户被允许访问/home
但不允许访问/admin
。可以使用以下请求走私攻击绕过此限制:
POST /home HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 62
Transfer-Encoding: chunked
0
GET /admin HTTP/1.1
Host: vulnerable-website.com
Foo: xGET /home HTTP/1.1
Host: vulnerable-website.com
前端会看到两个请求,两个 /home
。传往后端后,后端识别TE,处理两个请求,一个/home
一个/admin
这里,先请求 /admin
显然无法访问。
请求 /
首页可以完成
使用插件开cl-te
探测,出现请求差异,有http走私漏洞
修改一下这个请求,发出这个请求两次,后端开始响应第二个请求。出现401
未授权
补全一下请求头,注意此时应使用下列写法。这样可以把下一个请求放入body
中,这样请求头不会冲突。这里response
就已经进入了 /admin
,找到敏感链接,再次走私请求
请求完成
Exploiting HTTP request smuggling to bypass front-end security controls, TE.CL vulnerability
前面是cl-te
,这里是te-cl
,首先同样 /admin
无法访问
出现响应差异,漏洞探测成功。
和前面一样的思路进行修改,不过此时te
是正常的,注意修改后每次重新计算分块值。此时cl
较少(注意关闭自动更新cl
),分割出第二个请求,前端看到为一个正常请求,后端看到一个请求和一个等待完善的请求。发送两次即可。
进入敏感链接
Exploiting HTTP request smuggling to reveal front-end request rewriting
对于请求,前端服务器可能有字段限定,比如限制一个请求必须含有x-forwarded-for
,限制ip。而请求走私出去的请求,你并不知道要加哪些字段才能作为一个“正常”请求。
对于这个问题有两个解决方案,第一就是直接看,查看请求走私的前一个请求,有哪些字段看似是必需的,加上去就行了。第二,将请求走私的内容进行回显,这非常有效,因为此时回显的请求,是已经被前端服务器识别成功的请求,你可以看到解析后的请求(或waf后)是怎样的。
探测明显有走私漏洞
取出这个请求走私点
除了正常的浏览之外,还有一个搜索功能,返回会显示搜索了什么值
就像这样
抓出搜索请求的包,修改为一个走私请求
这里的请求回显,cl
要长,这样post
请求就不会被截断,这样才可以让下一个请求成为post
的body
。
显然这里识别了请求头 X-TaMrxw-Ip
,也就是说,ip
是作为判断条件之一的,现在我们加上它,同时设ip
为本地。注意每个靶场这个值都是不同的
成功访问
发出敏感链接包
Exploiting HTTP request smuggling to capture other users’ requests
通过上面的请求,相信你也发现了,http
请求走私还可以暴露下一个请求的请求细节,尤其是已经被识别过的请求,更加致命。这个场景就是在不断地在http
请求走私中发现其他用户的敏感请求,利用敏感信息,完成攻击。这就是“捕获其他用户请求”。
由于是对别人发起攻击,那么一定是一个公共的功能,就不再是对主页请求这种东西了,即使捕获到其他用户对主页的请求,也很难获得敏感信息。浏览一下,只有这个评论点有可能出现敏感信息,因为肯定是登录了再评论
抓出发表评论包
测试该点是否可以进行走私请求,响应差异探测成功。
带cookie
,很容易想到的: 如果拦截到请求,就可以以别人的身份发评论,查看别人登录的情况
不过仍然要处理的就是回显点,想要获取到下一个请求的消息,必须有一个地方来进行回显,这个点就是评论,需要打乱参数,让下一个请求成为评论,而不是链接
这里要多试几次,很有可能是自己的包。多点几下。得到cookie: victim-fingerprint=2F4rpxi73qg5fYoNzPUzLMiS7zJzUTmD; secret=A1xkItl3COG2MIYp7o9szNosj0B4YzI7; session=Cip1s2nRdN57CNSCPqEbRceGHDqp88Ed
抓一个进入个人页面的包,这里由于没登录,跳转到了登录,更改cookie
完成