House of Spirit(fastbin)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了House of Spirit(fastbin)相关的知识,希望对你有一定的参考价值。

0x01 fastbin

fastbin所包含chunk的大小为16 Bytes, 24 Bytes, 32 Bytes, … , 80 Bytes。当分配一块较小的内存(mem<=64 Bytes)时,会首先检查对应大小的fastbin中是否包含未被使用的chunk,如果存在则直接将其从fastbin中移除并返回;否则通过其他方式(剪切top chunk)得到一块符合大小要求的chunk并返回。

而当free一块chunk时,也会首先检查其大小是否落在fastbin的范围中。如果是,则将其插入对应的bin中。顾名思义,fastbin为了快速分配回收这些较小size的chunk,并没对之前提到的bk进行操作,即仅仅通过fd组成了单链表而非双向链表,而且其遵循后进先出(LIFO)的原则。

举例来说,假设目前大小为40 Bytes的fastbin中已经包含了一个位于0x0804a000的chunk。

 当另一块大小为40 Bytes,位于0x0804a028的chunk被free时,其被放至同一fastbin中。具体地,0x0804a028成为该fastbin的首个chunk,之前的首个chunk 0x0804a000,则被保存于0x0804a028的fd中。

接下来,调用malloc分配一块32 Bytes的内存(实际大小为40 Bytes的chunk)时,该fastbin中的首个chunk, 0x0804a028会被移除并返回。此时该fastbin的首个chunk变为0x0804a028的fd内容,即0x0804a000。此时便恢复到之前的状态。

当然,在实际执行分配或回收时,还会对目标chunk的大小进行检查。但如果能够修改fd内容,那么在随后的malloc时便可能将修改后的地址返回,这进一步往往能够造成向任意地址写任意内容(write-anything-anywhere)的后果。

0x02 House of Spirit

House of Spirit实现的最终效果,也是使攻击者构造的伪chunk通过fastbin被malloc返回。House of Spirit是通过篡改free的目标地址,将伪chunk放入fastbin,进而使随后的malloc返回此伪chunk

0x03 参考

https://sploitfun.wordpress.com/2015/02/10/understanding-glibc-malloc/

浅析Linux堆溢出之fastbin

参考题目:RCTF2015-shaxian

以上是关于House of Spirit(fastbin)的主要内容,如果未能解决你的问题,请参考以下文章

溢出利用技巧house of spirit friendly stack overflow

2014-hack-lu-oreo 对技巧house of spirit

Gym100496H-House of Representatives-树

#269(div2) C. MUH and House of Cards

how2heap 2:fastbin_dup

babyheap_fastbin_attack