首页
社区
课程
招聘
[求助]GS绕过方法的问题
发表于: 2017-3-21 15:34 4123

[求助]GS绕过方法的问题

2017-3-21 15:34
4123
RT,今天在看0day第二版中关于绕过GS的方法,但是按书中所说,虚表的指针是直接存放在栈中的,因此可以通过淹没栈中虚表低地址使其指向原始参数,然后利用跳板定位到shellcode中,但是我刚刚在调试的时候发现虚表指针并非直接存放在栈中的,中间还有个跳转,也就是栈中存放着一个指针,该指针指向的才是真正的虚表指针,那么这种情况下书中所介绍的方法就没用了,求教大神这种情况下该怎么溢出?

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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 14
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
首先,你需要分清楚,虚指针,虚表地址,虚函数地址。总的来说,虚指针是位于栈中,虚指针指向虚表地址(一般在.rodata区域),而虚表地址即虚表首地址,存储了一些列的虚函数地址。分清楚这个,应该就明白如何去溢出
2017-3-23 20:11
0
雪    币: 355
活跃值: (276)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
3
msvcrt中的低版本和高版本内存分配规则不同,vs2010和以前的版本在这里使用HeapCreate同时也使用VS5和VS6的旧版本 而VS2012的VC ++版本中改变,不再使用私有堆进行分配,并使用默认进程堆,楼主是要通过覆写虚表指针修改程序流程吧 , 新版本采用了一个类似于GS中的一个变量重排机制,很少能有这样利用的程序了 ..
2017-3-28 16:14
0
雪    币: 7
活跃值: (240)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
4
缘分啊 我前两天也遇到这个问题 虚表指针淹没不了 那个应该要在XP之前的虚拟机里实验 窃以为系统升级了保护机制应该修复了这个漏洞 同求解
2017-3-29 18:52
0
雪    币: 30
活跃值: (216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
栈中放着的是这个变量本身,其值是指向实际分配的在堆中的地址,在这实际分配的空间里面的头几项是虚表指针,这也是个地址,这个地址指向的才是真正的虚函数起始部分。楼主,c++没学好吧
2017-4-3 19:52
0
雪    币: 704
活跃值: (228)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
6
虚表指针是对象的  0x0  偏移位置,如果虚表指针在堆上,那就说明对象是用malloc/new  创建的。

这个时候要构造多级指针,可能不是特别容易。
2017-4-11 13:59
0
游客
登录 | 注册 方可回帖
返回
//