【发布时间】:2012-10-23 06:52:06
【问题描述】:
现代编译器 GCC 非常强大,它甚至可以在编译阶段防止缓冲区溢出,从而使操作系统无法在堆栈空间上运行代码。
例如:
void function(char *str)
{
char buffer[16];
strncpy(buffer, str, 256);
}
void main()
{
char large_string[256];
int i;
for( i = 0; i < 256; i++)
large_string[i] = 'A';
function(large_string);
}
获得魔法 0x41414141 的唯一方法是设置 GCC 编译参数,例如:
gcc -fno-stack-protector -z execstack stackoverflow.c -o stackoverflow
(我在 ubuntu 10.04 x86 lucid 32bits box 上测试过)
有什么办法可以绕过 GCC 堆栈粉碎保护?
【问题讨论】:
-
你指的是哪个限制,为什么要绕过它?
-
您想故意破坏堆栈吗?为什么?顺便说一句,您的代码有一个错误。你忘了 NULL 终止
large_string。strcpy()不仅限于 255 个字节。 -
我认为您的意思是询问是否可以绕过 gcc 堆栈保护,如果可以,您应该编辑问题以使其清楚。
-
@NikosChantziaras 有了这个 bug 就更好了!
-
然后在没有保护的情况下编译它。问题出在哪里?
标签: c ubuntu stack-overflow shellcode