Skip to content

house of tangerine

复制本地路径 | 在线编辑

其实和 house of orange 基本一样。一句话概括,篡改 top_chunk->size,让其变得很小,然后再申请一段内存,这样原来的 top_chunk 会被释放到 unsorted bin 或者 tcache bin 中。

区别就是 house of orange 之后用的是 FSOP,而 house of tangerine 用的是 tcache posioning,其实前面的真正核心原理是一模一样。

简单说明

还是简单说一下步骤,按照 how2heap 的脚本为例:

  1. 首先称当前这个 top chunk 叫做 top_chunk_a;修改 top_chunk_a->size 大小为 0x61,然后申请一个块;此时 top_chunk_a 被释放到 tcache 中
  2. 称现在新的 top chunk 叫做 top_chunk_b;再次修改 top_chunk_b->size 大小为 0x61,然后申请一个块;此时 top_chunk_b 也被释放到 tcache 中
  3. 现在 tcache 是 top_chunk_b --> top_chunk_a,对应的 counts 是 2
  4. 我们把 top_chunk_b->next 修改为 target,然后执行两次 malloc,能够得到 target

为什么要执行两次这种修改 top chunk,这个是为了让 tcache 对应的 counts 是 2,假如我们只执行一次的话:

  1. 当前 tcache 是 top_chunk_a,对应的 counts 是 1,此时修改 nexttarget
  2. 我们执行两次 malloc,第一次 malloc 之后 counts 变为了 0
  3. 所以第二次 malloc 之后系统就认为 tcache 链表为空,不会返回 target

上面内容其实是 tcache poisoning 的内容了,这里多提一下。

Comments