Rate Limit Bypass

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Rate limit bypass techniques

Exploring Similar Endpoints

Hedeflenen endpoint’in varyasyonlarına karşı brute force saldırıları gerçekleştirmeye çalışılmalıdır; örneğin /api/v3/sign-up gibi, ayrıca /Sing-up, /SignUp, /singup, /api/v1/sign-up, /api/sign-up gibi alternatifler denenmelidir.

Incorporating Blank Characters in Code or Parameters

Code veya parametrelere %00, %0d%0a, %0d, %0a, %09, %0C, %20 gibi boş byte’lar eklemek faydalı bir strateji olabilir. Örneğin, bir parametreyi code=1234%0a olarak ayarlamak, e-posta adresine newline karakterleri ekleyerek deneme sınırlamalarını aşmak gibi giriş varyasyonlarıyla denemeleri uzatmaya imkan tanır.

Manipulating IP Origin via Headers

Algılanan IP kaynağını değiştirmek için header’ları değiştirmek, IP tabanlı rate limiting’ten kaçmaya yardımcı olabilir. X-Originating-IP, X-Forwarded-For, X-Remote-IP, X-Remote-Addr, X-Client-IP, X-Host, X-Forwared-Host gibi header’lar ve birden fazla X-Forwarded-For örneği kullanmak, farklı IP’lerden gelen istekleri simüle etmek için ayarlanabilir.

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

Changing Other Headers

user-agent ve cookies gibi diğer istek header’larını değiştirmek önerilir; çünkü bunlar istek desenlerini tanımlamak ve izlemek için kullanılabilir. Bu header’ları değiştirmek, isteği yapan kişinin faaliyetlerinin tanınmasını ve izlenmesini engelleyebilir.

Leveraging API Gateway Behavior

Bazı API gateway’leri, rate limiting’i endpoint ve parametre kombinasyonuna göre uygulayacak şekilde yapılandırılmıştır. Parametre değerlerini değiştirerek veya isteğe anlamsız parametreler ekleyerek gateway’in rate-limiting mantığını aşmak ve her isteği benzersiz göstermek mümkündür. Örneğin /resetpwd?someparam=1.

Logging into Your Account Before Each Attempt

Her denemeden veya deneme setinden önce bir hesaba giriş yapmak, rate limit sayacını sıfırlayabilir. Bu, özellikle login fonksiyonlarını test ederken faydalıdır. Burp Suite gibi araçlarda Pitchfork attack kullanarak kimlik bilgilerini birkaç denemede bir döndürmek ve follow redirects işaretli olduğundan emin olmak, rate limit sayaçlarını etkili şekilde yeniden başlatabilir.

Utilizing Proxy Networks

İstekleri birden fazla IP adresine dağıtmak için bir proxy ağı kullanmak, IP tabanlı rate limitlerini etkili şekilde atlatabilir. Trafiği çeşitli proxy’ler üzerinden yönlendirerek, her istek farklı bir kaynaktan geliyormuş gibi görünür ve rate limitin etkinliği azalır.

Splitting the Attack Across Different Accounts or Sessions

Hedef sistem hesap başına veya oturum başına rate limit uyguluyorsa, saldırıyı veya testi birden fazla hesap ya da oturum arasında dağıtmak tespitten kaçınmaya yardımcı olabilir. Bu yaklaşım birden fazla kimlik veya oturum token’ı yönetmeyi gerektirir, ancak yükü izin verilen sınırlar içinde etkin şekilde dağıtabilir.

Keep Trying

Not: rate limit olsa bile geçerli OTP gönderildiğinde yanıtın farklı olup olmadığını denemelisiniz. this post içinde bug hunter, 20 başarısız denemeden sonra 401 döndürülerek rate limit tetiklense bile, geçerli gönderildiğinde 200 yanıtı alındığını keşfetti.


Abusing HTTP/2 multiplexing & request pipelining (2023-2025)

Modern rate–limiter implementasyonları sıklıkla TCP connections (or even individual HTTP/1.1 requests) sayar, bir bağlantının içerdiği number of HTTP/2 streams yerine. Aynı TLS bağlantısı yeniden kullanıldığında, bir saldırgan her biri ayrı bir istek taşıyan yüzlerce paralel stream açabilir; gateway ise kotadan yalnızca one request düşer.

# 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

Eğer limiter sadece /verify’ı koruyup /api/v2/verify’ı korumuyorsa, path confusion ile HTTP/2 multiplexing’i birleştirerek son derece yüksek hızlı OTP veya credential brute-forcing yapabilirsiniz.

🐾 İpucu: PortSwigger’ın Turbo Intruder HTTP/2’yi destekler ve bu saldırıyı otomatikleştirmek için maxConcurrentConnections ve requestsPerConnection değerlerini ince ayar yapmanıza olanak tanır.

GraphQL aliases & batched operations

