hacktricks/pentesting-web/http-response-smuggling-desync.md
2023-08-03 19:12:22 +00:00

154 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# HTTP响应欺骗/解同步
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 YouTube 🎥</strong></a></summary>
* 你在一家**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[NFT收藏品**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram群组**](https://t.me/peass) 或 **关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
</details>
## HTTP请求队列解同步
首先,这种技术**滥用了HTTP请求欺骗漏洞**,所以你需要知道这是什么:
这种技术与普通的HTTP请求欺骗的**主要区别**在于,**不是通过在受害者的请求前添加前缀来攻击受害者的请求**,而是通过**泄露或修改受害者接收到的响应**。这是通过发送两个完整的请求来解同步代理的响应队列而不是发送一个半个请求来滥用HTTP请求欺骗。
这是因为我们将能够解同步响应队列,使得来自受害者的合法请求的响应被发送给攻击者,或者通过在响应中注入攻击者控制的内容发送给受害者。
### HTTP管道解同步
HTTP/1.1允许在不等待前一个资源的情况下请求不同的资源。因此,如果中间有一个代理,它的任务是维护与后端发送的请求和来自后端的响应的同步匹配。
然而解同步响应队列存在一个问题。如果攻击者发送一个HTTP响应欺骗攻击并且对**初始请求和欺骗请求的响应立即响应**,那么欺骗的响应将不会被插入到受害者响应的队列中,而只会被**丢弃为错误**。
![](<../.gitbook/assets/image (635) (1) (1) (1).png>)
因此,需要让欺骗的请求在后端服务器中**需要更长的时间来处理**。因此,当欺骗的请求被处理时,与攻击者的通信将结束。
如果在这种特定情况下,**受害者发送了一个请求**,而**欺骗的请求在合法请求之前得到响应**,那么**欺骗的响应将被发送给受害者**。因此,攻击者将**控制受害者执行的请求**。
此外,如果**攻击者执行一个请求**,而**受害者的合法响应**在攻击者的请求之前**得到响应**,那么**受害者的响应将被发送给攻击者**,从而**窃取**受害者的响应(其中可能包含例如头部**Set-Cookie**)。
![](<../.gitbook/assets/image (658) (1).png>)
![](<../.gitbook/assets/image (655) (1) (1) (1).png>)
### 多重嵌套注入
与普通的HTTP请求欺骗相比另一个有趣的区别是在普通的欺骗攻击中目标是修改受害者请求的开头以执行意外的操作。在HTTP响应欺骗攻击中由于你发送的是完整的请求你可以在一个有效载荷中注入数十个响应这将导致数十个用户的解同步。
除了能够更容易地在合法用户之间分发数十个攻击外这也可以用于在服务器上造成DoS攻击。
### 攻击组织
如前所述,为了滥用这种技术,需要**第一个欺骗的消息**在服务器中**需要花费很长时间来处理**。
如果我们只想**尝试窃取受害者的响应**,那么这个**耗时的请求就足够了**。但是,如果你想执行一个更复杂的攻击,这将是攻击的常见结构。
首先是滥用**HTTP请求欺骗的初始请求**,然后是耗时的请求,然后是**1个或多个有效载荷请求**,其响应将发送给受害者。
## 滥用HTTP响应队列解同步
### 捕获其他用户的请求<a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a>
与已知的HTTP请求欺骗有效载荷一样你可以通过一个重要的区别**窃取受害者的请求**:在这种情况下,你只需要**发送的内容在响应中反映出来****不需要持久存储**。
首先,攻击者发送一个有效载荷,其中包含一个带有反映参数的**最终POST请求**和一个较大的Content-Length。
![](<../.gitbook/assets/image (625).png>)
然后,一旦**初始请求**(蓝色)被**处理**,而**正在处理**的**耗时请求**(黄色)**期间****来自受害者的下一个请求**将被**追加到队列中的反映参数之后**
![](<../.gitbook/assets/image (634) (1).png>)
然后,**受害者**将**接收到**对**耗时请求**的**响应**,如果同时**攻击者发送了另一个请求**,则**反映内容请求的响应将被发送给攻击者**。
## 响应解同步
到目前为止我们已经学习了如何利用HTTP请求劫持攻击来**控制**客户端将要**接收的响应**的**请求**,以及如何窃取本应该发送给受害者的响应。
但是,仍然有可能进一步**解同步**响应。
有一些有趣的请求,比如**HEAD**请求,规定其响应体内**不包含任何内容**,并且应该(必须)**包含与GET请求相同的Content-Length**。
因此,如果攻击者**注入**一个**HEAD**请求,就像这个图片中所示:
![](<../.gitbook/assets/image (626).png>)
然后,**一旦蓝色请求得到响应**,下一个受害者的请求就会被加入队列:
![](<../.gitbook/assets/image (651) (1) (1) (1) (1) (1) (1).png>)
然后,**受害者**将会**接收到**来自**HEAD**请求的**响应**,其中将会包含一个**Content-Length但没有任何内容**。因此,代理**不会将此响应发送**给受害者,而是会**等待一些内容**,实际上这些内容将会是**黄色请求的响应**(同样是攻击者注入的):
![](<../.gitbook/assets/image (627) (1).png>)
### 内容混淆
根据前面的例子,我们知道可以**控制受害者将要接收的响应的请求体**,而**HEAD**响应通常在其头部包含**Content-Type和Content-Length**。因此你可以发送如下请求来在受害者中引发XSS而页面本身并不容易受到XSS攻击
![](<../.gitbook/assets/image (654) (1) (1) (1) (1).png>)
### 缓存污染
利用前面提到的响应解同步内容混淆攻击,**如果缓存存储了受害者发出的请求的响应并且这个响应是一个注入的响应引发了XSS那么缓存就被污染了**。
恶意请求包含XSS有效载荷
![](<../.gitbook/assets/image (644) (1).png>)
向受害者发送的恶意响应,其中包含指示缓存存储响应的头部:
![](<../.gitbook/assets/image (629) (1).png>)
{% hint style="warning" %}
请注意,在这种情况下,如果**"受害者"是攻击者**,他现在可以对**任意URL进行缓存污染**,因为他可以**控制将要被缓存的URL**,并使用恶意响应。
{% endhint %}
### Web缓存欺骗
这种攻击与前一种类似,但是**攻击者不是在缓存中注入有效载荷,而是将受害者的信息缓存在缓存中**
![](<../.gitbook/assets/image (643) (1) (1).png>)
### 响应分割
这种攻击的目标是再次利用**响应解同步**,以便**使代理发送一个100%由攻击者生成的响应**。
为了实现这一点攻击者需要找到Web应用程序的一个端点该端点**在响应中反映一些值**,并且**知道HEAD响应的内容长度**。
他将发送一个如下的**利用**
![](<../.gitbook/assets/image (649) (1) (1) (1).png>)
在第一个请求被解析并发送回攻击者之后,**受害者的请求被添加到队列中**
![](<../.gitbook/assets/image (661) (1) (1) (1).png>)
受害者将会收到作为响应的**HEAD响应 + 第二个请求响应的内容(包含部分反映的数据)**
![](<../.gitbook/assets/image (633) (1).png>)
然而,请注意**反映的数据的大小与HEAD响应的Content-Length相符**,这**在响应队列中生成了一个有效的HTTP响应**。
因此,**第二个受害者的下一个请求**将会**接收到完全由攻击者构造的响应**。由于响应完全由攻击者构造,他还可以**使代理缓存响应**。
## 参考资料
* 不要忘记观看这个视频,非常好地解释了所有这些技术:[https://www.youtube.com/watch?v=suxDcYViwao\&t=1343s](https://www.youtube.com/watch?v=suxDcYViwao\&t=1343s)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 你在一家**网络安全公司**工作吗想要在HackTricks中**为你的公司做广告**吗?或者你想要**获取PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[NFT](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram群组**](https://t.me/peass),或者**关注**我在**Twitter**上的动态[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
</details>