# HTTP响应欺骗/解同步
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥
* 你在一家**网络安全公司**工作吗?你想在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来分享你的黑客技巧。**
## 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响应队列解同步
### 捕获其他用户的请求
与已知的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)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* 你在一家**网络安全公司**工作吗?想要在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来分享你的黑客技巧。**