论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
安全
›
网络安全
›
Fastbin attack&&Double free和Unsortbin leak的综合使 ...
Fastbin attack&&Double free和Unsortbin leak的综合使用
河曲智叟
金牌会员
|
2024-5-18 14:11:35
|
显示全部楼层
|
阅读模式
楼主
主题
888
|
帖子
888
|
积分
2664
Fastbin attack&&Double free和Unsortbin leak的综合使用✅
今天做一个综合标题,包罗
利用Fastbin attack
实现多指针指向一个地址,以及
利用Unsortbin leak
泄露libc基地址和修改__malloc_hook地址为one_gadget
标题是buuctf上面的一道标题,标题链接
https://buuoj.cn/challenges#babyheap_0ctf_2017
checksec看一下保护
太绿了.....保护全开,不过对于堆标题这也狠正常
那么就64位ida载入
也是有一个菜单和一些功能函数
一个一个看
那么第一个就是申请多大的chunk
没有对其赋值
第二个题目来了,
没有对size检查,那么可以进行溢出修改到别的chunk
第三个函数把指针什么的都置为0了,那么就没有UAF了
第四个函数可以打印出chunk的内容
细致检查步调,发现
并没有后门函数
,那么现在思路是看看能不能能泄露libc,把一个函数更换成one_gadget得到shell
这里Unsortbin leak 可以泄袒露libc地址,
为什么呢?
Unsortbin leak原理:✅
当只有一个unsortbin被free的时候,它的fd、bk
指向一个指针
,这个指针指向
top chunk地址
,这个指针
保存在main_arena+0x58
偏移处,而main_arena是libc的data段中,是全局静态变量,以是偏移也是固定的,根据这些就可以盘算出libc的基地址了
那么要想把它打印出来还不可,因为我们不能打印已经free的chunk(
指针置为0了
),但是因为是64位的chunk,如果要利用打印上一个chunk来打印这个chunk的内容,那也会有许多的\x00来进行截断,以是也是行不通的,那么我们可以
找一个指针指向这个已经free的unsortbin
,然后打印这个指针对应的chunk,题目似乎就办理了,那么该怎么做到呢?
如果我们可以利用Fastbin attack先将其加入fastbin 链中然后就有了一个指向它的指针,然后再malloc回来再将他改回原来的大小,再次free得到unsortbin,再打印刚刚指向它的chunk就得到
main_arena+0x58处的地址了!
效果如下
可以看见chunk2乐成指向chunk4
这个时候我们改变它的size为0x21因为malloc fastbin 有检查, chunksize 必须与相应的 fastbin_index 匹配,以是我们覆盖 chunk 4 的 size 为 fastbin 大小来通过检查
效果如下
chunk4变成了fastbin
再次malloc两个大小为0x10的chunk将这两个chunk2和chunk4拿出来,然后再进行修改chunk size大小为0x91再次申请0x80大小chunk(申请到chunk4)然后再次进行free得到unsortbin
那么就可以得到libc基地址,和one_gadget地址
效果如下
之后我们申请0x60大小chunk将unsortbin进行分割,使其进入fastbin,然后伪造距离__malloc_hook较近的假的chunk来修改__malloc_hook,这个地方一般取__malloc_hook-35这个地方的size比较大而且再fastbin范围内(我当地是0x74)
我们再次修改fd指针
效果如下
再次申请两个大小为0x60的chunk即可申请到我们设置的fakechunk然后修改__malloc_hook为one_gadget就好了,值得注意的是,找的的one_gadget可以有一点点差别,因为libc分为不同的小版本,不同的版本有区别,我们可以把找到的one_gadget加0x10或者减去0x10再试试
最后看看我们做的所有工作
总的来说这题的难度还是不小的,很必要综合能力
最后完整wp
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
河曲智叟
金牌会员
这个人很懒什么都没写!
楼主热帖
黑客常见攻击流程
为什么你的局域网需要https加密?怎么 ...
WebGL 及其在 WebRTC 中的应用
Flutter项目打包生成APK
为什么一定要从DevOps走向BizDevOps? ...
综述计算机中关于数符的表示方法 ...
大数据 - ClickHouse
【计算机网络】基础知识点
dotnet 使用 Crossgen2 对 DLL 进行 Re ...
【Java并发入门】03 互斥锁(上):解 ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表