Παράκαμψη Rate Limit

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Τεχνικές παράκαμψης Rate limit

Εξερεύνηση παρόμοιων Endpoints

Πρέπει να γίνουν προσπάθειες για την εκτέλεση brute force attacks σε παραλλαγές του στοχευμένου endpoint, όπως /api/v3/sign-up, συμπεριλαμβανομένων εναλλακτικών όπως /Sing-up, /SignUp, /singup, /api/v1/sign-up, /api/sign-up κ.λπ.

Ενσωμάτωση κενών χαρακτήρων σε Code ή Parameters

Η εισαγωγή κενών bytes όπως %00, %0d%0a, %0d, %0a, %09, %0C, %20 σε code ή parameters μπορεί να είναι χρήσιμη στρατηγική. Για παράδειγμα, η ρύθμιση ενός parameter σε code=1234%0a επιτρέπει τη διεύρυνση των προσπαθειών μέσω παραλλαγών στην είσοδο, όπως η προσθήκη newline χαρακτήρων σε ένα email για να παρακαμφθούν οι περιορισμοί προσπαθειών.

Παραποίηση προέλευσης IP μέσω Headers

Η τροποποίηση των headers για να αλλάξει η αντιληπτή προέλευση IP μπορεί να βοηθήσει στην αποφυγή IP-based rate limiting. Headers όπως X-Originating-IP, X-Forwarded-For, X-Remote-IP, X-Remote-Addr, X-Client-IP, X-Host, X-Forwared-Host, καθώς και η χρήση πολλαπλών εμφανίσεων του X-Forwarded-For, μπορούν να προσαρμοστούν για να προσομοιώσουν αιτήσεις από διαφορετικά IPs.

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

Αλλαγή άλλων κεφαλίδων

Συνιστάται η τροποποίηση άλλων request headers όπως το user-agent και τα cookies, καθώς αυτά μπορούν επίσης να χρησιμοποιηθούν για τον προσδιορισμό και την παρακολούθηση των προτύπων αιτήσεων. Η αλλαγή αυτών των κεφαλίδων μπορεί να αποτρέψει την αναγνώριση και την παρακολούθηση των δραστηριοτήτων του αιτούντος.

Εκμετάλλευση της συμπεριφοράς των API gateways

Ορισμένα API gateways έχουν ρυθμιστεί ώστε να εφαρμόζουν rate limiting με βάση τον συνδυασμό του endpoint και των parameters. Με το να μεταβάλλετε τις τιμές των παραμέτρων ή να προσθέτετε μη-σημαντικές παραμέτρους στο request, είναι δυνατό να παρακαμφθεί η λογική rate-limiting του gateway, κάνοντας κάθε αίτηση να φαίνεται μοναδική. Για παράδειγμα /resetpwd?someparam=1.

Σύνδεση στον λογαριασμό σας πριν από κάθε προσπάθεια

Η σύνδεση σε έναν λογαριασμό πριν από κάθε προσπάθεια, ή πριν από κάθε σετ προσπαθειών, μπορεί να επαναφέρει τον μετρητή rate limit. Αυτό είναι ιδιαίτερα χρήσιμο όταν δοκιμάζετε λειτουργίες login. Η χρήση ενός Pitchfork attack με εργαλεία όπως το Burp Suite, για περιστροφή credentials κάθε λίγες προσπάθειες και με σήμανση του follow redirects, μπορεί να επανεκκινήσει αποτελεσματικά τους μετρητές rate limit.

Χρήση δικτύων Proxy

Η ανάπτυξη δικτύου proxies για κατανομή των requests σε πολλαπλές IP διευθύνσεις μπορεί να παρακάμψει αποτελεσματικά τα IP-based rate limits. Δρομολογώντας την κίνηση μέσω διάφορων proxies, κάθε αίτηση φαίνεται να προέρχεται από διαφορετική πηγή, μειώνοντας την αποτελεσματικότητα του rate limit.

Διάσπαση της επίθεσης σε διαφορετικούς λογαριασμούς ή sessions

Εάν το σύστημα-στόχος εφαρμόζει rate limits ανά λογαριασμό ή ανά session, η κατανομή της επίθεσης ή του τεστ σε πολλαπλούς λογαριασμούς ή sessions μπορεί να βοηθήσει στην αποφυγή ανίχνευσης. Αυτή η προσέγγιση απαιτεί διαχείριση πολλαπλών ταυτοτήτων ή session tokens, αλλά μπορεί να κατανεμήσει αποτελεσματικά το φορτίο ώστε να παραμείνετε εντός των επιτρεπτών ορίων.

Συνεχίστε τις προσπάθειες

Σημειώστε ότι ακόμα και αν υπάρχει rate limit, πρέπει να δοκιμάσετε αν η απάντηση διαφέρει όταν αποσταλεί το σωστό OTP. Στο αυτό το άρθρο, ο bug hunter ανακάλυψε ότι ακόμα κι αν ενεργοποιηθεί rate limit μετά από 20 αποτυχημένες προσπάθειες με απάντηση 401, αν στάλθηκε η έγκυρη προσπάθεια τότε λήφθηκε απάντηση 200.


