fast bin attack和demo

1前提条件

1,符合fastbin大小的堆块

2.堆溢出漏洞

2源码

 这段话的判断逻辑是a,b,c三个堆块,我们一开始释放a,然后再释放a时

这时会报错为double free,但是如果我们 一开始让

然后 我们让a指向b然后b此时又指向a,然后a又指向b就会变成

 这个时候我们修改从a指向b的指针也就是fd指针就能让后一个a任意指向地址,此时就算只剩最后一个检查方式即fastbin的大小要保持一致

然后最后就是一个house spirit即可用的堆块和不可用的堆块

然后就是结合demo的理解

demo

1fastbin dump

链接:https://pan.baidu.com/s/1ybe8XglymkiiTKMZhJxTxg 
提取码:1111

 

 这样申请出来的堆块

这个例子演示了 fastbin 的 double free
首先申请了 3 个 chunk
第一个 malloc(8): 0x564d644d92a0
第二个 malloc(8): 0x564d644d92c0
第三个 malloc(8): 0x564d644d92e0
free 掉第一个
当我们再次 free 0x564d644d92a0 的时候, 程序将会崩溃因为 0x564d644d92a0 在 free 链表的第一个位置上
我们先 free 0x564d644d92c0.
现在我们就可以再次 free 0x564d644d92a0 了, 因为他现在不在 free 链表的第一个位置上

 这段程序验证的就是第一个保护机制,不能连续两次释放同一个内存否则会报错free(): double free detected in tcache 2

2demo2

验证consolidate机制

申请两个 fastbin 范围内的 chunk: p1=0x560c517792a0 p2=0x560c517792c0
先 free p1
去申请 largebin 大小的 chunk,触发 malloc_consolidate(): p3=0x560c517792e0
因为 malloc_consolidate(), p1 会被放到 unsorted bin 中
free(): double free detected in tcache 2

3demo3

house of spirit

通过伪造fake chunk,将原本的不可控区域申请出来

这一段进行堆块的伪造, 

其中从chunk【1】开始的原因是mem指针的前段chunk是不能进行修改的

这边伪造一个指针并将其释放,就将伪造的chunk段放到了bins中

此时再申请一个大小为0x30的

堆块就会将这一段拉出来 

 

 

 

从而实现对原本不可控段的利用

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值