-
-
[原创]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编辑
,原因:
赞赏
他的文章
- [原创]kanxuectf2019 第七题 8176
- [原创]kanxuectf2019 第六题 2918
- [原创]kanxuectf2019 第五题 3009
- [原创]kanxuectf2019 第三题 6627
- [原创]kanxuectf2019 第二题 9191
看原图
赞赏
雪币:
留言: