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