house of rabbit:fastbin的其他攻击方式
Heap基础知识
[toc]
house of rabbit
house of rabbit是一种fastbin的攻击方法,可以在没有leak的情况下通过获得一个overlap chunk或者是一个fake chunk。这是利用了malloc_consolidate没有进行很好的安全校验来进行攻击的。
我们知道fastbin attack需要保证取出的chunksize和fastbin的size一样,在很多情况下需要寻找0x7f或者是打unsortedbin attack来找0x7f。而house of rabbit同样针对fastbin,它只需要能够触发malloc_consolidate(malloc一个很大的值就可以触发),然后下列两者条件中的一个即可:
- 可以控制
fastbin中chunk的fd指针 - 可以控制
fastbin中chunk的size
上面我们提到两个条件是二选一即可,是因为两个条件可以发起不同的攻击。下面让我们详细理解。
可以控制fd指针
当可以控制fd指针的时候,师傅们很容易想到fastbin attack,然而fastbin attack在部分情况下存在局限性。
只要可以控制fastbin chunk的fd指针,之后只需要将fd指针指向一个任意地方的fake chunk,然后触发malloc_consolidate,就可以申请到该位置的fake chunk。但也需要附加条件,那就是需要该fake chunk的下一个和下下个fake chunk也构造好(实际上只需要构造chunk size)。画个图来理解:

可以控制chunksize
当可以控制chunksize时,可以获得一个chunk overlap。具体过程如下:
首先申请两个相同大小的chunk,例如0x40的两个chunk。释放后,我们将第一个chunksize更改为0x80,此时若触发malloc_consolidate,那么会分别将两个chunk添加到大小为0x40和0x80的smallbin中。那么当size被修改为0x80的chunk被添加到大小为0x80的smallbin中后,chunk overlap实际上就已经发生了。因为只需要申请大小为0x80的chunk就可以获得这个chunk了。