Proxy / WAF Protections Bypass
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Techniken aus dieser Forschung.
Nginx Regelbeispiel:
Um Umgehungen zu verhindern, führt Nginx eine Pfadnormalisierung durch, bevor es diesen überprüft. Wenn der Backend-Server jedoch eine andere Normalisierung vornimmt (Zeichen entfernt, die Nginx nicht entfernt), könnte es möglich sein, diese Verteidigung zu umgehen.
Nginx Version
Node.js Bypass-Zeichen
1.22.0
\xA0
1.21.6
\xA0
1.20.2
\xA0
, \x09
, \x0C
1.18.0
\xA0
, \x09
, \x0C
1.16.1
\xA0
, \x09
, \x0C
Nginx Version
Flask Bypass-Zeichen
1.22.0
\x85
, \xA0
1.21.6
\x85
, \xA0
1.20.2
\x85
, \xA0
, \x1F
, \x1E
, \x1D
, \x1C
, \x0C
, \x0B
1.18.0
\x85
, \xA0
, \x1F
, \x1E
, \x1D
, \x1C
, \x0C
, \x0B
1.16.1
\x85
, \xA0
, \x1F
, \x1E
, \x1D
, \x1C
, \x0C
, \x0B
Nginx Version
Spring Boot Bypass-Zeichen
1.22.0
;
1.21.6
;
1.20.2
\x09
, ;
1.18.0
\x09
, ;
1.16.1
\x09
, ;
Nginx FPM-Konfiguration:
Nginx ist so konfiguriert, dass der Zugriff auf /admin.php
blockiert wird, aber es ist möglich, dies zu umgehen, indem man auf /admin.php/index.php
zugreift.
In diesem Beitrag wird erklärt, dass ModSecurity v3 (bis 3.0.12) die REQUEST_FILENAME
-Variable unsachgemäß implementiert hat, die den aufgerufenen Pfad (bis zum Beginn der Parameter) enthalten sollte. Dies liegt daran, dass eine URL-Dekodierung durchgeführt wurde, um den Pfad zu erhalten.
Daher wird eine Anfrage wie http://example.com/foo%3f';alert(1);foo=
in Mod Security annehmen, dass der Pfad nur /foo
ist, da %3f
in ?
umgewandelt wird, was den URL-Pfad beendet, aber tatsächlich wird der Pfad, den ein Server erhalten wird, /foo%3f';alert(1);foo=
sein.
Die Variablen REQUEST_BASENAME
und PATH_INFO
waren ebenfalls von diesem Fehler betroffen.
Etwas Ähnliches geschah in Version 2 von Mod Security, das es ermöglichte, einen Schutz zu umgehen, der verhinderte, dass Benutzer auf Dateien mit bestimmten Erweiterungen, die mit Sicherungsdateien in Verbindung stehen (wie .bak
), zugreifen konnten, indem einfach der Punkt URL-kodiert in %2e
gesendet wurde, zum Beispiel: https://example.com/backup%2ebak
.
Diese Forschung erwähnt, dass es möglich war, AWS WAF-Regeln, die auf HTTP-Header angewendet wurden, zu umgehen, indem ein "fehlerhafter" Header gesendet wurde, der von AWS nicht richtig analysiert, aber vom Backend-Server verarbeitet wurde.
Zum Beispiel, indem die folgende Anfrage mit einer SQL-Injection im Header X-Query gesendet wird:
Es war möglich, AWS WAF zu umgehen, da es nicht verstand, dass die nächste Zeile Teil des Wertes des Headers ist, während der NODEJS-Server dies tat (dies wurde behoben).
Üblicherweise haben WAFs eine bestimmte Längenbeschränkung für Anfragen, die überprüft werden, und wenn eine POST/PUT/PATCH-Anfrage darüber hinausgeht, wird die WAF die Anfrage nicht überprüfen.
Für AWS WAF können Sie die Dokumentation überprüfen:
Maximale Größe eines Webanfragekörpers, die für Application Load Balancer und AWS AppSync-Schutzmaßnahmen überprüft werden kann
8 KB
Maximale Größe eines Webanfragekörpers, die für CloudFront, API Gateway, Amazon Cognito, App Runner und Verified Access-Schutzmaßnahmen überprüft werden kann**
64 KB
Aus Azure-Dokumenten:
Ältere Webanwendungsfirewalls mit Core Rule Set 3.1 (oder niedriger) erlauben Nachrichten größer als 128 KB, indem die Inspektion des Anfragekörpers deaktiviert wird, aber diese Nachrichten werden nicht auf Schwachstellen überprüft. Für neuere Versionen (Core Rule Set 3.2 oder neuer) kann dasselbe erreicht werden, indem die maximale Anfragekörpergrenze deaktiviert wird. Wenn eine Anfrage die Größenbeschränkung überschreitet:
Wenn Präventionsmodus: Protokolliert und blockiert die Anfrage.
Wenn Erkennungsmodus: Überprüft bis zur Grenze, ignoriert den Rest und protokolliert, wenn die Content-Length
die Grenze überschreitet.
Aus Akamai:
Standardmäßig überprüft die WAF nur die ersten 8KB einer Anfrage. Sie kann das Limit auf bis zu 128KB erhöhen, indem sie erweiterte Metadaten hinzufügt.
Aus Cloudflare:
Bis zu 128KB.
Je nach Implementierung der Unicode-Normalisierung (mehr Informationen hier) können Zeichen, die Unicode-Kompatibilität aufweisen, in der Lage sein, die WAF zu umgehen und als die beabsichtigte Nutzlast auszuführen. Kompatible Zeichen finden Sie hier.
https://github.com/ustayready/fireprox: Generiere eine API-Gateway-URL zur Verwendung mit ffuf
https://github.com/rootcathacking/catspin: Ähnlich wie fireprox
https://github.com/PortSwigger/ip-rotate: Burp Suite-Plugin, das API-Gateway-IPs verwendet
https://github.com/fyoorer/ShadowClone: Eine dynamisch bestimmte Anzahl von Containerinstanzen wird basierend auf der Größe der Eingabedatei und dem Split-Faktor aktiviert, wobei die Eingabe in Teile für die parallele Ausführung aufgeteilt wird, z. B. 100 Instanzen, die 100 Teile aus einer 10.000-Zeilen-Eingabedatei mit einem Split-Faktor von 100 Zeilen verarbeiten.
Verschiedene Techniken können verwendet werden, um die Regex-Filter an den Firewalls zu umgehen. Beispiele sind wechselnde Groß- und Kleinschreibung, das Hinzufügen von Zeilenumbrüchen und das Kodieren von Payloads. Ressourcen für die verschiedenen Bypasses finden Sie bei PayloadsAllTheThings und OWASP. Die folgenden Beispiele stammen aus diesem Artikel.
nowafpls: Burp-Plugin, um Junk-Daten zu Anfragen hinzuzufügen, um WAFs durch Länge zu umgehen
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)