ctrl-sid2099/auth-bypass-bruteforce-logic-flaw
GitHub: ctrl-sid2099/auth-bypass-bruteforce-logic-flaw
通过在暴力破解过程中交替注入有效登录请求来重置失败计数器,从而绕过基于尝试次数限制的身份验证防护机制。
Stars: 0 | Forks: 0
# 🔐 通过逻辑缺陷绕过身份验证 – 工具辅助漏洞利用 (PortSwigger 实验室)
## 📌 概述
本项目演示了暴力破解防护中的一个逻辑缺陷,即在成功登录后登录尝试计数器会重置。
目标是利用此行为暴力破解受害者账户,同时通过定期登录有效账户 来绕过锁定机制。
## 🧠 理解漏洞
应用程序实现了一种保护机制:
- 在 2 次失败的登录尝试后,后续的尝试将被阻止。
- 但是,成功的登录会重置尝试计数器。
👉 这就产生了一个缺陷:
如果我们每 2 次失败尝试后插入一次有效登录,我们就可以完全绕过锁定机制。
## ⚙️ 逐步漏洞利用
### 1️⃣ 分析登录机制
- 首先发送使用有效用户名和随机密码的登录尝试。
- 观察行为:
- 2 次失败尝试后 → 后续尝试被阻止。
- 成功登录后,计数器重置。
✅ 结论:
我们必须确保每第三个请求是一次有效登录,以保持攻击持续进行。
## 2️⃣ 自动化字典注入
为了自动化此模式,我构建了一个自定义 Python 工具:
📄 查看此[工具](https://github.com/ctrl-sid2099/auth-bypass-bruteforce-logic-flaw/blob/main/wordlist-injector)。
### 🔧 它的功能:
- 接收一个字典文件
- 每隔 N 行注入一个特定密码
- 包含:
- 文件验证
- 输入验证
- 自定义输出处理
### 💡 使用逻辑:
- 每 2 次密码尝试后 → 插入一个已知的有效密码
- 示例:
pass1
pass2
VALID_PASS
pass3
pass4
VALID_PASS
这确保了登录尝试计数器不断被重置。
## 3️⃣ 构建攻击模式
我们需要交替使用:
- 目标用户 → carlos
- 有效用户 → wiener
模式:
```
carlos → attempt 1
carlos → attempt 2
wiener → valid login (reset)
carlos → attempt 3
carlos → attempt 4
wiener → valid login (reset)
```
实现步骤:
- 使用此脚本来准备密码注入
## 4️⃣ 配置 Burp Suite Intruder
### 🎯 关键设置:
- Positions 选项卡:
- 为以下项设置 payload 位置:
- Username
- Password
- Payloads:
- 使用注入了有效密码的生成字典
## ⚠️ Resource Pool 配置(重要)
设置 Resource Pool = 每次发送 1 个请求
### ❓ 为什么?
如果并行发送多个请求:
- 服务器可能会乱序处理它们
- “重置”请求(有效登录)可能不会恰好在 2 次失败后发生
- 这会破坏绕过逻辑
👉 通过强制顺序请求,我们确保:
```
fail → fail → success → fail → fail → success
```
✅ 这保证了计数器的正确重置。
## 5️⃣ 识别有效凭证
在 Burp Intruder 中:
- 过滤结果:
- Username = wiener(以定位重置点)
- 然后:
- 按 HTTP 状态代码对响应进行排序
🔍 要寻找的内容:
- 302 Found → 表示成功登录
这有助于识别:
- 有效的登录响应
- 最终找到 carlos 的正确密码
## 6️⃣ 账户接管
- 使用发现的凭证
- 通过 My Account 面板登录
✅ 成功的身份验证确认了漏洞利用成功
## 🧩 核心要点
- 暴力破解防护可能会因为逻辑缺陷而失效,而不仅仅是由于弱阈值
- 如果重置机制未与 session/用户上下文正确绑定,就可能被滥用
- 顺序请求控制在漏洞利用中至关重要
## 📌 概述
本项目演示了暴力破解防护中的一个逻辑缺陷,即在成功登录后登录尝试计数器会重置。
目标是利用此行为暴力破解受害者账户,同时通过定期登录有效账户 来绕过锁定机制。
## 🧠 理解漏洞
应用程序实现了一种保护机制:
- 在 2 次失败的登录尝试后,后续的尝试将被阻止。
- 但是,成功的登录会重置尝试计数器。
👉 这就产生了一个缺陷:
如果我们每 2 次失败尝试后插入一次有效登录,我们就可以完全绕过锁定机制。
## ⚙️ 逐步漏洞利用
### 1️⃣ 分析登录机制
- 首先发送使用有效用户名和随机密码的登录尝试。
- 观察行为:
- 2 次失败尝试后 → 后续尝试被阻止。
- 成功登录后,计数器重置。
✅ 结论:
我们必须确保每第三个请求是一次有效登录,以保持攻击持续进行。
## 2️⃣ 自动化字典注入
为了自动化此模式,我构建了一个自定义 Python 工具:
📄 查看此[工具](https://github.com/ctrl-sid2099/auth-bypass-bruteforce-logic-flaw/blob/main/wordlist-injector)。
### 🔧 它的功能:
- 接收一个字典文件
- 每隔 N 行注入一个特定密码
- 包含:
- 文件验证
- 输入验证
- 自定义输出处理
### 💡 使用逻辑:
- 每 2 次密码尝试后 → 插入一个已知的有效密码
- 示例:
pass1
pass2
VALID_PASS
pass3
pass4
VALID_PASS
这确保了登录尝试计数器不断被重置。
## 3️⃣ 构建攻击模式
我们需要交替使用:
- 目标用户 → carlos
- 有效用户 → wiener
模式:
```
carlos → attempt 1
carlos → attempt 2
wiener → valid login (reset)
carlos → attempt 3
carlos → attempt 4
wiener → valid login (reset)
```
实现步骤:
- 使用此脚本来准备密码注入
## 4️⃣ 配置 Burp Suite Intruder
### 🎯 关键设置:
- Positions 选项卡:
- 为以下项设置 payload 位置:
- Username
- Password
- Payloads:
- 使用注入了有效密码的生成字典
## ⚠️ Resource Pool 配置(重要)
设置 Resource Pool = 每次发送 1 个请求
### ❓ 为什么?
如果并行发送多个请求:
- 服务器可能会乱序处理它们
- “重置”请求(有效登录)可能不会恰好在 2 次失败后发生
- 这会破坏绕过逻辑
👉 通过强制顺序请求,我们确保:
```
fail → fail → success → fail → fail → success
```
✅ 这保证了计数器的正确重置。
## 5️⃣ 识别有效凭证
在 Burp Intruder 中:
- 过滤结果:
- Username = wiener(以定位重置点)
- 然后:
- 按 HTTP 状态代码对响应进行排序
🔍 要寻找的内容:
- 302 Found → 表示成功登录
这有助于识别:
- 有效的登录响应
- 最终找到 carlos 的正确密码
## 6️⃣ 账户接管
- 使用发现的凭证
- 通过 My Account 面板登录
✅ 成功的身份验证确认了漏洞利用成功
## 🧩 核心要点
- 暴力破解防护可能会因为逻辑缺陷而失效,而不仅仅是由于弱阈值
- 如果重置机制未与 session/用户上下文正确绑定,就可能被滥用
- 顺序请求控制在漏洞利用中至关重要标签:PoC, PortSwigger, Python自动化, Web安全, 字典注入, 安全测试, 并发限制绕过, 攻击性安全, 暴力破解, 登录安全, 网络安全, 蓝队分析, 身份验证绕过, 逆向工具, 逻辑漏洞, 隐私保护