[日本語] [English]

ret4win

TCPサーバの接続情報と、サーバのファイル一式が与えられた。

chall.c を読むと、以下の関数があることがわかった。

次に、TDM-GCCのobjdumpを用いて chall の逆アセンブルを行った。結果の一部を以下に示す。

dump_part.txt

vuln関数において、データを-0x20(%rbp)に読み込んでおり、リターンアドレスは%rbpの8バイト先にあるので、 読み込むデータの0x28バイト目(0-origin)からがリターンアドレスになることがわかる。

以下のデータをTera Termの「ファイル送信」で送信することで、
リターンアドレスをwin関数の冒頭に設定することで "cat flag.txt" のアドレスを%raxに入れさせ、
その次のアドレスをmov %rax, %rdi; call systemのアドレスに設定することで、system("cat flag.txt"); を実行させ、flagが得られた。

payload.bin

buckeye{ret2win_t1m3s_tw0_1s_ret4win_1_guess}

writeup by MikeCAT

BuckeyeCTF 2021