GraphQL, istemcinin aliases ile önekleyerek tek bir istekte birden fazla mantıksal olarak bağımsız query veya mutation göndermesine izin verir. Sunucu her alias’ı çalıştırdığı halde rate-limiter genellikle sadece bir isteği saydığı için, bu login veya password-reset throttling için güvenilir bir bypass’tır.

mutation bruteForceOTP {
a: verify(code:"111111") { token }
b: verify(code:"222222") { token }
c: verify(code:"333333") { token }
# … add up to dozens of aliases …
}

Look at the response: doğru kod hedeflendiğinde tam olarak bir alias 200 OK döndürecek, diğerleri ise rate-limited olacak.

The technique was popularised by PortSwigger’s research on “GraphQL batching & aliases” in 2023 and has been responsible for many recent bug-bounty payouts.

batch veya bulk REST endpoint’larının kötüye kullanımı

Bazı API’ler /v2/batch gibi yardımcı endpoint’lar sağlar veya istek gövdesinde nesneler dizisi kabul eder. Eğer limiter sadece legacy endpoint’ların önüne yerleştirilmişse, birden fazla işlemi tek bir toplu istek içine sarmak korumayı tamamen atlatabilir.

[
{"path": "/login", "method": "POST", "body": {"user":"bob","pass":"123"}},
{"path": "/login", "method": "POST", "body": {"user":"bob","pass":"456"}}
]

sliding-window zamanlaması

Klasik token-bucket veya leaky-bucket limiter sabit bir zaman sınırında sıfırlanır (örneğin, her dakika). Eğer pencere biliniyorsa (ör. hata mesajları aracılığıyla X-RateLimit-Reset: 27), izin verilen maksimum sayıda isteği bucket hemen önce gönderin, sonra hemen başka bir tam patlama daha gönderin.

|<-- 60 s window ‑->|<-- 60 s window ‑->|
######                 ######

Bu basit optimizasyon, başka herhangi bir bypass technique’e dokunmadan throughput’unuzu iki kattan fazla artırabilir.

Handshake’ten sonra WebSockets / gRPC streaming’e yükseltme

Çoğu edge rate-limiter sadece ilk HTTP isteğini inceler. Bağlantı WebSocket (HTTP 101) veya gRPC bidirectional streaming’e yükseltildiğinde, sonraki mesajlar genellikle ayrı HTTP istekleri olmadıkları için request-per-second counters’ları atlar. Cloudflare’ın kendi dokümanları, yalnızca ilk yükseltme isteğinin WAF/rate-limiting kurallarına tabi olduğunu; sonrasında gönderilen frames’lerin opak olduğunu not eder.

Pratik iş akışı:

# 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

Eğer login/OTP endpoint’i hem HTTP hem de WebSocket/gRPC varyantlarını sunuyorsa, önce yükseltilmiş kanalı kurun ve ardından tek bir bağlantı içinde kodları seri olarak göndererek istek başına uygulanan sınırlamalardan kaçının.

CDN PoP‑sharded sayaçlarının istismarı

Bazı CDN’ler rate-limit sayaçlarını küresel olarak paylaşmak yerine veri merkezi/PoP bazında shard’lar. Cloudflare açıkça sayaçların veri merkezleri arasında paylaşılmadığını belirtir. Talepleri birçok bölgede bulunan egress node’lar (residential proxy pools, anycast VPNs veya farklı kıtalara sabitlenmiş cloud VMs) üzerinden yönlendirerek izin verilen throughput’u katlarsınız: her PoP aynı anahtar için bağımsız bir bucket tutar.

Açık proxy’ler kullanarak hızlı ve basit düzen (örnek proxychains + ülke rotasyonlu liste):

for p in $(cat proxies.txt); do
HTTPS_PROXY=$p curl -s -X POST https://target/api/login -d @payload.json &
done
wait

Make sure the limiter key is not per-account; otherwise also rotate user IDs / session tokens.


Araçlar

  • https://github.com/Hashtag-AMIN/hashtag-fuzz: Fuzzing aracı; header randomisation, chunked word-lists ve round-robin proxy rotation’ı destekler.
  • https://github.com/ustayready/fireprox: Her isteğin farklı bir IP adresinden kaynaklanmasını sağlamak için disposable AWS API Gateway endpoints oluşturur — IP-based throttling’i yenmek için ideal.
  • Burp Suite – IPRotate + extension: Kaynak IP’yi Intruder ve Turbo Intruder saldırıları sırasında şeffaf şekilde döndürmek için SOCKS/HTTP proxies (veya AWS API Gateway) havuzu kullanır.
  • Turbo Intruder (BApp): HTTP/2 multiplexing’i destekleyen yüksek performanslı saldırı motoru; yüzlerce isteği tek bir bağlantıya sıkıştırmak için requestsPerConnection değerini 100-1000 aralığına ayarlayın.

Referanslar

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin