什么是HTTP请求走私?
HTTP请求走私是一种干扰网站处理从一个或多个用户接收到的HTTP请求序列的技术。请求走私漏洞通常是关键性质的,允许攻击者绕过安全控制,获得对敏感数据的未授权访问,并直接危及应用程序的其他用户。
请求走私主要与HTTP/1请求相关。然而,支持HTTP/2的网站也可能易受攻击,这取决于其后端架构。
HTTP请求走私攻击是如何发生的?
如今的Web应用程序通常在用户和最终应用程序逻辑之间使用HTTP服务器链。用户将请求发送到前端服务器(有时称为负载均衡器或反向代理),前端服务器将请求转发到一个或多个后端服务器。这种架构在现代基于云的应用程序中越来越常见,在某些情况下是不可避免的。
当前端服务器将HTTP请求转发到后端服务器时,它通常会通过同一个后端网络连接发送多个请求,因为这更高效。协议非常简单;HTTP请求一个接一个地发送,接收服务器必须确定一个请求的结束和下一个请求的开始。
在这种情况下,前端和后端系统必须对请求之间的边界达成一致,否则攻击者可能会发送一个模棱两可的请求,该请求被前端和后端系统以不同的方式解释。
这里,攻击者导致其前端请求的一部分被后端服务器解释为下一个请求的开始。它实际上被插入到下一个请求之前,因此可以干扰应用程序处理该请求的方式。这就是请求走私攻击,它可能产生灾难性的后果。
HTTP请求走私漏洞是如何产生的?
大多数HTTP请求走私漏洞的产生是因为HTTP/1规范提供了两种不同的方法来指定请求的结束:Content-Length
头和Transfer-Encoding
头。
Content-Length
头很简单:它指定了消息体的长度(以字节为单位)。例如:
POST /search HTTP/1.1
Host: normal-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
q=smuggling
Transfer-Encoding
头可以用于指定消息体使用分块编码。这意味着消息体包含一个或多个数据块。每个块由块大小(以十六进制表示的字节数),后跟一个换行符,然后是块内容。消息以大小为零的块结束。例如:
POST /search HTTP/1.1
Host: normal-website.com
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
b
q=smuggling
0
注意
许多安全测试人员不知道分块编码可以在HTTP请求中使用,原因有两个:
-
Burp Suite会自动解包分块编码,以便更容易查看和编辑消息。
-
浏览器通常不会在请求中使用分块编码,它通常只在服务器响应中看到。
由于HTTP/1规范提供了两种不同的方法来指定HTTP消息的长度,因此一个消息可以同时使用这两种方法,使它们彼此冲突。规范试图通过规定如果同时存在Content-Length
和Transfer-Encoding
头,则应忽略Content-Length
头来防止此问题。这可能足以避免单个服务器的歧义,但当涉及两个或更多服务器时,问题可能会出现,原因如下:
-
一些服务器不支持请求中的
Transfer-Encoding
头。 -
一些支持
Transfer-E
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)