diff --git a/src/pentesting-web/rate-limit-bypass.md b/src/pentesting-web/rate-limit-bypass.md index 381e955e6..f7faa0c3e 100644 --- a/src/pentesting-web/rate-limit-bypass.md +++ b/src/pentesting-web/rate-limit-bypass.md @@ -46,14 +46,72 @@ Der Einsatz eines Netzwerks von Proxys zur Verteilung der Anfragen über mehrere ### Aufteilen des Angriffs über verschiedene Konten oder Sitzungen -Wenn das Zielsystem Ratenbegrenzungen auf Basis von Konto oder Sitzung anwendet, kann das Verteilen des Angriffs oder Tests über mehrere Konten oder Sitzungen helfen, eine Erkennung zu vermeiden. Dieser Ansatz erfordert die Verwaltung mehrerer Identitäten oder Sitzungstoken, kann jedoch effektiv die Last verteilen, um innerhalb der zulässigen Grenzen zu bleiben. +Wenn das Zielsystem Ratenbegrenzungen auf Basis von Konto oder Sitzung anwendet, kann das Verteilen des Angriffs oder Tests über mehrere Konten oder Sitzungen helfen, eine Erkennung zu vermeiden. Dieser Ansatz erfordert die Verwaltung mehrerer Identitäten oder Sitzungstoken, kann jedoch die Last effektiv verteilen, um innerhalb der zulässigen Grenzen zu bleiben. ### Weiter versuchen -Beachten Sie, dass Sie auch dann versuchen sollten, zu sehen, ob die Antwort unterschiedlich ist, wenn die gültige OTP gesendet wird, selbst wenn eine Ratenbegrenzung besteht. In [**diesem Beitrag**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732) entdeckte der Bug-Jäger, dass selbst wenn eine Ratenbegrenzung nach 20 erfolglosen Versuchen mit 401 ausgelöst wird, eine 200-Antwort empfangen wurde, wenn die gültige gesendet wurde. +Beachten Sie, dass Sie auch dann versuchen sollten, zu sehen, ob die Antwort unterschiedlich ist, wenn die gültige OTP gesendet wird, selbst wenn eine Ratenbegrenzung besteht. In [**diesem Beitrag**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732) entdeckte der Bug-Jäger, dass selbst wenn eine Ratenbegrenzung nach 20 erfolglosen Versuchen durch eine Antwort mit 401 ausgelöst wird, eine 200-Antwort empfangen wurde, wenn die gültige gesendet wurde. -### Werkzeuge +--- -- [**https://github.com/Hashtag-AMIN/hashtag-fuzz**](https://github.com/Hashtag-AMIN/hashtag-fuzz): hashtag-fuzz ist ein Fuzzing-Tool, das entwickelt wurde, um WAFs und CDNs zu testen und zu umgehen. Durch die Nutzung fortschrittlicher Funktionen wie zufälligem User-Agent und Header-Werten, zufälligen Verzögerungen, der Handhabung von Multi-Threading, selektivem Chunking von Wortlisten und Round Robin-Proxy-Rotation für jedes Chunk bietet es eine robuste Lösung für Sicherheitsfachleute, die darauf abzielen, Schwachstellen in Webanwendungen zu identifizieren. +### Missbrauch von HTTP/2-Multiplexing & Anfrage-Pipelining (2023-2025) + +Moderne Implementierungen von Ratenbegrenzern zählen häufig **TCP-Verbindungen** (oder sogar einzelne HTTP/1.1-Anfragen) anstelle der *Anzahl der HTTP/2-Streams*, die eine Verbindung enthält. Wenn dieselbe TLS-Verbindung wiederverwendet wird, kann ein Angreifer Hunderte paralleler Streams öffnen, von denen jeder eine separate Anfrage trägt, während das Gateway nur *eine* Anfrage vom Kontingent abzieht. +```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 +``` +Wenn der Limiter nur `/verify` schützt, aber nicht `/api/v2/verify`, können Sie auch **Path-Verwirrung** mit HTTP/2-Multiplexing für *extrem* schnelle OTP- oder Anmeldeinformationen-Brute-Forcing kombinieren. + +> 🐾 **Tipp:** PortSwigger’s [Turbo Intruder](https://portswigger.net/research/turbo-intruder) unterstützt HTTP/2 und ermöglicht es Ihnen, `maxConcurrentConnections` und `requestsPerConnection` fein abzustimmen, um diesen Angriff zu automatisieren. + +### GraphQL-Alias und gebündelte Operationen + +GraphQL ermöglicht es dem Client, **mehrere logisch unabhängige Abfragen oder Mutationen in einer einzigen Anfrage** zu senden, indem sie mit *Alias* vorangestellt werden. Da der Server jeden Alias ausführt, der Rate-Limiter jedoch oft nur *eine* Anfrage zählt, ist dies ein zuverlässiger Umgehungsmechanismus für das Drosseln von Anmeldungen oder Passwortzurücksetzungen. +```graphql +mutation bruteForceOTP { +a: verify(code:"111111") { token } +b: verify(code:"222222") { token } +c: verify(code:"333333") { token } +# … add up to dozens of aliases … +} +``` +Schau dir die Antwort an: genau ein Alias wird 200 OK zurückgeben, wenn der korrekte Code getroffen wird, während die anderen einer Rate-Limitierung unterliegen. + +Die Technik wurde durch die Forschung von PortSwigger zu „GraphQL-Batching & Aliases“ im Jahr 2023 populär und war verantwortlich für viele kürzliche Bug-Bounty-Auszahlungen. + +### Missbrauch von *Batch* oder *Bulk* REST-Endpunkten + +Einige APIs bieten Hilfsendpunkte wie `/v2/batch` an oder akzeptieren ein **Array von Objekten** im Anfragekörper. Wenn der Limiter nur vor den *Legacy*-Endpunkten platziert ist, kann das Einpacken mehrerer Operationen in eine einzige Bulk-Anfrage den Schutz vollständig umgehen. +```json +[ +{"path": "/login", "method": "POST", "body": {"user":"bob","pass":"123"}}, +{"path": "/login", "method": "POST", "body": {"user":"bob","pass":"456"}} +] +``` +### Timing the sliding-window + +Ein klassischer Token-Bucket- oder Leaky-Bucket-Limiter *setzt zurück* an einer festen Zeitgrenze (zum Beispiel jede Minute). Wenn das Zeitfenster bekannt ist (z. B. durch Fehlermeldungen wie `X-RateLimit-Reset: 27`), sende die maximal erlaubte Anzahl von Anfragen **kurz bevor** der Bucket zurückgesetzt wird, und sende dann sofort einen weiteren vollen Burst. +``` +|<-- 60 s window ‑->|<-- 60 s window ‑->| +###### ###### +``` +Diese einfache Optimierung kann Ihre Durchsatzrate mehr als verdoppeln, ohne andere Bypass-Techniken zu berühren. + +--- + +## Tools + +- [**https://github.com/Hashtag-AMIN/hashtag-fuzz**](https://github.com/Hashtag-AMIN/hashtag-fuzz): Fuzzing-Tool, das Header-Randomisierung, chunked Wortlisten und Round-Robin-Proxy-Rotation unterstützt. +- [**https://github.com/ustayready/fireprox**](https://github.com/ustayready/fireprox): Erstellt automatisch disposable AWS API Gateway-Endpunkte, sodass jede Anfrage von einer anderen IP-Adresse stammt – perfekt, um IP-basiertes Drosseln zu überwinden. +- **Burp Suite – IPRotate + Erweiterung**: Verwendet einen Pool von SOCKS/HTTP-Proxys (oder AWS API Gateway), um die Quell-IP während *Intruder* und *Turbo Intruder* Angriffe transparent zu rotieren. +- **Turbo Intruder (BApp)**: Hochleistungsangriffs-Engine, die HTTP/2-Multiplexing unterstützt; stellen Sie `requestsPerConnection` auf 100-1000 ein, um Hunderte von Anfragen in einer einzigen Verbindung zusammenzufassen. + +## References + +- PortSwigger Research – “Bypassing rate limits with GraphQL aliasing” (2023) +- PortSwigger Research – “HTTP/2: The Sequel is Always Worse” (Abschnitt *Connection-based throttling*) (2024) {{#include ../banners/hacktricks-training.md}}