mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
159 lines
9.4 KiB
Markdown
159 lines
9.4 KiB
Markdown
# HTTP Response Smuggling / Desync
|
||
|
||
{% hint style="success" %}
|
||
学习和实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
学习和实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>支持 HackTricks</summary>
|
||
|
||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||
|
||
</details>
|
||
{% endhint %}
|
||
|
||
**本帖的技术来自视频:** [**https://www.youtube.com/watch?v=suxDcYViwao\&t=1343s**](https://www.youtube.com/watch?v=suxDcYViwao\&t=1343s)
|
||
|
||
## HTTP 请求队列去同步
|
||
|
||
首先,这种技术**利用了 HTTP 请求走私漏洞**,所以你需要知道这是什么:
|
||
|
||
这种技术与常见的 HTTP 请求走私的**主要区别**在于,**不是通过添加前缀来攻击受害者的请求**,而是**泄露或修改受害者收到的响应**。这是通过发送**两个完整的请求来去同步代理的响应队列**,而不是发送一个半请求来利用 HTTP 请求走私。
|
||
|
||
这是因为我们将能够**去同步响应队列**,使得**受害者的合法请求的响应被发送给攻击者**,或者通过**在响应中注入攻击者控制的内容**。
|
||
|
||
### HTTP 管道去同步
|
||
|
||
HTTP/1.1 允许请求**不同的资源而不需要等待之前的请求**。因此,如果中间有一个**代理**,那么代理的任务是**保持发送到后端的请求和来自后端的响应的同步匹配**。
|
||
|
||
然而,去同步响应队列存在一个问题。如果攻击者发送一个 HTTP 响应走私攻击,并且对**初始请求和走私请求的响应立即返回**,那么走私响应不会被插入到受害者响应的队列中,而是**作为错误被丢弃**。
|
||
|
||
![](<../.gitbook/assets/image (633).png>)
|
||
|
||
因此,需要**走私请求在后端服务器中处理的时间更长**。因此,当走私请求被处理时,与攻击者的通信将结束。
|
||
|
||
如果在这种特定情况下,**受害者发送了一个请求**,而**走私请求在合法请求之前被响应**,那么**走私响应将被发送给受害者**。因此,攻击者将**控制受害者“执行”的请求**。
|
||
|
||
此外,如果**攻击者随后执行一个请求**,而**对受害者请求的合法响应在攻击者请求之前被回答**,那么**对受害者的响应将被发送给攻击者**,**窃取**对受害者的响应(例如,可能包含**Set-Cookie**头)。
|
||
|
||
![](<../.gitbook/assets/image (1020).png>)
|
||
|
||
![](<../.gitbook/assets/image (719).png>)
|
||
|
||
### 多重嵌套注入
|
||
|
||
与常见的**HTTP 请求走私**相比,另一个**有趣的区别**是,在常见的走私攻击中,**目标**是**修改受害者请求的开头**,以便执行意外的操作。在**HTTP 响应走私攻击**中,由于你**发送完整的请求**,你可以**在一个有效载荷中注入数十个响应**,这将**去同步数十个用户**,这些用户将**接收**被**注入的**响应。
|
||
|
||
除了能够**更容易地在合法用户之间分发数十个漏洞**,这也可以用来导致服务器的**拒绝服务**。
|
||
|
||
### 漏洞组织
|
||
|
||
如前所述,为了利用这种技术,需要**第一个走私消息**在服务器中**处理的时间很长**。
|
||
|
||
如果我们只是想**尝试窃取受害者的响应**,那么这个**耗时的请求就足够了**。但如果你想执行更复杂的漏洞,这将是漏洞的常见结构。
|
||
|
||
首先是**初始**请求,利用**HTTP** **请求** **走私**,然后是**耗时的请求**,最后是**一个或多个有效载荷请求**,其响应将被发送给受害者。
|
||
|
||
## 利用 HTTP 响应队列去同步
|
||
|
||
### 捕获其他用户的请求 <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a>
|
||
|
||
与已知的 HTTP 请求走私有效载荷一样,你可以**窃取受害者的请求**,有一个重要的区别:在这种情况下,你只需要**发送的内容在响应中被反射**,**不需要持久存储**。
|
||
|
||
首先,攻击者发送一个有效载荷,包含一个**带有反射参数的最终 POST 请求**,并且有一个大的 Content-Length。
|
||
|
||
![](<../.gitbook/assets/image (1053).png>)
|
||
|
||
然后,一旦**初始请求**(蓝色)被**处理**,而**耗时**的请求(黄色)正在被处理时,**来自受害者的下一个请求**将被**附加在反射参数之后**:
|
||
|
||
![](<../.gitbook/assets/image (794).png>)
|
||
|
||
然后,**受害者**将**收到**对**耗时**请求的**响应**,如果在此期间**攻击者****发送**了**另一个**请求,**反射内容请求的响应将被发送给他**。
|
||
|
||
## 响应去同步
|
||
|
||
到目前为止,我们已经学习了如何利用 HTTP 请求走私攻击来**控制**客户端将要**接收的响应**,以及如何**窃取原本属于受害者的响应**。
|
||
|
||
但仍然可以**进一步去同步**响应。
|
||
|
||
有趣的请求如**HEAD**请求被指定为不应在响应体内**包含任何内容**,并且应(必须)**包含请求的 Content-Length**,就像**GET 请求**一样。
|
||
|
||
因此,如果攻击者**注入**一个**HEAD**请求,如下图所示:
|
||
|
||
![](<../.gitbook/assets/image (1107).png>)
|
||
|
||
然后,一旦**蓝色请求**被响应给攻击者,下一位受害者的请求将被引入队列:
|
||
|
||
![](<../.gitbook/assets/image (999).png>)
|
||
|
||
然后,**受害者**将**收到**来自**HEAD**请求的**响应**,该响应**将包含一个 Content-Length,但没有任何内容**。因此,代理**不会将此响应发送给受害者,而是**等待**一些**内容**,实际上将是**对黄色请求的响应**(也由攻击者注入):
|
||
|
||
![](<../.gitbook/assets/image (735).png>)
|
||
|
||
### 内容混淆
|
||
|
||
根据前面的例子,知道你可以**控制请求的主体**,而该请求的响应将被受害者接收,并且**HEAD** **响应**通常在其头部包含**Content-Type 和 Content-Length**,你可以**发送如下请求**以**在受害者中引发 XSS**,而页面并不容易受到 XSS 攻击:
|
||
|
||
![](<../.gitbook/assets/image (688).png>)
|
||
|
||
### 缓存中毒
|
||
|
||
利用之前提到的响应去同步内容混淆攻击,**如果缓存存储了受害者执行的请求的响应,并且该响应是一个导致 XSS 的注入响应,那么缓存就被毒化了**。
|
||
|
||
包含 XSS 有效载荷的恶意请求:
|
||
|
||
![](<../.gitbook/assets/image (614).png>)
|
||
|
||
包含指示缓存存储响应的头的恶意响应:
|
||
|
||
![](<../.gitbook/assets/image (566).png>)
|
||
|
||
{% hint style="warning" %}
|
||
请注意,在这种情况下,如果**“受害者”是攻击者**,他现在可以在任意 URL 上执行**缓存中毒**,因为他可以**控制将被缓存的 URL**与恶意响应。
|
||
{% endhint %}
|
||
|
||
### Web 缓存欺骗
|
||
|
||
此攻击类似于前一个,但**攻击者将受害者信息缓存到缓存中,而不是在缓存中注入有效载荷:**
|
||
|
||
![](<../.gitbook/assets/image (991).png>)
|
||
|
||
### 响应分割
|
||
|
||
此攻击的**目标**是再次利用**响应** **去同步**,以便**使代理发送 100% 由攻击者生成的响应**。
|
||
|
||
为了实现这一点,攻击者需要找到一个**反射某些值到响应中的** Web 应用程序端点,并**知道 HEAD 响应的内容长度**。
|
||
|
||
他将发送一个**漏洞**,如下所示:
|
||
|
||
![](<../.gitbook/assets/image (911).png>)
|
||
|
||
在第一个请求被解决并发送回攻击者后,**受害者的请求将被添加到队列中**:
|
||
|
||
![](<../.gitbook/assets/image (737).png>)
|
||
|
||
受害者将收到的响应是**HEAD 响应 + 第二个请求响应的内容(包含部分反射数据):**
|
||
|
||
![](<../.gitbook/assets/image (356).png>)
|
||
|
||
然而,请注意**反射数据的大小与 HEAD** 响应的 **Content-Length** 相符,这**在响应队列中生成了有效的 HTTP 响应**。
|
||
|
||
因此,**第二位受害者的下一个请求**将**接收**作为**响应完全由攻击者构造的内容**。由于响应完全由攻击者构造,他还可以**使代理缓存该响应**。
|
||
|
||
{% hint style="success" %}
|
||
学习和实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
学习和实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>支持 HackTricks</summary>
|
||
|
||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||
|
||
</details>
|
||
{% endhint %}
|