how2heap-fastbin_dup_consolidate

fastbin_dup_consolidate

  • consolidate 过程

    1. 若 get_max_fast() 返回 0,则进行堆的初始化工作,然后进入第 7 步
    2. 从 fastbin 中获取一个空闲 chunk
    3. 尝试向后合并
    4. 若向前相邻 top_chunk,则直接合并到 top_chunk,然后进入第 6 步
    5. 否则尝试向前合并后,插入到 unsorted_bin 中
    6. 获取下一个空闲 chunk,回到第 2 步,直到所有 fastbin 清空后进入第 7 步
    7. 退出函数
  • poc

    a=malloc(x);
    b=malloc(x);
    free(a)//a进入fastbin中
     
    c = malloc(0x400)
    //申请large bin的时候已经执行了malloc_consolidate,使得fastbin中的a放入smallbin中
    
    free(a)
    //并不会报错,因为这个时候a已经被放到了smallbin之中,fastbin中没有a,之后a再次进入fastbin中
     
    //此时的a中信息如下:
    a.bk->smallbin
    a.fd->0//由于处在fastbin的第一个,所以fd被清空
     
    malloc(x) = a//这时候a中存在smallbin的信息,可以进行泄露
    malloc(x) = a//可以再次申请,再次得到a
    
  1. 申请两个fast bin大小的chunka、chunkb,释放chunk a

    在这里插入图片描述

  2. 申请lage bin大小的chunk c,此时会进行malloc_consolidate,将fast bin中的chunk放入small bin,可以泄漏small bin中的信息

    在这里插入图片描述

  3. 此时fast bin中没有bin,可以再次释放chunk a,触发double free

    在这里插入图片描述

  4. 后面的操作,就跟double free 一样利用即可.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值