Translated ['pentesting-web/race-condition.md'] to cn

This commit is contained in:
Translator 2024-08-18 15:56:41 +00:00
parent 7a76013962
commit 9e66b34535

View file

@ -10,7 +10,7 @@
{% 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)
学习和实践 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>
@ -75,7 +75,7 @@ engine.queue(target.req, password, gate='race1')
如果网站不支持 HTTP2仅支持 HTTP1.1),请使用 `Engine.THREADED``Engine.BURP`,而不是 `Engine.BURP2`
{% endhint %}
* **Tubo Intruder - HTTP2 单包攻击(多个端点)**: 如果您需要向一个端点发送请求,然后向其他多个端点发送请求以触发 RCE您可以将 `race-single-packet-attack.py` 脚本更改为如下内容:
* **Tubo Intruder - HTTP2 单包攻击(多个端点)**如果您需要向一个端点发送请求,然后向其他多个端点发送请求以触发 RCE您可以将 `race-single-packet-attack.py` 脚本更改为如下内容:
```python
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
@ -109,12 +109,12 @@ engine.openGate(currentAttempt)
* 它也可以通过 Burp Suite 中新的“**并行发送组**”选项在 **Repeater** 中使用。
* 对于 **limit-overrun**,您可以在组中**添加相同的请求 50 次**。
* 对于 **connection warming**,您可以在 **组的开始**添加一些请求到 web 服务器的某个非静态部分。
* 对于处理 **一个请求和另一个请求之间**的过程 **延迟**,您可以在两个请求之间 **添加额外的请求**。
* 对于 **multi-endpoint** RC您可以开始发送 **请求**,该请求 **进入隐藏状态**,然后在其后 **发送 50 个请求**,这些请求 **利用隐藏状态**
* 对于 **delaying** 处理 **一个请求和另一个请求之间**的过程,您可以在两个请求之间**添加额外的请求**。
* 对于 **multi-endpoint** RC您可以开始发送**请求**,该请求**进入隐藏状态**,然后在其后**发送 50 个请求**,这些请求**利用隐藏状态**。
<figure><img src="../.gitbook/assets/image (58).png" alt=""><figcaption></figcaption></figure>
* **自动化 python 脚本**:该脚本的目标是在不断验证的同时更改用户的电子邮件,直到新电子邮件的验证令牌到达最后一个电子邮件(这是因为在代码中看到一个 RC可以修改电子邮件但验证被发送到旧电子邮件因为指示电子邮件的变量已经用第一个填充。\
* **自动化 python 脚本**:该脚本的目标是更改用户的电子邮件,同时不断验证,直到新电子邮件的验证令牌到达最后一个电子邮件(这是因为在代码中看到一个 RC可以修改电子邮件但验证被发送到旧电子邮件因为指示电子邮件的变量已经用第一个填充。\
当在收到的电子邮件中找到“objetivo”这个词时我们知道我们收到了更改电子邮件的验证令牌并结束攻击。
```python
# https://portswigger.net/web-security/race-conditions/lab-race-conditions-limit-overrun
@ -244,17 +244,17 @@ response = requests.get(url, verify=False)
在原始研究中解释了此攻击的限制为1,500字节。然而在[**这篇文章**](https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/)中解释了如何通过使用IP层分片将单个数据包拆分为多个IP数据包并以不同顺序发送它们从而扩展单包攻击的1,500字节限制到**TCP的65,535 B窗口限制**这使得在所有片段到达服务器之前防止重新组装数据包。这项技术使研究人员能够在大约166毫秒内发送10,000个请求。&#x20;
请注意,尽管此改进使得在需要数百/数千个数据包同时到达的RC攻击中更可靠但它也可能有一些软件限制。一些流行的HTTP服务器如Apache、Nginx和Go将`SETTINGS_MAX_CONCURRENT_STREAMS`设置为100、128和250。然而其他如NodeJS和nghttp2则没有限制。\
请注意,尽管此改进使得在需要数百/数千个数据包同时到达的RC攻击中更可靠但它也可能有一些软件限制。一些流行的HTTP服务器如Apache、Nginx和Go将`SETTINGS_MAX_CONCURRENT_STREAMS`设置为100、128和250。然而其他如NodeJS和nghttp2则没有限制。\
这基本上意味着Apache将只考虑来自单个TCP连接的100个HTTP连接限制了此RC攻击
您可以在仓库[https://github.com/Ry0taK/first-sequence-sync/tree/main](https://github.com/Ry0taK/first-sequence-sync/tree/main)中找到使用此技术的一些示例。
## 原始BF
在之前的研究之前,这里有一些用于尝试尽可能快地发送数据包以引发RC的有效载荷
在之前的研究之前,使用了一些有效载荷这些有效载荷只是试图尽可能快地发送数据包以引发RC
* **Repeater:** 查看上一节中的示例。
* **Intruder**: 将**请求**发送到**Intruder**,在**选项菜单**中将**线程数**设置为**30**,并选择有效载荷**空有效载荷**并生成**30**
* **Intruder**: 将**请求**发送到**Intruder**,在**选项菜单**中将**线程数**设置为**30**,并选择有效载荷**空有效载荷**并生成**30**。
* **Turbo Intruder**
```python
def queueRequests(target, wordlists):
@ -323,14 +323,14 @@ asyncio.run(main())
1. **识别潜在的隐藏子状态**
* 首先确定修改或与关键数据交互的端点,例如用户资料或密码重置过程。重点关注:
* **存储**:优先选择操作服务器端持久数据的端点,而不是处理客户端数据的端点。
* **操作**:寻找更可能创建可利用条件的操作,这些操作会改现有数据,而不是添加新数据。
* **操作**:寻找更可能创建可利用条件的操作,这些操作会改现有数据,而不是添加新数据。
* **键控**:成功的攻击通常涉及基于相同标识符的操作,例如用户名或重置令牌。
2. **进行初步探测**
* 使用竞争条件攻击测试识别的端点,观察是否有任何偏离预期结果的情况。意外的响应或应用程序行为的变化可能表明存在漏洞。
3. **证明漏洞**
* 将攻击缩小到利用漏洞所需的最少请求数量,通常仅为两个。此步骤可能需要多次尝试或自动化,因为涉及精确的时机。
### 时间敏感攻击
### Time Sensitive Attacks
请求的时机精确性可以揭示漏洞,特别是当使用可预测的方法(如时间戳)作为安全令牌时。例如,基于时间戳生成密码重置令牌可能允许同时请求相同的令牌。
@ -352,19 +352,19 @@ asyncio.run(main())
### Confirm other emails
这个想法是**同时验证一个电子邮件地址并将其更改为另一个**,以找出平台是否验证了更改的新地址。
这个想法是**同时验证一个电子邮件地址并将其更改为另一个**,以找出平台是否验证新更改的地址。
### Change email to 2 emails addresses Cookie based
根据[**这项研究**](https://portswigger.net/research/smashing-the-state-machine)Gitlab 通过这种方式容易受到接管,因为它可能**将一个电子邮件的**电子邮件验证令牌**发送到另一个电子邮件**。
根据[**这项研究**](https://portswigger.net/research/smashing-the-state-machine)Gitlab 通过这种方式容易受到接管,因为它可能**将一个电子邮件的** **电子邮件验证令牌发送到另一个电子邮件**
**查看这个** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) **来尝试这个。**
### Hidden Database states / Confirmation Bypass
如果使用**2个不同的写入**来**添加**数据库中的**信息**,则在**数据库中仅写入第一条数据**的短暂时间内。举例来说,当创建用户时,**用户名**和**密码**可能被**写入**,然后**令牌**用于确认新创建账户被写入。这意味着在短时间内,**确认账户的令牌是空的**。
如果使用**2个不同的写入**来**添加** **信息**到**数据库**中,则在**仅写入第一条数据**的短暂时间内,**token**可能为**null**。例如,在创建用户时,**用户名**和**密码**可能被**写入**,然后**确认新创建账户的令牌**被写入。这意味着在短时间内,**确认账户的令牌为null**。
因此,**注册一个账户并发送多个带有空令牌的请求**`token=`或`token[]=`或任何其他变体)以立即确认账户,可能允许确认一个你不控制电子邮件的**账户**。
因此,**注册一个账户并发送多个带有空令牌**`token=`或`token[]=`或任何其他变体)以立即确认账户,可能允许**确认一个你无法控制电子邮件的账户**。
**查看这个** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **来尝试这个。**
@ -402,6 +402,7 @@ session['enforce_mfa'] = True
* [https://hackerone.com/reports/55140](https://hackerone.com/reports/55140)
* [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
* [https://portswigger.net/web-security/race-conditions](https://portswigger.net/web-security/race-conditions)
* [https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/](https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/)
{% 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">\
@ -412,7 +413,7 @@ session['enforce_mfa'] = True
<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)** 上关注我们。**
* **加入** 💬 [**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>