
Ein Programm zum Testen der WAF-Funktionalität
Enterprise-WAF-Bewertungstool — Echte Angriffspayloads. Echte Ergebnisse. Compliance-bereite Berichte.
WAF-Tester bewertet Web Application Firewalls, indem echte Angriffspayloads an eine benutzerdefinierte URL gesendet wird und gemeldet wird, ob diese blockiert werden. Verfügbar als Windows-Desktop-App (Electron) und als Python-CLI, die überall läuft.

Dieses Tool ist ausschließlich für autorisierte Sicherheitstests bestimmt. Verwenden Sie es nur gegen Systeme, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Genehmigung zum Testen haben. Das unbefugte Testen von Systemen Dritter kann gegen den Computer Fraud and Abuse Act (CFAA) und gleichwertige Gesetze in Ihrem Land verstoßen. Die Autoren übernehmen keine Haftung für Missbrauch.
| Suite | Tests | Abdeckung |
|---|
| OWASP / CWE Core | 44 | SQL-Injection (12 Varianten), XSS (10 Varianten), Path Traversal, Command Injection, XXE, SSRF, Log4Shell, SSTI, Open Redirect |
| Rate Limiting | 3 | Burst-Flood (30 gleichzeitig), Sequentieller Flood, X-Forwarded-For-IP-Rotationsumgehung |
| Bot-Erkennung | 10 | sqlmap, Nikto, Nmap, Scrapy, Masscan, HeadlessChrome, python-requests, curl, leere UA, fehlende Accept-Header |
| Bypass-Versuche | 15 | Doppelte URL-Kodierung, Unicode Fullwidth, Nullbytes, Groß-/Kleinschreibungsvariation, Kommentar-Verschleierung, CRLF-Injection, Host-Header-Injection, Methoden-Override, Pfad-Tricks |
| API-Sicherheit | 10 | GraphQL-Introspection/Batch/Enumeration, JWT-Algorithmus-None & -Verwirrung, Mass Assignment, HTTP-Verb-Tampering, BOLA, Content-Type-Verwirrung |
| Geschäftslogik | 8 | Negative Menge, Nullpreis-Einreichung, Admin-Endpunkt-Zugriff, HTTP-Parameter-Verschmutzung, Account-Enumeration, übermäßige Datensammlung, Erzwungenes Browsen, Privilegieneskalation |
Jeder Test ist mit einem oder mehreren Compliance-Frameworks getaggt:
HIGH, LIKELY oder UNCERTAIN bewertet, anstatt mit binärem Bestanden/Nicht bestandengit clone https://github.com/kpomin57/waf-tester.git
cd waf-tester
npm install
npm start
npm run build
Die Ausgabe erscheint in dist/ sowohl als NSIS-Installer als auch als tragbare .exe. Auf dem Zielrechner sind keine Voraussetzungen erforderlich – Electron bündelt seine eigene Laufzeit.
Eine einzeitige Python-Version, die überall läuft, wo Python verfügbar ist – Linux-Server, CI/CD-Pipelines, Docker-Container, WSL oder jede Umgebung, in der die Windows-.exe keine Option ist.
pip install rich requests
python waf_tester.py --url https://target.example.com
Führt alle 90 Tests aus, fordert eine Autorisierungsbestätigung an, gibt farbcodierte Ergebnisse auf dem Terminal aus und speichert sowohl einen JSON- als auch einen HTML-Bericht im aktuellen Verzeichnis.
| Flag | Beschreibung | Standard |
|---|---|---|
--url | Ziel-URL (erforderlich) | — |
--suites | Kommagetrennte Suites, die ausgeführt werden sollen | alle |
--auth-type | none / bearer / apikey / cookie / basic | none |
--auth-value | Token, Cookie-String oder API-Schlüsselwert | — |
--auth-header | Header-Name für API-Schlüssel-Authentifizierung | X-API-Key |
--auth-user | Benutzername für Basic Auth | — |
--auth-pass | Passwort für Basic Auth | — |
--no-baseline | Basislinienvergleich deaktivieren | aus |
--no-rotate-ua | User-Agent-Rotation deaktivieren | aus |
--waf-header | X-WAF-Tester-Identifikationsheader senden | aus |
--output | terminal, json, html (kommagetrennt) | alle drei |
--output-dir | Verzeichnis zum Speichern der Berichtsdateien | . |
--timeout | Timeout pro Anfrage in Sekunden | 10 |
--proxy | Proxy-URL für alle Anfragen (z. B. http://127.0.0.1:8080) | aus |
--confirm | Die Autorisierungsbestätigungsaufforderung überspringen | aus |
# Run all suites
python waf_tester.py --url https://app.example.com
# Run OWASP and API suites only
python waf_tester.py --url https://app.example.com --suites owasp,api
# Bearer token auth
python waf_tester.py --url https://app.example.com/api \
--auth-type bearer --auth-value eyJhbGciOiJIUzI1NiJ9...
# API key auth
python waf_tester.py --url https://app.example.com/api \
--auth-type apikey --auth-header X-API-Key --auth-value mykey123
# Save reports to a folder, skip confirmation (CI/CD)
python waf_tester.py --url https://app.example.com \
--output-dir ./reports --confirm
# Terminal output only — no files saved
python waf_tester.py --url https://app.example.com --output terminal
# Route traffic through Burp Suite
python waf_tester.py --url https://app.example.com --proxy http://127.0.0.1:8080
docker run --rm -v $(pwd)/reports:/reports \
python:3.12-slim sh -c \
"pip install rich requests -q && python waf_tester.py \
--url https://target.example.com \
--output-dir /reports --confirm"
- name: WAF Evaluation
run: |
pip install rich requests
python waf_tester.py \
--url ${{ secrets.WAF_TARGET_URL }} \
--suites owasp,api,bypass \
--output json \
--output-dir ./reports \
--confirm
- name: Upload report
uses: actions/upload-artifact@v3
with:
name: waf-report
path: reports/
Die Python-CLI kann den gesamten Testverkehr durch Burp Suite leiten, sodass Sie einen vollständigen HTTP-Verlauf aller von WAF Tester gesendeten Payloads erhalten. Dies ist nützlich für die manuelle Inspektion von Anfragen und Antworten, das Feintuning von Payloads, die Fehlerbehebung bei unerwartetem WAF-Verhalten und die Verwendung von Burps eigenem Scanner oder Repeater für interessante Funde.
Burp Suite führt einen lokalen Proxy-Listener (Standard 127.0.0.1:8080). Wenn Sie die Proxy-Umgebungsvariablen von WAF Tester auf diese Adresse richten, wird jede vom Tool gesendete Anfrage über Burp geleitet, bevor sie das Ziel erreicht. Sie sehen jeden Payload im HTTP-Verlauf von Burp mit der vollständigen Anfrage und Antwort – Statuscode, Header, Body – genau so, wie die WAF sie gesehen hat.
1. Starten Sie Burp Suite und stellen Sie sicher, dass der Proxy-Listener aktiv ist:
Öffnen Sie Burp → Proxy → Proxy-Einstellungen → bestätigen Sie, dass der Listener auf 127.0.0.1:8080 läuft (oder notieren Sie sich Ihren Port, falls abweichend).
2. Exportieren Sie Burps CA-Zertifikat und vertrauen Sie ihm (einmalige Einrichtung):
WAF Tester verbindet sich mit HTTPS-Zielen, daher muss Burp TLS abfangen. Gehen Sie zu Burp → Proxy → Proxy-Einstellungen → Import/Export CA Certificate → Export as DER. Installieren Sie es als vertrauenswürdiges Root-CA auf Ihrem System, oder setzen Sie die folgende Umgebungsvariable, um die Verifizierung zu überspringen (für Labore in Ordnung, nicht für die Produktion).
3. Führen Sie WAF Tester mit --proxy aus:
python waf_tester.py --url https://target.example.com --proxy http://127.0.0.1:8080
Unter Windows:
python waf_tester.py --url https://target.example.com --proxy http://127.0.0.1:8080
Sie können auch weiterhin Umgebungsvariablen verwenden, wenn Sie möchten:
HTTPS_PROXY=http://127.0.0.1:8080 HTTP_PROXY=http://127.0.0.1:8080 \
python waf_tester.py --url https://target.example.com
4. Schalten Sie die Abfangfunktion von Burp aus:
Stellen Sie in Burp → Proxy → Intercept sicher, dass die Abfangfunktion aus ist – andernfalls pausiert Burp bei jeder Anfrage und wartet darauf, dass Sie sie manuell weiterleiten, und WAF Tester wird ein Timeout erhalten. Burp soll den Datenverkehr passiv protokollieren, nicht abfangen.
5. Beobachten Sie die eingehenden Anfragen im HTTP-Verlauf von Burp:
Jeder WAF-Tester-Payload erscheint als separater Eintrag. Sie können mit der rechten Maustaste auf eine beliebige Anfrage klicken und sie an Repeater senden, um sie manuell zu bearbeiten und erneut zu senden, oder an Intruder, um sie weiterzufuzzzen.
Wenn das Burp-CA-Zertifikat nicht vertrauenswürdig ist, fügen Sie als Workaround --no-verify hinzu, indem Sie die SSL-Verifizierung im Tool vorübergehend deaktivieren. Alternativ vertrauen Sie dem Burp-CA-Zertifikat systemweit oder verwenden Sie für erste Tests ein HTTP-Ziel (nicht HTTPS).
| Punkte | Note | Bedeutung |
|---|---|---|
| 90–100 % | A | Ausgezeichnet – WAF blockt fast alle Angriffsvektoren |
| 80–89 % | B | Gut – kleinere Lücken, die eine Untersuchung wert sind |
| 65–79 % | C | Befriedigend – bemerkenswerte Bypass-Vektoren vorhanden |
| 50–64 % | D | Mangelhaft – erhebliche Schutzlücken |
| < 50 % | F | Kritisch – WAF ist größtenteils unwirksam |
Konfidenzstufen:
HIGH — harter Block-Status (403, 406, 429) ohne MehrdeutigkeitLIKELY — WAF-Schlüsselwörter im Antworttext oder Status weicht vom Basislinienvergleich abUNCERTAIN — weicher Block (400, 503), der ein legitimer Anwendungsfehler sein könnte# Juice Shop (no WAF — expect all bypassed)
docker run -d -p 3000:3000 bkimminich/juice-shop
# ModSecurity with OWASP CRS (expect most blocked)
docker run -d -p 80:80 owasp/modsecurity-crs:nginx
waf-tester/
├── src/
│ ├── main.js # Electron main process — all test logic & IPC
│ ├── preload.js # Secure context bridge
│ └── renderer/
│ ├── index.html # App shell
│ ├── styles.css # Dark military/SOC UI theme
│ └── app.js # UI logic, filters, live feed, export
├── waf_tester.py # Python CLI — single file, no config needed
├── package.json
└── README.md
waf_tester.py) hinzugefügt – eine Datei, läuft überallMIT — siehe LICENSE für Details.
Entwickelt für Sicherheitsingenieure, die eine WAF-Validierung benötigen, die über die reine Checklisten-Compliance hinausgeht.