前置知识之前有过相关内容
Use After Free 模式化
fastbins类型典型流程
- 找到存在Use After Free漏洞的指针x
- free(x),但没有将x设置为NULL
- 如果有多个指针,free(x)之后没有将所有的指针设置为NULL
- x最好是函数指针
- 或者后面的y是一个函数指针
- free(x) # 但x仍然指向堆中的一个chunk
- 发送会产生free(x)的输入选项
- 之后直接y = malloc(size),返回与x相同的chunk
- 如果能够指定size,只需要与x的size相同就可以
- 攻击者必须能够向y写入内容
- 向y写入内容(相当于写x)
- 如果能够使用x就会造成Use After Free
- 可以将func_ptr修改为任意值

Use After Free后的利用方式
一般是劫持函数指针
- 调用 system(“/bin/sh”)

需要能够将输入数据作为函数参数
类似system(“/bin/sh”)进行ROP/COP/JOP等
类似system(“/bin/sh”)调用进行ROP/COP/JOP的stager

- 无法直接指定函数参数,也可以用ppret这种方式执行stack上的ROP
- heap上也经常使用的JOP/COP
其他的利用方式
x,y不是func_ptr的情况
- 控制作为字符串使用的成员
- 消除NULL终止符,泄漏堆和libc(arena相关)的地址
- 控制作为字符串指针的成员
- 任意内存的内存泄漏
- 替换GOT之类的地址
- 控制作为权限flag的成员
- 意外的权限提升
- 控制作为count,size之类的成员
- stack/heap 溢出
- 控制作为链表指针的成员
- 重新连接时可能任意地址写
- Unlink attack, fastbins unlink attack