今天总算找到了怎么关闭linux对栈的随机处理了的方法了,有好几次在这个问题上纠结,却百度不到资料,只好用ubuntu4这种早期的系统进行漏洞挖掘的学习(没办法,我做为初学者还处理不了栈被随机化的情况),今日看资料,偶然发现解决办法。 ============================================================================================
《缓冲区溢出光速入门》提到:
“.....你的Kernel作了栈随机处理,这个机制是专门防范溢出用的,对安全
而言这个机制非常有用,但对你学习而言则带来不少麻烦,为了学习方便,可以先用以下方
法禁用内核的这个功能: sudo root,然 echo 0 >/proc/sys/kernel/randomize_va_space ;
如果是RedHat系列, 可以通过echo 0 > /proc/sys/kernel/exec-shield-randomize禁用。 )”
=============================================================================================
在ubuntu10.4中实验如下:
more /proc/sys/kernel/randomize_va_space
2
这个是原值
======================================
试图用vi写入0,提示:
"/proc/sys/kernel/randomize_va_space" E667: Fsync failed
Press ENTER or type command to continue
什么原因?
答:U cannot edit the /proc files with vi . if u want
to change its value u can echo to that file like
echo "20000000" > /proc/sys/kernel
======================================
# echo 0 >/proc/sys/kernel/randomize_va_space
# more /proc/sys/kernel/randomize_va_space
0
=====================================
用下面这个程序,可以检查是否修改成功:
more find_start.c
#include<stdio.h>
unsigned long find_start(void)
{
__asm__("movl %esp,%eax");
}
int main()
{
printf("0x%x/n",find_start());
}
./find_start
0xbffff738
./find_start
0xbffff738
./find_start
0xbffff738
./find_start
0xbffff738
./find_start
0xbffff738
都一样,说明linux对栈的随机化处理功能已经被关闭了。