题目分析
- overlap,写入位置为fd+0x10,但写入大小任然是申请大小,可溢出写入下一个chunk的pre_size和size(本题基本没用,因为libc地址已经白给了,没有白给的话可以使用该漏洞泄露libc)
- uaf,因为有uaf的存在导致,我们可以将释放后的chunk再一次进入该函数,通过第一个框的赋值语句改写fd的内容,从而可以使用tcache attck,下面的判断因为uaf所以不会进行free,所以不会触发double free 报错
- libc白给函数
思路
- 通过函数拿到libc_base
- 申请4个chunk并释放,在chunk1中写入malloc_hook-0x10
- 通过改写fd的漏洞使chunk2的fd指向chunk1的fd+0x10**(也就是malloc_hook-0x10)**
劫持前:
劫持后:
- 申请3个chunk后,第四个chunk就是malloc_hook-0x10(因为写入是从hook+0x10故-0x10)
- 申请第四个chunk同时写入one_gadget
- 再申请一个chunk,get shell
注:申请四个chunk,且释放四个chunk的原因是,tcache机制会记录进入tcache的个数,若只释放了三个,我们无法申请出malloc_hook-0x10
from pwn import *
context.update(os='linux',arch='amd64',log_level=