Rate Limit Bypass
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
Rate limit bypass techniques
Exploring Similar Endpoints
应尝试对目标端点的不同变体进行 brute force attacks,例如 /api/v3/sign-up,包括诸如 /Sing-up、/SignUp、/singup、/api/v1/sign-up、/api/sign-up 等替代路径。
Incorporating Blank Characters in Code or Parameters
在 code 或参数中插入像 %00、%0d%0a、%0d、%0a、%09、%0C、%20 这样的空字节,可能是个有用的策略。例如,将参数调整为 code=1234%0a 可以通过输入变体来扩展尝试,例如在电子邮件地址中加入换行字符以绕过尝试次数限制。
Manipulating IP Origin via Headers
修改请求头以改变感知到的 IP 来源,可以帮助规避基于 IP 的 rate limiting。像 X-Originating-IP、X-Forwarded-For、X-Remote-IP、X-Remote-Addr、X-Client-IP、X-Host、X-Forwared-Host 这样的 headers(包括使用多个 X-Forwarded-For 实例)可以被调整为模拟来自不同 IP 的请求。
X-Originating-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Client-IP: 127.0.0.1
X-Host: 127.0.0.1
X-Forwared-Host: 127.0.0.1
# Double X-Forwarded-For header example
X-Forwarded-For:
X-Forwarded-For: 127.0.0.1
更改其他请求头
建议修改其他请求头,例如 user-agent 和 cookies,因为这些也可用于识别和追踪请求模式。更改这些请求头可以防止识别并跟踪请求者的活动。
利用 API Gateway 行为
一些 API Gateway 被配置为根据 endpoint 和参数的组合来应用速率限制。通过改变参数值或向请求添加无关紧要的参数,可以绕过网关的速率限制逻辑,使每个请求看起来都是唯一的。例如 /resetpwd?someparam=1。
在每次尝试前登录你的账户
在每次尝试或每组尝试前登录账户可能会重置速率限制计数器。这在测试登录功能时尤其有用。使用像 Burp Suite 这样的工具实施 Pitchfork attack,在每几次尝试后轮换凭据并确保启用 follow redirects,可以有效重置速率限制计数器。
使用代理网络
部署代理网络,将请求分散到多个 IP 地址,可以有效绕过基于 IP 的速率限制。通过通过各个代理路由流量,每个请求看起来都来自不同来源,从而削弱速率限制的效果。
将攻击分散到不同账户或会话
如果目标系统按每个账户或每个会话施加速率限制,将攻击或测试分散到多个账户或会话可以帮助规避检测。该方法需要管理多个身份或会话令牌,但可以有效分配负载以保持在允许的限制内。
继续尝试
请注意,即使存在速率限制,也应尝试在发送有效 OTP 时查看响应是否不同。在 这篇文章 中,该漏洞猎人发现,即使在 20 次失败尝试后触发了速率限制并以 401 响应,如果发送了有效的 OTP,会收到 200 响应。
滥用 HTTP/2 multiplexing & request pipelining (2023-2025)
现代的 rate–limiter 实现通常统计的是 TCP connections(甚至是单个 HTTP/1.1 请求),而不是连接包含的 number of HTTP/2 streams。当重用相同的 TLS 连接时,攻击者可以打开数百个并行流,每个流都携带独立请求,而网关只从配额中扣除 one 请求。
# 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
如果 limiter 只保护 /verify 而不保护 /api/v2/verify,你也可以将 path confusion 与 HTTP/2 多路复用结合,用于 极其 高速的 OTP 或 credential brute-forcing。
🐾 提示: PortSwigger’s Turbo Intruder 支持 HTTP/2,允许你微调
maxConcurrentConnections和requestsPerConnection来自动化此攻击。
GraphQL aliases & 批量操作
GraphQL 允许客户端通过在请求前添加 aliases,在单个请求中发送 多个在逻辑上独立的 queries 或 mutations。因为服务器会执行每个 alias,但 rate-limiter 常常只将它们计为一次请求,所以这是一种可靠的绕过 login 或 password-reset throttling 的方法。
mutation bruteForceOTP {
a: verify(code:"111111") { token }
b: verify(code:"222222") { token }
c: verify(code:"333333") { token }
# … add up to dozens of aliases …
}
查看响应:当命中正确的代码时,恰好只有一个 alias 会返回 200 OK,而其他的则被 rate-limited。
该技术由 PortSwigger 在 2023 年关于 “GraphQL batching & aliases” 的研究推广,并导致了许多近期的 bug-bounty 支付。
滥用 batch 或 bulk REST endpoints
一些 API 暴露了辅助端点,例如 /v2/batch,或者在请求体中接受 对象数组。如果限流器只放在 legacy 端点之前,将多个操作包装在单个 bulk 请求内可能会完全绕过该防护。
[
{"path": "/login", "method": "POST", "body": {"user":"bob","pass":"123"}},
{"path": "/login", "method": "POST", "body": {"user":"bob","pass":"456"}}
]
为 sliding-window 定时
一个经典的 token-bucket 或 leaky-bucket 限速器会在固定时间边界上 重置(例如,每分钟)。如果该窗口已知(例如通过错误信息如 X-RateLimit-Reset: 27),在 bucket 重置 之前 发送允许的最大数量的请求,然后立刻再发起另一轮完整的突发请求。
|<-- 60 s window ‑->|<-- 60 s window ‑->|
###### ######
这个简单的优化可以在不触及任何其他 bypass technique 的情况下将吞吐量提高一倍以上。
升级到 WebSockets / gRPC streaming after the handshake
许多 edge rate-limiters 只检查 initial HTTP request。一旦连接升级为 WebSocket (HTTP 101) 或 gRPC bidirectional streaming,后续消息通常会绕过 request-per-second counters,因为它们不再是独立的 HTTP requests。Cloudflare 的文档指出,只有初始升级请求受到 WAF/rate-limiting 规则的约束;之后发送的 frames 是不透明的。
实践工作流程:
# Flood 1,000 OTP guesses through a single WebSocket connection
seq -w 000000 000999 | websocat -n ws://target.tld/api/verify-ws
# gRPC streaming: send multiple Verify requests in one stream
grpcurl -d @ -plaintext target.tld:50051 service.VerifyOTP/Stream <<'EOF'
{ "code": "111111" }
{ "code": "222222" }
{ "code": "333333" }
EOF
如果 login/OTP endpoint 同时暴露 HTTP 和 WebSocket/gRPC 变体,先建立升级后的通道,然后在该单一连接内 spray codes,以规避每次请求的限速。
利用 CDN PoP 分片计数器
一些 CDN 会按数据中心/PoP 对限速计数器进行分片,而不是全局共享。Cloudflare 明确说明计数器不会在数据中心之间共享。通过将请求路由到多个区域的出口节点(residential proxy pools, anycast VPNs, or cloud VMs pinned to different continents),你可以成倍增加允许的吞吐量:每个 PoP 都为相同的 key 维护独立的桶。
Quick and dirty layout using open proxies (example with proxychains + a country‑rotating list):
for p in $(cat proxies.txt); do
HTTPS_PROXY=$p curl -s -X POST https://target/api/login -d @payload.json &
done
wait
确保 limiter key 不是 per-account;否则也要轮换 user IDs / session tokens。
工具
- https://github.com/Hashtag-AMIN/hashtag-fuzz: Fuzzing tool,支持头部随机化、分块字典和轮询代理轮换。
- https://github.com/ustayready/fireprox: 自动创建一次性 AWS API Gateway 端点,使每个请求都来自不同的 IP 地址 —— 非常适合绕过基于 IP 的限流。
- Burp Suite – IPRotate + extension: 使用一组 SOCKS/HTTP 代理(或 AWS API Gateway)在 Intruder 和 Turbo Intruder 攻击期间透明地轮换源 IP。
- Turbo Intruder (BApp): 高性能攻击引擎,支持 HTTP/2 多路复用;将
requestsPerConnection调整为 100-1000 可将数百个请求合并到单个连接中。
参考
- PortSwigger Research – “Bypassing rate limits with GraphQL aliasing” (2023)
- PortSwigger Research – “HTTP/2: The Sequel is Always Worse” (connection-based throttling) (2024)
- Cloudflare Docs – WebSockets & WAF applicability (2025)
- Cloudflare Docs – Request rate calculation and PoP-local counters (2025)
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。


