use after free & double free利用

在fastbin下的use after free & double free利用

double free + fastbin attack = 任意地址写
在malloc()时,当用户所要求内存大小在 fastbin 的大小范围时,malloc()优先从fastbin中拿出chunk
规则:释放堆插入到head后的第一个chunk;分配堆释放head后的第一个chunk

  1. 初始状态
    [head]—>[chunk1:next,…]—>[chunk2:null]
  2. 此时申请了两个堆:
    [head]—>null
  3. 先释放chunk1,再释放chunk2:
    [head]—>[chunk2:next,…]—>[chunk1:null]
  4. 如果有doublefree漏洞重复释放了一次chunk1:释放chunk则head指向该chunk,被释放的chunk的next指针指向当前的第一个chunk
    [head]—>[chunk1:next,…]—>[chunk2:next,…]—>[chunk1:next,…]…链表循环了
  5. 此时申请一个chunk:head指向第一个chunk的next,同时将第一个chunk指针返回给用户
    [head]—>[chunk2:next,…]—>[chunk1:next,…]用户手里拿到了还在链表中的chunk1的修改权,修改改chunk1的next值为targetpointer
  6. 再申请一个chunk
    [head]—>[chunk1:targetpointer]
  7. 再申请一个chunk
    此时拿到了targetpointer地址作为new的返回值,从而实现任意地址写

总结:double free会在链表中构造出循环,循环意味着会多次分配到同一块chunk,第一次分配到的chunk可以写入修改其next域为
任意写的目标地址,第二次分配到改chunk后head指向的就是target地址,此时再进行一次分配即可拿到目标地址
实际攻击测试:https://blog.csdn.net/qq_40827990/article/details/86555028
为啥不直接对目标地址写入呢,因为被攻击程序没有这样的接口,但是攻击函数可能会存在申请内存并向其写入数据的接口,所以需要辗转利用

use after free + fastbin a = 任意地址写原理
申请一个chunk然后释放掉,然后像其第一个字段(next)写入目标地址,申请chunk(此后与df利用一致)
核心原因:free掉的chunk实际依然有效,并非free之后地址即无效所以可以持有链上的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值