house of force

简介

溢出到top chunk的size位,使top chunk的size位改变,再次申请较大的堆块申请到目标位置

使用前提

  • libc2.23-2.27
  • 存在堆溢出
  • 能想办法知道top chunk的地址

利用

  • 写chunk时溢出到top chunk的size位,改top chunk的size位-1(0xffffffffffffffff)
  • 申请大小为 目标地址-当前topchunk的地址-0x20 的堆块,此时top chunk的位置在目标地址的位置
  • 再次申请堆块即可申请出目标地址

house of einherjar

  • libc2.23-2.34?

利用

请移步:off by null

更新中

一些碎知识

  • 当malloc尝试分配较大的内存时不会从top chunk去切割,二是会调用mmap重新分配内存,重新分配的内存空间与libc有关,因此知道了这块空间的地址可以去泄露libc的基地址

  • fastbin和tcache在重新分配中是先进后出(类似于栈),而unsortedbin会从地址低的地方开始切割

  • bin一般不包括fastbin,因此有时候chunk的结构在fastbin中看不出来

  • fastbin中申请freehook,mallochook时要注意地址+8的位置是0x00000000AB(最后A和size位一样),否则会malloc corruption(fast)报错 。freehook不好满足,而mallochook-0xN的位置一般为libc里的东西,基本为0x7f开头,可满足0x70size位,因此fastbin的doublefree中多数打mallochook