Tcache_attack(2)-tcache stashing unlink attack
本文最后更新于 2024年11月15日 下午
Tcache_Attack(2)-tcache stashing unlink attack
原理
这种攻击利用的是tcache bin中有剩余,同大小的small bin会放进tcache,这种情况可以使用calloc分配空间时触发,因为tcache分配不从tcachebin 中获取,在获取一个smallbin 中的chunk后,如果tcachebin中有足够的空间,smallbin 会把剩余的chunk挂进tcachebin中,这个过程只会对第一个bin进行检查,对后面的堆块没有,如果我们能修改smallbin 中chunk的bk指针,那就有办法把fake_chunk挂进 tcachebin
分析
源码
1 |
|
这段代码的意思就是申请9个chunk,然后释放掉,其中tcachebin被填满了之后,有两个chunk进入smallbin
分别位chunk1,chunk3,用malloc申请从tcachebin中拿走两个chunk,让tcachebin处于不满的状态,然后把chunk3的bk指针改成target chunk,让target挂入smallbin,这时候用calloc从smallbin拿走了chunk1,而tcachbing中刚好有两个空位,smallbin 就会把chunk3和targetchunk挂进tcachebin,其中的检查只会检查chunk3,而chunk3是完整的,所以能通过检查
执行完两个循环后的bin如下图
malloc从tcachebin拿走两个chunk
更改chunk3的bk指针,target被挂进smallbin
calloc从smallbin 拿走一个chunk,重新分配空间后
参考文章
好好说话之Tcache Attack(3):tcache stashing unlink attack(本文所有图片来源)