在Mac OS 10.6上执行简单的缓冲区溢出
我正在尝试了解堆栈基础溢出并编写一个简单的代码来利用堆栈。但不知怎的,它根本不起作用,只显示我的机器上的Abort陷阱(mac os豹)
我猜Mac OS对待溢出的方式不同,它不允许我通过c代码覆盖内存。例如,
strcpy(buffer, input) // lets say char buffer[6] but input is 7 bytes
在Linux机器上,此代码成功覆盖下一个堆栈,但在mac os上被阻止(Abort trap)
任何人都知道如何在mac机器上执行简单的堆栈溢出?
没有找到相关结果
已邀请:
4 个回复
布埃郝卞簿
并称之为:
260 037是以八进制和小端顺序的main(0x1fb0)的地址。 在发生总线错误之前,您应该看到hello print两次。诀窍是使用调试器(甚至gdb会这样做)知道你想要结束的地方和返回地址。它与Linux中的不一样! 用于i386的MacOS X(大多数用于i386的操作系统,实际上包括Linux和Windows),特别是< = Leopard并不是最安全的操作系统。 编辑:刚刚意识到我使用clang作为编译器。因此,您需要将其调整为gcc,但我可以告诉您它的工作变化不大:p。
蕾跨立锌煤
编译来转换缓冲区溢出保护。 但是,您还需要禁用
选项,否则如果尝试使用类似
或
的缓冲区溢出,您将获得“中止陷阱”。 要禁用它,只需使用标志
进行编译,例如:
来源:关闭GCC中的缓冲区溢出保护。
部窖空
(希望编译器不会将尾递归优化到一个循环中。如果确实如此,请使它更复杂,非尾递归。) 你似乎想要做的是重现臭名昭着的缓冲区溢出漏洞。虽然有问题的缓冲区应该在堆栈中分配,但漏洞从未被称为“堆栈溢出”。为了实际演示漏洞,仅仅超出某些缓冲区的边界是不够的。重点是在最初由存储的返回地址占用的堆栈区域中设置一个预定值,这样当函数完成时,它“返回”到其他一些(可能是恶意的)代码而不是原始的调用代码。 。 那么,你想做什么呢?堆栈溢出?还是缓冲区溢出?
稼悸
。 另请注意,溢出1个字节肯定不足以触发除编译器堆栈检查之外的任何内容。使用12字节的东西:)