Rate Limit Bypass

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Rate limit bypass techniques

Exploring Similar Endpoints

Treba pokušati izvesti brute force napade na varijacije ciljanog endpointa, kao što je /api/v3/sign-up, uključujući alternative kao /Sing-up, /SignUp, /singup, /api/v1/sign-up, /api/sign-up itd.

Incorporating Blank Characters in Code or Parameters

Umetanje blank bajtova kao što su %00, %0d%0a, %0d, %0a, %09, %0C, %20 u code ili parameters može biti korisna strategija. Na primer, podešavanje parametra na code=1234%0a omogućava produženje pokušaja kroz varijacije unosa, kao što je dodavanje newline karaktera u email adresu kako bi se zaobišla ograničenja pokušaja.

Manipulating IP Origin via Headers

Modifikovanje headera da bi se promenio percipirani IP origin može pomoći u izbegavanju IP-based rate limiting. Headeri kao što su X-Originating-IP, X-Forwarded-For, X-Remote-IP, X-Remote-Addr, X-Client-IP, X-Host, X-Forwared-Host, uključujući korišćenje više instanci X-Forwarded-For, mogu se menjati da bi se simulirali zahtevi sa različitih IP adresa.

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

Promena ostalih header-a

Preporučuje se izmena ostalih request header-a kao što su user-agent i cookies, jer se oni takođe mogu koristiti za identifikaciju i praćenje obrazaca zahteva. Promena ovih header-a može sprečiti prepoznavanje i praćenje aktivnosti zahtevaoca.

Iskorišćavanje ponašanja API gateway-a

Neki API gateway-i su podešeni da primenjuju rate limiting na osnovu kombinacije endpointa i parametara. Variranjem vrednosti parametara ili dodavanjem nesignificantnih parametara u zahtev moguće je zaobići logiku rate-limitinga gateway-a, tako da svaki zahtev izgleda jedinstveno. Na primer /resetpwd?someparam=1.

Prijavljivanje na nalog pre svakog pokušaja

Prijavljivanje na nalog pre svakog pokušaja, ili pre svake grupe pokušaja, može resetovati brojač rate limita. Ovo je posebno korisno pri testiranju login funkcionalnosti. Korišćenje Pitchfork attack-a u alatima poput Burp Suite, za rotiranje credentials na svakih nekoliko pokušaja i obezbeđivanje da je opcija follow redirects označena, može efikasno restartovati brojače rate limita.

Korišćenje proxy mreža

Raspoređivanje mreže proxy-ja da bi se zahtevi raspodelili preko više IP adresa može efikasno zaobići IP-based rate limits. Usmeravanjem saobraćaja kroz različite proxy-je, svaki zahtev izgleda kao da potiče iz drugog izvora, što razvodnjava efikasnost rate limita.

Raspodela napada preko različitih naloga ili sesija

Ako ciljni sistem primenjuje rate limite po nalogu ili po sesiji, raspodela napada ili testa preko više naloga ili sesija može pomoći da se izbegne detekcija. Ovaj pristup zahteva upravljanje više identiteta ili session token-a, ali može efikasno raspodeliti opterećenje da ostane unutar dozvoljenih limita.

Ne odustaj

Imajte na umu da čak i ako postoji rate limit, treba pokušati da proverite da li je odgovor drugačiji kada se pošalje validan OTP. U this post, bug hunter je otkrio da čak i ako se rate limit aktivira nakon 20 neuspešnih pokušaja vraćajući 401, ako je poslat validan dobio se 200 odgovor.


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

Moderne rate–limiter implementacije često broje TCP connections (ili čak pojedinačne HTTP/1.1 requests) umesto broja HTTP/2 streams koje konekcija sadrži. Kada se ista TLS konekcija ponovo koristi, attacker može otvoriti stotine paralelnih stream-ova, svaki sa posebnim zahtevom, dok gateway skida samo jedan zahtev iz kvote.

# 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

