【问题标题】:Abort trap instead of buffer overflow中止陷阱而不是缓冲区溢出
【发布时间】:2011-10-16 13:15:36
【问题描述】:

我一直在阅读 Jon Erickson 的一本出色的书 Hacking。我想编译一个缓冲区溢出示例并对其进行调试,但不是在分配的空间之外写入,应用程序只是响应“中止陷阱”。这是 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);
}

【问题讨论】:

  • 也许编译器作者也读过这本书? :-)

标签: c xcode macos buffer-overflow


【解决方案1】:

这是启动溢出保护 - 虽然我不确定 XCode / OSX,但使用 gcc 你可以通过 -fno-stack-protector 并且必须关闭 ASLR

linux:  sudo echo 0 > /proc/sys/kernel/randomize_va_space

本文帮助Smashing the Stack in 2011

您应该能够了解如何禁用保护以使用此代码。

顺便说一句,我正在读同一本书 - 我不得不调整/谷歌搜索,以使一些事情与 2011 年相关。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
相关资源
最近更新 更多