
Automatisiertes WAF-Sicherheitstest-Tool, das False Positives und False Negatives erkennt, indem es 15+ Payload-Kategorien einschließlich SQLi, XSS, RCE und GraphQL-Injection verwendet. Unterstützt Docker, JSON-Ausgabe und benutzerdefinierte Payloads.
WAF Bypass Tool ist ein Open-Source-Tool zur Analyse der Sicherheit jeder WAF auf False Positives und False Negatives mit vordefinierten und anpassbaren Payloads. Überprüfen Sie Ihre WAF, bevor ein Angreifer es tut. WAF Bypass Tool wird vom Nemesida WAF-Team unter Beteiligung der Community entwickelt.

Die Nutzung zu illegalen Zwecken ist verboten. Brechen Sie nicht das Gesetz. Wir übernehmen keine Verantwortung für mögliche Risiken, die mit der Nutzung dieser Software verbunden sind.
Die neueste Version von waf-bypass ist immer über den Docker Hub verfügbar. Sie kann einfach mit folgendem Befehl bezogen werden:
# docker pull nemesida/waf-bypass # docker run nemesida/waf-bypass --host='example.com'
# pipx install git+https://github.com/nemesida-waf/waf-bypass.git # <pipx bin dir>/waf-bypass
# git clone https://github.com/nemesida-waf/waf_bypass.git /opt/waf-bypass/ # python3 -m pip install -r /opt/waf-bypass/requirements.txt # python3 /opt/waf-bypass/main.py --host='example.com'
'--proxy' (--proxy='http://proxy.example.com:3128') - Diese Option gibt an, wohin anstelle des Hosts verbunden werden soll.
'--header' (--header 'Authorization: Basic YWRtaW46YWRtaW4=' --header 'X-TOKEN: ABCDEF') - Diese Option ermöglicht es, den HTTP-Header anzugeben, der mit allen Anfragen gesendet wird (z. B. für die Authentifizierung). Mehrfache Verwendung ist erlaubt.
'--user-agent' (--user-agent 'MyUserAgent 1/1') - Diese Option ermöglicht es, den HTTP-User-Agent anzugeben, der mit allen Anfragen gesendet wird, außer wenn der User-Agent durch das Payload gesetzt wird ("USER-AGENT").
'--block-code' (--block-code='403' --block-code='222') - Diese Option ermöglicht es, den HTTP-Statuscode anzugeben, der erwartet wird, wenn die WAF blockiert. (Standard ist ). Mehrfache Verwendung ist erlaubt.
Beispiel für die JSON-Ausgabespezifikation:
{
"TARGET": "https://example.com", // defined by --host option
"PROXY": {}, // defined by --proxy option
"HEADERS": { // defined by --header option
"User-Agent": ""
},
"BLOCK-CODE": [ // defined by --block-code option
...
],
"THREADS": 50, // defined by --threads option
"TIMEOUT": 30, // defined by --timeout option
"EXCLUDE-DIR": [ // defined by --exclude-dir option
...
],
"FAILED": { // requests with failed processing status
"MFD/7.json": {
"BODY": "WBHTTPSConnectionPool(host='example.com', port=443): Read timed out. (read timeout=1)"
},
...
},
"PASSED": { // passed requests
"UWA/3.json": {
"URL": "403 RESPONSE CODE"
},
...
},
"FALSED": { // requests with false positive processing status
...
},
"BYPASSED": { // requests with false negative processing status
"UWA/26.json": {
"URL": "200 RESPONSE CODE"
},
...
},
"TestRequest": { // test requests with processing status, exclude passed
"FAILED": {},
"FALSED": {
"UWA/3.json": {
"URL": "403 RESPONSE CODE"
},
...
}
},
"CURL": { // cURL command to reproduce false positive and false negative requests
"FALSED": {},
"BYPASSED": {
"UWA/26.json": {
"URL": "curl -X GET -H 'Accept: */*' -H 'Accept-Encoding: gzip, deflate' -H 'Connection: keep-alive' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36' 'https://example.com/do.php#.png'"
},
...
}
}
}
Je nach Zweck befinden sich die Payloads in den entsprechenden Ordnern:
Beim Erstellen eines Payloads werden die folgenden Zonen, Methoden und Optionen verwendet:
Base64, HTML-ENTITY, UTF-16) zusätzlich zur Kodierung für das Payload. Mehrere Werte werden durch Leerzeichen getrennt (z. B. Base64 UTF-16). Nur anwendbar auf die Zonen ARGS, BODY, COOKIE und HEADER. Nicht anwendbar auf Payloads in den Verzeichnissen API und MFD. Nicht kompatibel mit der Option JSON.Mit Ausnahme einiger unten beschriebener Fälle sind die Zonen unabhängig voneinander und werden getrennt getestet (d.h. wenn 2 Zonen angegeben sind, sendet das Skript 2 Anfragen – abwechselnd wird die eine und die zweite Zone überprüft).
Für die Zonen können Sie das Suffix %RND% verwenden, mit dem eine beliebige Zeichenfolge aus 6 Buchstaben und Zahlen generiert werden kann. (z. B.: param%RND=my_payload oder param=%RND% ODER A%RND%B)
Sie können eigene Payloads erstellen; erstellen Sie dazu einen eigenen Ordner im Ordner '/payload/', oder platzieren Sie das Payload in einem vorhandenen (z. B.: '/payload/XSS'). Erlaubtes Datenformat ist JSON.
API-Test-Payloads in diesem Verzeichnis erhalten automatisch den Header 'Content-Type: application/json'.
Für MFD (multipart/form-data)-Payloads in diesem Verzeichnis müssen Sie BODY (erforderlich) und BOUNDARY (optional) angeben. Wenn BOUNDARY nicht gesetzt ist, wird es automatisch generiert (in diesem Fall muss nur das Payload für BODY angegeben werden, ohne zusätzliche Daten ('... Content-Disposition: form-data; ...')).
Wenn ein BOUNDARY angegeben wird, muss der Inhalt des BODY gemäß RFC formatiert sein, dies ermöglicht jedoch mehrere Payloads im BODY, getrennt durch BOUNDARY.
Andere Zonen sind in diesem Verzeichnis erlaubt (z. B.: URL, ARGS usw.). Unabhängig von der Zone wird allen Anfragen der Header 'Content-Type: multipart/form-data; boundary=...' hinzugefügt.
403'--threads' (--threads=15) - Diese Option gibt die Anzahl paralleler Scan-Threads an (Standard ist 10).
'--timeout' (--timeout=10) - Diese Option gibt einen Timeout für die Verarbeitung von Anfragen in Sekunden an. (Standard ist 30).
'--exclude-dir' - schließt das Payload-Verzeichnis aus (--exclude-dir='SQLi,XSS')).
'--json-format' - Eine Option, die es ermöglicht, das Ergebnis im JSON-Format anzuzeigen (nützlich für die Integration des Tools mit Sicherheitsplattformen). Wenn die Option nicht angegeben wird, erfolgt die Ausgabe im Tabellenformat (das Standardformat).
'--details' - Zeigt die False-Positive- und False-Negative-Payloads an. Nicht kompatibel mit der Option --json-format.
'--no-progress' - Fortschrittsbalken nicht anzeigen.
'--curl-replay' - Zeigt den cURL-Befehl zur Reproduktion von False-Positive-, False-Negative- oder fehlgeschlagenen Anfragen an. Nicht kompatibel mit der Option --json-format.