我一直在为故意容易受到攻击(我写的)写基于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
预计会出现这种情况吗? 我可以禁用它,以便特定的二进制文件始终具有相同的堆栈地址吗? 如果没有真正的漏洞需要泄漏堆栈的地址来做到这一点?对此有共同的技术吗?