Ako limiter štiti samo /verify, ali ne i /api/v2/verify, možete kombinovati path confusion sa HTTP/2 multiplexingom za izuzetno brzo OTP ili credential brute-forcing.

🐾 Savet: PortSwigger’s Turbo Intruder podržava HTTP/2 i omogućava fino podešavanje maxConcurrentConnections i requestsPerConnection da biste automatizovali ovaj napad.

GraphQL aliases & batched operations

GraphQL omogućava klijentu da pošalje više logički nezavisnih queries ili mutations u jednom requestu tako što ih prefiksira aliases. Pošto server izvršava svaki alias, a rate-limiter često računa samo jedan request, ovo je pouzdan način za zaobilaženje throttlinga pri loginu ili password-resetu.

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

Pogledajte odgovor: tačno jedan alias će vratiti 200 OK kada se pogodi ispravan kod, dok su ostali rate-limited.

Tehnika je popularizovana PortSwigger-ovim istraživanjem o “GraphQL batching & aliases” iz 2023. i odgovorna je za mnoge nedavne bug-bounty payouts.

Zloupotreba batch ili bulk REST endpoints

Neki API-ji izlažu pomoćne endpoints kao što su /v2/batch ili prihvataju niz objekata u telu zahteva. Ako je limiter postavljen samo ispred nasleđenih endpoints, pakovanje više operacija unutar jednog bulk request može potpuno zaobići zaštitu.

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

Timing the sliding-window

Klasičan token-bucket ili leaky-bucket limiter se resetuje na fiksnoj vremenskoj granici (na primer, svake minute). Ako je window poznat (npr. putem poruka o grešci kao X-RateLimit-Reset: 27), pošaljite maksimalan dozvoljeni broj zahteva upravo pre nego što se bucket resetuje, zatim odmah pošaljite još jedan puni nalet.

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

This simple optimisation can more than double your throughput without touching any other bypass technique.

Upgrading to WebSockets / gRPC streaming after the handshake

Mnogi edge rate-limiters proveravaju samo initial HTTP request. Kada se konekcija nadogradi na WebSocket (HTTP 101) ili gRPC bidirectional streaming, naredne poruke često zaobilaze request-per-second counters zato što više nisu zasebni HTTP zahtevi. Cloudflare-ova dokumentacija navodi da je samo initial upgrade request podložan WAF/rate-limiting pravilima; frames poslati nakon toga su nečitljivi.

Praktičan workflow:

# 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

Ako login/OTP endpoint izlaže i HTTP i WebSocket/gRPC varijante, prvo uspostavite upgraded kanal, pa zatim spray kodove unutar te jedne konekcije da biste izbegli per-request throttles.

Iskorišćavanje CDN PoP‑sharded counters

Neki CDNs sharduju rate-limit counters po data center/PoP umesto globalno. Cloudflare eksplicitno navodi da se counters ne dele across data centers. Preusmeravanjem zahteva kroz egress nodes u više regiona (residential proxy pools, anycast VPNs, or cloud VMs pinned to different continents), množite dozvoljeni throughput: svaki PoP održava nezavisan bucket za isti 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

Pobrinite se da limiter key nije per-account; u suprotnom, rotirajte i user IDs / session tokens.


Alati

  • https://github.com/Hashtag-AMIN/hashtag-fuzz: Fuzzing alat koji podržava header randomisation, chunked word-lists i round-robin proxy rotation.
  • https://github.com/ustayready/fireprox: Automatski kreira disposable AWS API Gateway endpoints tako da svaki request potiče sa različite IP adrese – idealno za zaobilaženje IP-based throttling.
  • Burp Suite – IPRotate + extension: Koristi pool SOCKS/HTTP proxies (ili AWS API Gateway) za rotaciju source IP-a transparentno tokom Intruder i Turbo Intruder napada.
  • Turbo Intruder (BApp): High-performance attack engine koji podržava HTTP/2 multiplexing; podesite requestsPerConnection na 100-1000 da objedinite stotine requests u jednu konekciju.

Reference

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks