我们关闭系统中的一个功能——使用地址空间随机化来随机堆(heap)和栈(stack)的初始地址(以便猜测内存地址,实行缓冲区溢出攻击。
为了进一步防范缓冲区溢出攻击及其它利用 shell 程序的攻击,许多shell程序在被调用时自动放弃它们的特权,不能在shell中保持root权限,这个防护措施在/bin/bash中实现。设置zsh程序:
输入命令“linux32”进入32位linux环境。输入“/bin/bash”使用bash:
在 /tmp 目录下新建一个 stack.c 文件,输入以下代码,程序会读取一个名为“badfile”的文件,并将文件内容装入“buffer”:
-fno-stack-proteck
关闭用来阻止缓存区溢出的栈保护机制;-z execstack
用于允许执行栈;-g
参数是为了使编译后得到的可执行文档能用gdb调试新建exploit.c,代码如下,\x??\x??\x??\x?? 处需要添上 shellcode 保存在内存中的地址,因为发生溢出后这个位置刚好可以覆盖返回地址。
我们要得到 shellcode 在内存中的地址,输入命令gdb stack
和disass main
strcpy(buffer + 100,shellcode)
; 我们计算 shellcode
的地址为 0xffffd350(十六进制) + 0x64(100的十六进制) = 0xffffd3b4(十六进制)
\x??\x??\x??\x??
修改为 \xb4\xd3\xff\xff
编译exploit.c 程序,一开始报错了,将badfile打成了hadfile:
通过先后运行攻击程序和漏洞程序,输入whoami
,即可获得root权限,攻击成功。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。