Κατάχρηση HTTP/2 multiplexing & request pipelining (2023-2025)

Οι σύγχρονες υλοποιήσεις rate–limiter συχνά μετρούν τις TCP connections (ή ακόμη και μεμονωμένα HTTP/1.1 requests) αντί του αριθμού των HTTP/2 streams που περιέχει μία σύνδεση. Όταν η ίδια TLS σύνδεση επαναχρησιμοποιείται, ένας attacker μπορεί να ανοίξει εκατοντάδες παράλληλα streams, το καθένα μεταφέροντας ένα ξεχωριστό request, ενώ το gateway αφαιρεί μόνο μία αίτηση από το quota.

# 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

If the limiter protects only /verify but not /api/v2/verify, you can also combine path confusion with HTTP/2 multiplexing for extremely high-speed OTP or credential brute-forcing.

🐾 Tip: PortSwigger’s Turbo Intruder supports HTTP/2 and lets you fine-tune maxConcurrentConnections and requestsPerConnection to automate this attack.

GraphQL ψευδώνυμα & ομαδοποιημένες λειτουργίες

Το GraphQL επιτρέπει στον client να στείλει πολλές λογικά ανεξάρτητες queries ή mutations σε ένα ενιαίο request προθέτοντάς τες με ψευδώνυμα. Επειδή ο server εκτελεί κάθε ψευδώνυμο αλλά ο rate-limiter συχνά μετράει μόνο ένα request, αυτό είναι μια αξιόπιστη παράκαμψη για throttling του login ή του password-reset.

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 για “GraphQL batching & aliases” το 2023 και έχει οδηγήσει σε πολλές πρόσφατες bug-bounty payouts.

Abuse of batch or bulk REST endpoints

Ορισμένα APIs εκθέτουν βοηθητικά endpoints όπως το /v2/batch ή δέχονται ένα array of objects στο σώμα του αιτήματος. Αν ο limiter τοποθετηθεί μπροστά μόνο στα legacy endpoints, η συμπερίληψη πολλαπλών λειτουργιών μέσα σε ένα ενιαίο bulk request μπορεί να παρακάμψει εντελώς την προστασία.

[
{"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 επαναφερθεί, και στη συνέχεια στείλτε αμέσως ένα ακόμη πλήρες burst.

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

Αυτή η απλή βελτιστοποίηση μπορεί να αυξήσει το throughput σας πάνω από δύο φορές χωρίς να επηρεάσει καμία άλλη bypass technique.

Αναβάθμιση σε WebSockets / gRPC streaming μετά το handshake

Πολλοί edge rate-limiters ελέγχουν μόνο το initial HTTP request. Μόλις η σύνδεση αναβαθμιστεί σε WebSocket (HTTP 101) ή σε gRPC bidirectional streaming, τα επόμενα μηνύματα συχνά παρακάμπτουν τους request-per-second counters επειδή δεν αποτελούν πλέον ξεχωριστά HTTP requests. Η τεκμηρίωση της Cloudflare σημειώνει ότι μόνο το initial upgrade request υπόκειται σε WAF/rate-limiting κανόνες· τα frames που αποστέλλονται μετά είναι αδιαφανή.

Practical 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

Αν το login/OTP endpoint εκθέτει και HTTP και WebSocket/gRPC παραλλαγές, στήστε πρώτα το αναβαθμισμένο κανάλι και στη συνέχεια κάντε spray τους κωδικούς μέσα σε αυτή τη μοναδική σύνδεση για να αποφύγετε τα per-request throttles.

Εκμετάλλευση CDN PoP‑sharded counters

Μερικά CDN shard-άρουν τους rate-limit counters ανά data center/PoP αντί για global. Η Cloudflare δηλώνει ρητά ότι οι counters δεν μοιράζονται μεταξύ data centers. Δρομολογώντας requests μέσω egress nodes σε πολλές περιοχές (residential proxy pools, anycast VPNs, ή cloud VMs pinned σε διαφορετικές ηπείρους), πολλαπλασιάζετε το allowed throughput: κάθε PoP διατηρεί ένα independent bucket για το ίδιο 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 που υποστηρίζει header randomisation, chunked word-lists και round-robin proxy rotation.
  • https://github.com/ustayready/fireprox: Δημιουργεί αυτόματα disposable AWS API Gateway endpoints ώστε κάθε αίτημα να προέρχεται από διαφορετική διεύθυνση IP — ιδανικό για την παράκαμψη του IP-based throttling.
  • Burp Suite – IPRotate + extension: Χρησιμοποιεί ένα pool από SOCKS/HTTP proxies (ή AWS API Gateway) για να περιστρέψει την source IP διαφανώς κατά τις επιθέσεις Intruder και Turbo Intruder.
  • Turbo Intruder (BApp): Υψηλής απόδοσης engine επιθέσεων που υποστηρίζει HTTP/2 multiplexing· ρυθμίστε το requestsPerConnection σε 100-1000 για να συμπτύξετε εκατοντάδες requests σε μία σύνδεση.

Αναφορές

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks