babyheap_0_ctf_2017

漏洞就是劫持程序控制流

先对程序进行分析

alloc(Length)   //struct a_malloc{int use_or_not; int Length;void* base;int un_use} ;   struct a_malloc malloc_array[16];

fill(任意长度)

free(指定块)

dump(输出对应chunk的Length)//可以填充任意长度的数据,即可以修改 chunk头

目标 -->劫持程序控制流 --> 把__malloc_hook变成one_gadget地址  --> 获得glibc_base地址  --> 泄露 glibc内部数据地址

劫持程序控制流

    ①只要可以修改程序执行路径上的流程,就可能拿到shell

    ②最基础的__libc_malloc中会调用 __malloc_hook() 

    ③__malloc_hook 又处于数据区,即修改__malloc_hook值即可获得程序控制流

把__malloc_hook变成one_gadget地址

    ①申请一块内存,刚好覆盖__malloc_hook

    ②写入one_gadget

泄露 glibc内部数据地址

   ① 释放一个small_bin大小的chunk

          //free会将small_bin放入unsort_bin 即main_arena.bins[0]

          //为了实现链表的双向寻找,会将&mian_arena.bins[0] -0x10 放入free_chunk的fd,bk   // -0x10是为了 符合malloc_chunk的结构

   ② 打印超过自身大小的数据

打印超出自身大小的数据

   ① 修改chunk.size 使得 free的时候 释放更大空间  // 进入更大的fastbin链

   ②然后再申请回来,使得绕过 a_malloc.Length的限制

 

梳理思路

申请更大快的内存-->泄露lic地址

Index0 = calloc(Length0)          //change chunk1.size

Index1 = calloc(Length1)          //free and malloc to get more Index1 size

Index2 = calloc(Length2)          //free to get main_arena_address

Index3 = calloc(Length3)          //防止free(Index2)时 ,top_chunk和Index2合并

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值