9.7 KiB
HTTP响应走私/解同步
从零开始学习AWS黑客攻击直到成为英雄 htARTE (HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想在HackTricks中看到您的公司广告或下载HackTricks的PDF,请查看订阅计划!
- 获取官方PEASS & HackTricks商品
- 发现PEASS家族,我们独家的NFTs系列
- 加入 💬 Discord群组 或 telegram群组 或在 Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github仓库提交PR来分享您的黑客技巧。
HTTP请求队列解同步
首先,这项技术利用了HTTP请求走私漏洞,所以你需要知道它是什么:
这项技术与常见的HTTP请求走私的主要区别在于,不是通过在受害者的请求前添加前缀来攻击,而是要泄露或修改受害者收到的响应。这是通过发送2个完整的请求来解同步代理响应队列,而不是发送1个半请求来滥用HTTP请求走私。
这是因为我们将能够解同步响应队列,所以受害者的合法请求的响应会被发送给攻击者,或者通过在发送给受害者的响应中注入攻击者控制的内容。
HTTP管道解同步
HTTP/1.1允许请求不同的资源而不需要等待前一个资源。因此,如果中间有代理,代理的任务是保持发送到后端的请求与从后端来的响应的同步匹配。
然而,解同步响应队列存在一个问题。如果攻击者发送一个HTTP响应走私攻击,并且对初始请求和走私请求的响应立即被回复,走私的响应不会被插入到受害者响应的队列中,而是会被当作错误丢弃。
因此,需要走私的请求在后端服务器内处理的时间更长。因此,当走私请求被处理时,与攻击者的通信已经结束。
如果在这种特定情况下,受害者已经发送了一个请求,并且在合法请求之前回复了走私请求,走私的响应将被发送给受害者。因此,攻击者将控制受害者“执行”的请求。
此外,如果攻击者随后执行了一个请求,并且对受害者请求的合法响应在攻击者的请求之前被回答。受害者的响应将被发送给攻击者,窃取了原本属于受害者的响应(例如可能包含Set-Cookie头的响应)。
多重嵌套注入
与常见的HTTP请求走私相比,另一个有趣的区别在于,在常见的走私攻击中,目标是修改受害者请求的开头,使其执行意外的操作。在HTTP响应走私攻击中,由于你发送完整的请求,你可以在一个有效载荷中注入数十个响应,这些响应将解同步数十个用户,他们将接收到注入的响应。
除了能够更容易地分发数十个漏洞给合法用户外,这也可以用来对服务器造成DoS。
利用组织
如前所述,为了滥用这项技术,需要第一个走私的消息进入服务器需要很长时间来处理。
如果我们只是想尝试窃取受害者的响应,这个耗时的请求就足够了。但如果你想执行一个更复杂的利用,这将是利用的常见结构。
首先是利用HTTP请求走私的初始请求,然后是耗时的请求,然后是一个或多个有效载荷请求,其响应将被发送给受害者。
滥用HTTP响应队列解同步
捕获其他用户的请求
与已知的HTTP请求走私有效载荷一样,你可以窃取受害者的请求,但有一个重要的区别:在这种情况下,你只需要发送的内容反映在响应中,不需要持久存储。
首先,攻击者发送一个包含最终POST请求和反映参数的有效载荷,并且Content-Length很大
然后,一旦初始请求(蓝色)被处理,并且在处理睡眠请求(黄色)时,下一个来自受害者的请求将会被追加到队列中,紧跟在反映参数之后:
然后,受害者将接收到睡眠请求的响应,如果与此同时攻击者****发送了另一个请求,反映内容请求的响应将被发送给他。
响应解同步
到目前为止,我们已经学会了如何滥用HTTP请求走私攻击来控制客户端将要接收其响应的请求,以及你如何可以窃取原本属于受害者的响应。
但是,仍然有可能进一步解同步响应。
有一些像HEAD请求这样的有趣请求,它们被指定为响应体内没有任何内容,并且应该(必须)包含Content-Length,就像如果它是一个GET请求一样。
因此,如果攻击者注入了一个HEAD请求,如下图所示:
然后,一旦蓝色的响应被发送给攻击者,下一个受害者的请求将被引入队列:
然后,受害者将接收到HEAD请求的响应,这将包含Content-Length但根本没有内容。因此,代理不会将此响应发送给受害者,而是会等待一些内容,实际上将是对黄色请求的响应(也由攻击者注入):
内容混淆
根据前面的例子,知道你可以控制受害者将接收其响应的请求体,并且HEAD响应通常在其头部包含Content-Type和Content-Length,你可以发送如下请求来在受害者页面上引起XSS,而无需页面本身存在XSS漏洞:
缓存投毒
利用前面评论过的响应解同步内容混淆攻击,如果缓存存储了受害者执行的请求的响应,并且这个响应是注入的导致XSS的响应,那么缓存就被投毒了。
包含XSS有效载荷的恶意请求:
发送给受害者的恶意响应,其中包含指示缓存存储响应的头部:
{% hint style="warning" %} 请注意,在这种情况下,如果**“受害者”是攻击者**,他现在可以在任意URL上执行缓存投毒,因为他可以控制将要被缓存的URL与恶意响应。 {% endhint %}
Web缓存欺骗
这种攻击与前一种类似,但不是在缓存中注入有效载荷,攻击者将缓存受害者的信息到缓存中:
响应分割
这种攻击的目标是再次滥用响应解同步,以便使代理发送100%由攻击者生成的响应。
为了实现这一点,攻击者需要找到一个Web应用程序的端点,该端点在响应中反映了一些值,并且知道HEAD响应的内容长度。
他将发送一个利用,如下所示:
在第一个请求被解决并发送回攻击者之后,受害者的请求被添加到队列中:
受害者将收到作为响应的HEAD响应 + 第二个请求响应的内容(包含部分反映的数据):
然而,请注意反映的数据的大小是根据HEAD响应的Content-Length,它生成了响应队列中的有效HTTP响应。
因此,第二个受害者的下一个请求将会接收到完全由攻击者制作的响应。由于响应完全由攻击者制作,他也可以让代理缓存响应。
参考资料
- 不要忘记查看这个视频,非常好地解释了所有这些技术:https://www.youtube.com/watch?v=suxDcYViwao&t=1343s
从零开始学习AWS黑客攻击直到成为英雄 htARTE (HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想在HackTricks中看到您的公司广告或下载HackTricks的PDF,请查看订阅计划!
- 获取官方PEASS & HackTricks商品
- 发现PEASS家族,我们独家的NFTs系列
- 加入 💬 Discord群组 或 telegram群组 或在 Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github仓库提交PR来分享您的黑客技巧。