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

[原创]kanxuectf2019 第九题

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

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

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-3-20 17:00 被skytar编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//