标签:inf 指针 als release 调用 字节 虚函数表 构建 类对象
环境
win10 vs2017 Release x86
突破GS
禁用DEP,ALSR
使用安全函数,不然会报错,要是禁用SDL,GS也会被禁掉。(反正我没搞定,不过好像也没啥影响,安全函数也阻止不了我写bug)
1.虚函数的调用
①首先,虚函数的地址保存在虚函数表,虚函数表的地址保存在类对象前四个字节。
vs中调试,监视对象,很明显。
②进入汇编层面,用od调试:
调用gsv函数前,有两个参数,一是shellcode地址,一是this指针
进入gsv函数:
很明显,虚函数表保存在ebp+0xc,容器起始地址在ebp-0xd0+4,而复制了250字节(注:0xd0 = 208,后面还有三个push)
虚函数表就被覆盖了。
由于虚表被覆盖,再取虚函数地址时就出错了
2.总结
数组在ebp-0xCC,覆盖位置在 ebp+c,在数组第216个字节被覆盖。
3.构建POC
先来简单点的,栈地址恒定的。
在被覆盖位置填上指定地址,指定地址里面填入pop pop retn的地址,shellcode最前面四个字节是jmp esp 地址。
shellcode弹框的部分我是抄的书上的,难的是确定栈内数据位置。(其实也不难,可能我菜吧)
标签:inf 指针 als release 调用 字节 虚函数表 构建 类对象
原文地址:https://www.cnblogs.com/jf-blog/p/12381200.html