#寻找思路
程序没有开启pie,且got表可以写,canary未开启
从程序可知我们可以对heap进行增删打印操作
**分析add_note函数可以得知,最多创建5个chunk,创建的时候就可以对其写入内容,note的结构包含2个chunk一个是固定的8字节,用于存放print_note_content的函数地址用于输出包含内容的chunk,另一个用于存放内容 **
再来分析del_note函数,我们发现,函数先free了包含内容的chunk,后free包含了print_note_content函数地址的chunk,但是并没有清空存放这些chunk地址的notelist数组,notelist数组再free chunk之后仍然保存在chunk的地址,这里就是uaf漏洞
另外我们还发现一个后门函数
那么思路如下:
- 首先我们可以想办法将存放print_note_content函数地址的chunk,将其指向改成后门函数,那么我们使用show打印这个chunk的时候,就会调用后门函数就可以拿到shell
#思路整理
- 创建两个note大小要求看exp,之后释放这两个note,我们可以发现,存放print_note_content函数地址的chunk,他永远是8字节的内容,我们释放完之后此时fastbin 存放内容如下:
我们很轻易的发现,chunk0 chunk1释放后,他们存放print_note_content函数地址的chunk都进入了fastbin[0]里面,我们每次申请note的时候都会创建两个chunk,其中一个是固定的8,另外一个也是用户自己决定的
-
我们再申请一个note,且该note的包含内容的chunk大小也为8&#x