mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 21:53:54 +00:00
Translated ['pentesting-web/race-condition.md'] to cn
This commit is contained in:
parent
7a76013962
commit
9e66b34535
1 changed files with 16 additions and 15 deletions
|
@ -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个请求。 
|
||||
|
||||
请注意,尽管此改进使得在需要数百/数千个数据包同时到达的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>
|
||||
|
|
Loading…
Reference in a new issue