-
-
[注意]xp 版本2002 sp3 关于堆栈溢出和SEH溢出 jmp shellcode的问题
-
发表于:
2008-10-15 17:26
5354
-
[注意]xp 版本2002 sp3 关于堆栈溢出和SEH溢出 jmp shellcode的问题
注册很就了.一直没发过贴.
这两天有兴趣学习了一下溢出方面的知识.
碰见了几个问题和大家分享下
我实验的环境是
xp 版本2002 sp3 + vs.net 2005 vc
首先就是碰到了一个/GS编译参数
在制造堆栈溢出jmp esp以前的时候vc加入了堆栈检测机制(我以前用vc6的没想到武器好了。功能也全了~~).
shellcode 还没执行就先给我报错了搞的一头雾水。后来自己跟踪代码才发现.net有这种机制。设置方法
菜单:
项目->属性->c/c++->代码生成->缓冲区安全检查 设置为(否/GS-)
重新编译。shellcode就可以玩了。
还有就是关于SEH溢出jmp ebx的问题。
首先是我用od在kernel32.dll,ntdll.dll,user32.dll,gdi.dll中都未搜索到FFE3 jmp ebx代码.也就是说没有可利用的跳转代码。
只能把在kernel32.dll中找到的jmp esp在SEH触发以前修改为jmp ebx结果出现意外。
在触发代码中。系统对jmp ebx的执行地址做了判断。如果是7c8xxxxx范围的代码不允许作为SEH的处理代码。因此不会执行这段shellcode.
所以堆栈溢出执行kernel32.dll jmp esp的方法在SEH触发执行kernel32.dll jmp ebx中是不能使用的。因为系统在SEH调用处理程序以前做了判断。
防止这种方式执行。所以各位如果做实验发现这种问题。不是你的错。是系统自己做了安全处理。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)