首页
社区
课程
招聘
1
[原创]kanxuectf2019 第九题
发表于: 2019-3-20 15:17 3126

[原创]kanxuectf2019 第九题

2019-3-20 15:17
3126
题目逻辑很清晰,可以使用两种方式对堆块进行管理(即malloc-free,new-delete)。这两种方式本质上是相同的,所以漏洞点不在这。
继续对程序分析,发现经过malloc和new申请到的堆块,程序赋予了两种不同的结构。
其中malloc的堆块,结构如下所示,全局变量ptr[i]中保存的为malloc后的起始地址

new的堆块,结构如下所示, 全局变量ptr[i]中保存的为new后的地址+8的地址
同样,两种结构也都对应了相应的删除方式。其中与malloc相对应的free,就是简单的判断块是否存在,然后释放。而与new对应的delete操作,则会从最后一个虚表指针开始判断当前保存的虚表(Vtable_ptr)中第一个虚函数是否为nullsub,如果不是,则会开始依次调用虚函数。
正常情况下,虚表函数的第一个函数确实为nullsub。
但如果我们能够伪造该虚表,不就可以劫持程序控制流了吗?。确实如此!

[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2019-3-20 17:00 被skytar编辑 ,原因:
收藏
免费 1
支持
分享
赞赏记录
参与人
雪币
留言
时间
PLEBFE
为你点赞~
2023-1-28 03:48
最新回复 (0)
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册