linux - 堆栈粉碎测试环境

标签 linux virtualbox buffer-overflow stack-smash

我正在尝试在 virtualbox 中测试缓冲区溢出攻击,并且由于各种发行版的所有安全功能,过去几周一直在苦苦挣扎。

我尝试按照在线教程一步一步进行操作,但没有成功。

我没有尝试禁用所有安全功能,而是尝试获取旧的 Linux 发行版,但大多数发行版都没有附带 gcc,并且现在缺乏可用的存储库。

我什至找到了一个关于 Ubuntu 10.10 的分步视频(我也下载了),包括禁用各种安全功能的所有命令,但没有运气。我可以得到段错误,但不能得到“非法指令”。

是否有一个古老的 Linux 发行版我仍然可以在没有这种保护的情况下下载,它附带 gcc(或带有完整存储库的巨大 DVD isos 之一),以便我可以测试它?

最佳答案

你不需要。

使用 GCcflags -fno-stack-protector 编译可执行文件并使用 sudo sh -c "echo 0 >/proc/sys/kernel/randomize_va_space" 关闭 ASLR,会禁用许多 Linux 发行版中的两个主要内存损坏攻击缓解措施。 (这两种保护技术都可以追溯到很多年前,因此查找旧发行版的副本非常耗时,节省Damn Vulnerable Linux)

在某些发行版上,您可能会写入异或执行内存页面,这是通过许多不同的软件包实现的,您必须自己禁用这些软件包。考虑到这一点,如果您没有收到堆栈粉碎警告,则几乎可以肯定您没有具有 W^X 内存页的可执行文件。

这意味着如果您遇到段错误,您可能已经成功覆盖了堆栈上存储的 EIP,只是您的 shellcode 偏移量错误,或者您犯了字节顺序错误(一些向后非法的多字节指令不再非法!)。在 GDB 中检查你的程序,我想你会发现哪里出了问题。

探索The Shellcoder's Handbook可能是对您时间的有效利用。

关于linux - 堆栈粉碎测试环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12256103/

相关文章:

c++ - "xor eax, ebp"在 C++ 编译器输出中使用

python - 使用 fgets 导致缓冲区溢出

c - 溢出的缓冲区数据不会连续存储

linux - X10 - 多地点的段错误

c++ - fstream类成员变量

virtual-machine - 驱动器号更改 - 为 VirtualBox VM 重新注册 VDI

python - 将 apache-airflow 库添加到 PyCharm

linux - 如何在编译/链接时让 gcc 达到每个内核不超过 50% 的占用率?

linux - 没有提供键盘输入时报错并退出

node.js - vagrant、docker、共享卷在初始配置时未准备好