BCTF2017 BabyUse
BCTF2017 BabyUse
问题
问题在于drop函数中在释放块之后没有清空bss_gun_list中的指针。
一般因为存在对bss_gun_flag的验证,所以不会出现什么问题,但是在use功能中没有验证bss_gun_flag
struct_ptr = bss_gun_list[global_index_saved];
因此use功能存在UAF,不得不说这个设计的还是比较隐蔽的,有点考验眼神。
想法
首先因为题目给了我们分配任意大小堆块的能力,并且我们在阅读代码时候发现并没有对分配的内存进行清零。
这就存在内存未初始化漏洞,我们可以通过布局读出之前释放的usorted块中的fd和bk地址,从而计算出libc的基地址。
其次,我们考虑的是利用UAF漏洞去控制gun结构中的函数表地址,我们在issue部分说了,UAF限制了其它功能唯独没有限制use功能,因此我们的目的就是构造函数表地址,然后进行跳转。
做法
前面提出了利用的思路,但是在实际利用的时候会发现内存未初始化因为存在着'\x00'截断实际上是泄漏不了的。因此这道题的泄漏是一个问题,我在泄漏时尝试了一些内存布局比如
buy(1,15,'a'*15)
buy(1,31,'a'*15)
select(0)
drop(0)
rename(1,15,'AAAA\n')
buy(1,15,'a'*15)
use()
结果发现drop之后再buy的话会挤占掉UAF结构的指针 ORZ。。
这道题应该是晨升师傅做出来的,不得不膜一发。我真是没想到能利用输入时的那个空字节进行部分覆盖,覆盖之后就可以直接得到主模块的基地址和堆基址了。
之后直接泄漏got就能得到libc,再伪造函数表就可以了,这里不多说了。
BCTF2017 BabyUse的更多相关文章
随机推荐
- jquery 绑定文本即时查询功能
bindFilterFunc: function () { if ("\v" == "v") { // IE only ...
- 【ARC079F】Namori Grundy
Description 题目链接 大意:给一张基环外向树.要求给每一个点确定一个值,其值为所有后继点的\(\text{mex}\).求是否存在确定权值方案. Solution 首先,对于叶子节点,其权 ...
- 【bzoj3992】 SDOI2015—序列统计
http://www.lydsy.com/JudgeOnline/problem.php?id=3992 (题目链接) 题意 集合${S}$中有若干个不超过${m}$的非负整数,问由这些数组成一个长度 ...
- 大数据高性能数据库Redis在Windows上的使用教程
Redis学习笔记----Redis在windows上的安装配置和使用 Redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括s ...
- 洛谷P4198 楼房重建
题意:给定序列,每次修改一个值,求前缀最大值的个数. 解:线段树经典应用. 每个节点维护最大值和该区间前缀最大值个数. 发现我们不用下传标记,只需要合并区间. 需要实现一个函数int ask([l r ...
- C++并发编程实战---阅读笔记
1. 当把函数对象传入到线程构造函数中时,需要避免“最令人头痛的语法解析”.如果传递了一个临时变量,而不是一个命名的变量:C++编译器会将其解析为函数声明,而不是类型对象的定义. 例如: class ...
- git 创建空提交
git commit --allow-empty -m "Empty Commit to setup deployments"
- JavaScript中的两种全局对象
这里总结的东西特别适合先学习c/c++, Java这类标准语言再学JS的童鞋们看,因为JS在程序执行之前就会初始化一个全局对象,这个全局对象到底是什么是跟JS程序运行环境有关的. 根据JavaScri ...
- OpenStack 网络服务 Neutron 私有网络构建(十九)
本章内容基于之前提供者网络构建的基础上进行改动,之前文章参考如下: Openstack 网络服务 Neutron介绍和控制节点部署 (九) Openstack 网络服务 Neutron计算节点部署(十 ...
- Java基础-处理json字符串解析案例
Java基础-处理json字符串解析案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 作为一名开发人员,想必大家或多或少都有接触到XML文件,XML全称为“extensible ...