没有合适的资源?快使用搜索试试~ 我知道了~
第四题点评及解题思路——拯救单身狗1
需积分: 0 0 下载量 136 浏览量
2022-08-03
18:26:55
上传
评论
收藏 1.04MB PDF 举报
温馨提示
试读
17页
个人简介:云南大学大四学生,目前于360代码安全实验室实习安全研究员,pwn手一枚,喜好堆类型及内核类型题目,实习研究方向:IoT。漏洞挖掘路上的一枚菜鸡233
资源详情
资源评论
资源推荐
2019/4/10 看雪学院
https://mp.weixin.qq.com/s/YUoJ0uZLJezHwMdyayMKWA 2/17
出题团队
▼
战队成员:sixty的梦想
个人主页:https://bbs.pediy.com/user-770523.htm
个人简介:云南大学大四学生,目前于360代码安全实验室实习安全研究员,pwn手一枚,
喜好堆类型及内核类型题目,实习研究方向:IoT。漏洞挖掘路上的一枚菜鸡2333。
看雪CTF crownless 评委 点评
▼
《拯救单身狗》的设计包含了任意地址写以及堆数据泄漏,要求参赛者理清攻击思路,并具
有逆向、编写pwn脚本的基本能力。
题目设计思路
▼
2019/4/10 看雪学院
https://mp.weixin.qq.com/s/YUoJ0uZLJezHwMdyayMKWA 3/17
1. 设计灵感来自于CVE-2018-5002,类型混淆。漏洞样本是通过vb脚本自定义两个相似对
象,通过漏洞函数使两个对象的类型发生了混淆,实现了任意地址读写。
题目提前定义了两个对象类型,并设计一个漏洞函数(漏洞为数组越界)。
Struct a{
Name;
}
Struct b{
A;
Name;
}
通过漏洞函数导致b对象进入了a对象的数组。导致对a对象name的写影响了实际为b对象的
结构指针A。导致了任意地址写。
2. 程序开启了全保护,有了任意地址写后需要掌握写的地址。题目第二部分为信息泄露部
分。在对a对象进行写入后会有一次输出内存的机会用来泄露堆里的数据。
流程为:泄露堆地址->任意地址写chunk size->泄露libc地址
解题思路
第一步,通过tchche指针得到堆的地址。由于free堆块采用的rand的方式从数组里随机释
放。得到的heap地址需要/0x1000*0x1000+0x660(libc-2.27)
第二步,需要创造出能分配进入unsorted_bin链表的堆块。由于tcache的限制,需要释放
大小大于0x408的堆块才能进入unsorted_bin,或者多次释放small chunk填充tcache链
表。
题目malloc大小固定为0x20,需要通过任意地址写+堆地址写入某一堆块size,配合save函
数中的free,free的堆块地址可以由类型混淆控制。
我选择写入的大小为0x30*22=0x420.得到libc中main_arena地址。之前可以尝试摸索发现
程序存在tcache机制可以判断libc版本为2.26或2.27(故libc未给出,不然就太简单了)。
分别尝试可得到libc地址。
第三步,任意地址写写入free_hook为system完成利用
剩余16页未读,继续阅读
今年也要加油呀
- 粉丝: 16
- 资源: 312
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0