Abort trap而不是缓冲区溢出

5

我一直在阅读Jon Erickson的优秀书籍《Hacking》。我想编译一个缓冲区溢出示例并进行调试,但是应用程序没有写入已分配空间,而只是响应“Abort trap”。这是Xcode或Mac OS引入的一些安全预防措施吗?作者正在使用原始的gcc和Debian。

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    int value = 5;
    char buffer_one[8], buffer_two[8];

    strcpy(buffer_one, "one"); /* put "one" into buffer_one */
    strcpy(buffer_two, "two"); /* put "two" into buffer_two */

    printf("[BEFORE] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
    printf("[BEFORE] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
    printf("[BEFORE] value is at %p and is %d (0x%08x)\n", &value, value, value);

    printf("\n[STRCPY] copying %d bytes into buffer_two\n\n",  strlen(argv[1]));
    strcpy(buffer_two, argv[1]); /* copy first argument into buffer_two */

    printf("[AFTER] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
    printf("[AFTER] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
    printf("[AFTER] value is at %p and is %d (0x%08x)\n", &value, value, value);
}

1
也许编译器的作者们也读过这本书? :-) - Bo Persson
1个回答

6
这是溢出保护机制开启了 - 虽然我不确定在XCode / OSX上是否适用,但是使用gcc时,您可以传递-fno-stack-protector并关闭ASLR。
linux:  sudo echo 0 > /proc/sys/kernel/randomize_va_space

这篇文章帮助 2011年堆栈破坏。你应该能够找到如何禁用保护以使用此代码的方法。顺便说一下,我也在读同一本书 - 我不得不进行一些调整/谷歌搜索,使一些东西与2011年相关。

谢谢,并且我还必须添加-D_FORTIFY_SOURCE=0 http://www.thexploit.com/secdev/turning-off-buffer-overflow-protections-in-gcc/。 - Mikulas Dite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接