堆利用系列七:Tcache Attack

malloc中tcache的分配优先级

  1. 先看是不是符合fastbin,如果符合看tcache是否有符合的,如果有则优先从tcache中分配
  2. 看smallbin中是否又能够满足的,也是优先看tcache是否符合,如果符合则从tcache中分配,如果没有满足的才从smallbin中分配

漏洞

可以导致溢出一个字节,但是这个字节不能为NULL

我一开始的思路

  1. 通过一些布局实现对一个字节的溢出,导致融合错误,导致一个大的chunk放到了unsorted bin上了,然后通过malloc一个tcache上没有的chunk把这个unsroted bin上的chunk给分割掉,同时有一部分已经可以覆盖了tcache上的chunk,那么写入这个chunk就可以修改tcache了。
  2. 但是这个思路貌似卡在了一个字节溢出这个地方,我溢出这个字节不能是NULL,根据题目的原因,然后我尝试用\x02和\x04以及\x08去尝试,发现都会导致程序崩溃,所以这条路就没有走通,但是如果允许溢出 NULL字节的话,我觉着这个思路还是没有问题的

第二个思路

  1. 通过单字节溢出,把0x100的chunk改为0x180的chunk,那么就可以继续通过malloc 0x180 得到一个大的chunk,但是实际上已经覆盖了对下面已经在tcache上的chunk的控制了

  2. 貌似第二个是简单易行的方法,首先得到malloc_hook的地址0x7ffff7dcfc30 <__malloc_hook>: 0x0000000000000000,这个地址是没有\x00的,所以还是比较容易写入的。

  3. 现在一个问题是如何得到泄露地址,貌似这个打印是根据\x00截止的,如果没有遇到\x00打印就不会终结。

手稿图