我正在尝试在 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/