为什么我仍然得到堆栈cookie异常虽然我在编译时在VS11中禁用了/ GS标志?场景:缓冲区溢出教程测试

时间:2014-04-18 07:36:05

标签: c visual-studio-2012 compiler-construction buffer-overflow shellcode

最近我尝试在C语言中测试用于演示缓冲区溢出的教程应用程序。我使用Visual Studio 2012工具链来编译和链接源代码,并确保设置了以下选项:禁用地址空间随机化,/ GS禁用,它应该禁用堆栈保护和受害应用程序"上的缓冲区溢出保护,这是易受堆栈溢出影响的。 虽然我做了这一切,但是除了我要用shellcode覆盖的缓冲区大小之外,还有额外的空间添加到堆栈中。我设法识别返回地址,我想用缓冲区的起始地址替换它,以便从堆栈中运行我的shell代码。 我收到以下消息,就像我启用了/ GS标志一样,但我没有:

堆栈cookie检测代码检测到基于堆栈的缓冲区溢出。

你知道可能是什么问题吗?我使用第二个应用程序并使用shellcode作为参数来调用我的受害者应用程序。据我所知,它不应以任何方式干扰受害者处理此事的方式。我从攻击应用程序中为受害者使用WinExec调用。

为什么我仍然像启用GS一样获得行为?我不认为它被任何其他选项覆盖,我也禁用/ sdl - 安全检查。 对于链接器,我添加了以下内容:/ DYNAMICBASE:NO。

我需要配置哪些其他选项才能使堆栈cookie和缓冲区溢出保护成为可能?除此之外,是否还有其他设置用于环境,我必须配置这些设置才能使其工作?目前似乎忽略了/ GS-。

编辑:这里似乎已经涵盖了类似的问题:A buffer overflow attack on Windows results in access violation我认为这也是我问题的根源。之前提到的所有行为都是由于/ NXCOMPAT:NO标志,它似乎引入了将返回地址放在堆栈中并激活堆栈cookie保护机制的行为。启用/ NXCOMPAT后,返回地址放在局部变量和基指针之后,如果没有省略。我收到了访问冲突消息。有没有人设法绕过这个并设法在使用VS2010或更高版本的cl编译的程序上实现成功的缓冲区溢出攻击?

0 个答案:

没有答案