首页
社区
课程
招聘
[原创]软件系统安全决赛-student management
发表于: 10小时前 311

[原创]软件系统安全决赛-student management

10小时前
311

大家都喜欢的学生管理系统

图片描述

文件保护全开,glibc为2.39版本

提供注册登录删除三个功能

register函数

login函数

bio编辑,修改用户内容

查看用户具体信息

根据以上三个函数我们可以逆向分析出student的结构体内容

新增bio

size<=0x400,若不存在已有bio就往chunk+0x70分配一个新指针,往0x78写size并补0(因为在打印信息里会截断,用来)

删除用户

检验chunk寻找id,检验通过后检查0x70有无信息指针,存在则释放内容,清空指针,并从链表中删除

在注册函数中

在分配一个新的堆块的时候注意到只写入了id name pass 和一个next链接到student链表中,步入查看具体实现的malloc

发现程序实现的malloc没有将分配空间memset为0,不会清空chunk数据,如果合理构造堆块,在free之后再次分配就可以任意读写到bio,结合上面的register可以想到是否能将poinsoned chunk链入来leak出内容呢?

上一次的fix也是手打的AwdPwnpatcher,这一次不知为何过不了。。。前一天晚上本来睡前美美git clone 了一个evilpatcher准备拿来上通防到了赛场发现没有了?!(估计是前一天晚上锁屏的时候wifi自动断开了),总之思路有以下几种

堆风水构造,反向释放合并完unsorted bin留存main_arena指针,此时一个足够大可以分割的unsorted bin可让我们用于构造堆风水
图片描述
login之后在edit_bio的时候我们可以申请任意大小堆块,填满tcache后再次申请0x120大小堆块分掉,再次register后后可以leak地址
此处我们需要两个chunk的空间,填满tcache后从unsorted bin里切割0x130大小的chunk给bio,我们新register的用户残留的bio里就会有二级指针可以指向main_arena的悬垂指针了,同理如果我们利用剩余的unsorted bin构建好在这个二级指针处放的是一个bio指针,就可以leak heap地址了
图片描述

注意到我们目前student14->bio指向了heap+0x720,可以再次利用,伪造一个student结构体
图片描述!
write->student14(bio)-0xa0,我们从0x5627ba2d07a0开始更改掉size就可以overlapping写掉student14的结构体内容,如下


[培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回