Translated ['src/pentesting-web/rate-limit-bypass.md'] to zh

This commit is contained in:
Translator 2025-07-12 14:08:20 +00:00
parent 5f70ad7d74
commit f66c667fdb

View File

@ -34,26 +34,84 @@ X-Forwarded-For: 127.0.0.1
### 利用 API 网关行为
某些 API 网关配置为根据端点和参数的组合应用速率限制。通过改变参数值或向请求中添加不重要的参数,可以绕过网关的速率限制逻辑,使每个请求看起来都是唯一的。例如 `/resetpwd?someparam=1`
某些 API 网关配置为根据端点和参数的组合应用速率限制。通过改变参数值或向请求中添加不重要的参数,可以绕过网关的速率限制逻辑,使每个请求看起来都是唯一的。例如 `/resetpwd?someparam=1`
### 在每次尝试之前登录到您的帐户
在每次尝试或每组尝试之前登录到帐户,可能会重置速率限制计数器。这在测试登录功能时尤其有用。利用像 Burp Suite 这样的工具中的 Pitchfork 攻击,在每几次尝试中轮换凭据,并确保标记跟随重定向,可以有效地重启速率限制计数器。
在每次尝试或每组尝试之前登录到帐户,可能会重置速率限制计数器。这在测试登录功能时尤其有用。利用像 Burp Suite 这样的工具中的 Pitchfork 攻击,在每几次尝试中轮换凭据,并确保跟随重定向被标记,可以有效地重启速率限制计数器。
### 利用代理网络
部署一个代理网络,将请求分散到多个 IP 地址,可以有效绕过基于 IP 的速率限制。通过通过各种代理路由流量,每个请求看起来都来自不同的来源,从而稀释速率限制的有效性。
### 在不同帐户或会话之间分攻击
### 在不同帐户或会话之间分攻击
如果目标系统在每个帐户或每个会话的基础上应用速率限制,将攻击或测试分散到多个帐户或会话可以帮助避免检测。这种方法需要管理多个身份或会话令牌,但可以有效地分配负载以保持在允许的限制内。
如果目标系统在每个帐户或每个会话的基础上应用速率限制,将攻击或测试分散到多个帐户或会话可以帮助避免检测。这种方法需要管理多个身份或会话令牌,但可以有效地分散负载,以保持在允许的限制内。
### 继续尝试
请注意,即使存在速率限制,您也应该尝试查看在发送有效 OTP 时响应是否不同。在 [**这篇文章**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732) 中,漏洞猎人发现,即使在 20 次不成功尝试后触发速率限制并以 401 响应,如果发送了有效的 OTP则会收到 200 响应。
请注意,即使存在速率限制,您也应该尝试查看在发送有效 OTP 时响应是否不同。在 [**这篇文章**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732) 中,漏洞猎人发现,即使在 20 次不成功尝试后触发速率限制并以 401 响应,如果发送了有效的 OTP则会收到 200 响应。
### 工具
---
- [**https://github.com/Hashtag-AMIN/hashtag-fuzz**](https://github.com/Hashtag-AMIN/hashtag-fuzz): hashtag-fuzz 是一个模糊测试工具,旨在测试和绕过 WAF 和 CDN。通过利用随机用户代理和头部值、随机延迟、处理多线程、选择性分块字典和每个分块的轮询代理旋转等高级功能它为旨在识别 Web 应用程序漏洞的安全专业人员提供了强大的解决方案。
### 滥用 HTTP/2 多路复用和请求流水线 (2023-2025)
现代速率限制器实现通常计算 **TCP 连接**(甚至单个 HTTP/1.1 请求),而不是连接包含的 *HTTP/2 流的数量*。当重用相同的 TLS 连接时,攻击者可以打开数百个并行流,每个流携带一个单独的请求,而网关只从配额中扣除 *一个* 请求。
```bash
# Send 100 POST requests in a single HTTP/2 connection with curl
seq 1 100 | xargs -I@ -P0 curl -k --http2-prior-knowledge -X POST \
-H "Content-Type: application/json" \
-d '{"code":"@"}' https://target/api/v2/verify &>/dev/null
```
如果限流器仅保护 `/verify` 而不保护 `/api/v2/verify`,您还可以将 **路径混淆** 与 HTTP/2 多路复用结合使用,以实现 *极高* 速度的 OTP 或凭证暴力破解。
> 🐾 **提示:** PortSwigger 的 [Turbo Intruder](https://portswigger.net/research/turbo-intruder) 支持 HTTP/2并允许您微调 `maxConcurrentConnections``requestsPerConnection` 来自动化此攻击。
### GraphQL 别名和批处理操作
GraphQL 允许客户端通过使用 *别名* 在单个请求中发送 **多个逻辑上独立的查询或变更**。因为服务器执行每个别名,但限流器通常只计算 *一个* 请求,这对于登录或密码重置限流是一个可靠的绕过方法。
```graphql
mutation bruteForceOTP {
a: verify(code:"111111") { token }
b: verify(code:"222222") { token }
c: verify(code:"333333") { token }
# … add up to dozens of aliases …
}
```
查看响应:只有一个别名在正确的代码被触发时会返回 200 OK而其他的则受到速率限制。
该技术在 2023 年由 PortSwigger 对“GraphQL 批处理和别名”的研究中被推广,并且已导致许多最近的漏洞赏金支付。
### 滥用 *batch**bulk* REST 端点
一些 API 暴露辅助端点,例如 `/v2/batch` 或在请求体中接受 **对象数组**。如果限制器仅放置在 *legacy* 端点前面,将多个操作包装在单个批量请求中可能完全绕过保护。
```json
[
{"path": "/login", "method": "POST", "body": {"user":"bob","pass":"123"}},
{"path": "/login", "method": "POST", "body": {"user":"bob","pass":"456"}}
]
```
### 定时滑动窗口
经典的令牌桶或漏桶限流器 *重置* 在固定的时间边界上(例如,每分钟)。如果窗口已知(例如,通过错误消息如 `X-RateLimit-Reset: 27`),在桶重置 **之前** 发起最大允许的请求数量,然后立即发起另一个完整的突发请求。
```
|<-- 60 s window ->|<-- 60 s window ->|
###### ######
```
这个简单的优化可以在不触及任何其他绕过技术的情况下将你的吞吐量提高一倍以上。
---
## 工具
- [**https://github.com/Hashtag-AMIN/hashtag-fuzz**](https://github.com/Hashtag-AMIN/hashtag-fuzz): 支持头部随机化、分块词汇表和轮询代理旋转的模糊测试工具。
- [**https://github.com/ustayready/fireprox**](https://github.com/ustayready/fireprox): 自动创建一次性 AWS API Gateway 端点,使每个请求都来自不同的 IP 地址 非常适合击败基于 IP 的限流。
- **Burp Suite IPRotate + 扩展**: 在 *Intruder**Turbo Intruder* 攻击期间,使用 SOCKS/HTTP 代理(或 AWS API Gateway池透明地旋转源 IP。
- **Turbo Intruder (BApp)**: 高性能攻击引擎,支持 HTTP/2 多路复用;将 `requestsPerConnection` 调整为 100-1000以将数百个请求合并为一个连接。
## 参考文献
- PortSwigger Research “通过 GraphQL 别名绕过速率限制” (2023) <https://portswigger.net/research/graphql-authorization-bypass>
- PortSwigger Research “HTTP/2: 续集总是更糟” (章节 *基于连接的限流*) (2024) <https://portswigger.net/research/http2>
{{#include ../banners/hacktricks-training.md}}