【发布时间】:2011-04-10 19:41:07
【问题描述】:
我刚开始研究buffer overflow 攻击的工作原理,并尝试使用 Visual C 2010 在 Windows 7 上模拟攻击。缓冲区溢出攻击非常人为,它只是将返回地址覆盖为“缓冲区”局部变量的地址。缓冲区保存 shellcode 字符串。
无论我是否在 Visual Studio 2010 Debug 中运行程序,程序都会跳转到 shellcode 并几乎开始执行它,但我得到一个访问冲突错误,程序不会继续执行shellcode。
为什么会出现此错误?这是对 Windows 中缓冲区溢出的某种保护吗?
你如何让程序执行缓冲区中的shellcode?p>
编辑:
汉斯(答案)是正确的。这在 Windows Internals 5th 的安全章节中进行了讨论,错误的原因是微软对Executable Space Protection 的实现。
如果这个问题对任何人有帮助,我们将不胜感激。
void execute_my_shellcode()
{
char buffer[24];
memcpy(buffer, "\x6A\x21\xFF\x15\x40\x62\x40\x00\x83\xC4\x04\x6A\x0A\xFF\x15\x40\x62\x40\x00\x83\xC4\x04\xC3", 24);
printf("current return address: %p\n", *(int*)((char*)&buffer + 24 + 4));
*(int*)((char*)&buffer + 24 + 4) = (int)&buffer;
printf("return address is now : %p\n\n", (int*)*(int*)((char*)&buffer + 24 + 4) );
}
【问题讨论】:
-
一旦您解决了 NX 问题,您能否帮我一个忙,并发布在可执行文件本身启用 ASLR 的情况下运行可执行文件时会发生什么?