如何在Linux上禁用ASLR,这样堆栈指针的初始值每次都相同?

时间:2016-05-12 07:35:19

标签: c linux assembly virtual-address-space aslr

我一直在为故意容易受到攻击(我写的)写基于Heap的缓冲区溢出攻击。 为了劫持控制流,我在堆栈上覆盖了函数的返回地址。

这些漏洞取决于堆栈位于特定(硬编码)位置。

我认为这很好,因为我禁用了ASLR(我正在运行Ubuntu 14.04,x86_64):

我通过将kernel.randomize_va_space = 0添加到/etc/sysctl.conf并重新启动计算机来禁用ASLR。 我已通过以下命令确认已禁用ASLR:

$ cat /proc/sys/kernel/randomize_va_space   
0

但主要开始时堆栈的地址明显改变。 为了测试这个,我在gdb中加载了程序并打破了第一个asm指令并执行了以下操作:

(gdb) p $rsp
$1 = (void *) 0x7fffffffe538

然后我重新启动,我做了同样的

(gdb) p $rsp
$1 = (void *) 0x7fffffffe558

预计会出现这种情况吗? 我可以禁用它,以便特定的二进制文件始终具有相同的堆栈地址吗? 如果没有真正的漏洞需要泄漏堆栈的地址来做到这一点?对此有共同的技术吗?

0 个答案:

没有答案