SUID提权
接上文sudo滥用提权,今天我们来学习suid提权
SUID
suid是一种特殊的文件属性,它允许用户执行的文件以该文件的拥有者的身份运行
这里就不得不再提一次关于Linux文件权限的理解:
Linux中每个文件和目录都有九位基础权限位,每三位组成一组分别为:文件类型,属主用户权限位,用户组权限位,其它用户权限
类似这样:drwxrwxrwx(加粗部分,第一位d为目录文件),其中
r为可读权限,对应数字4
w为可写权限,对应数字2
x为可执行权限,对应数字1
若没有以上权限则可用-代替,对应数字0
接下来就是我们今天要讲的suid位,当s出现在属主权限位的x权限位上时,就被称为Set UID 简称SUID
suid s对应数字4
s出现在属主权限x位上的作用:
1.SUID权限仅对二进制程序有效
2.执行者对于该文件需要有x(运行)权限
3.本权限仅在程序运行过程中有效
4.执行者将拥有文件所有者的权限
所以SUID提权的思路就是我们运行root用户所拥有的文件,那么我们运行该文件的时候就拥有root权限了,有点相似sudo滥用提权,都是利用拥有root权限的命令/程序,运行相应的最后获取root权限。下面进行环境的搭建
环境搭建
现在我们就来复现一下使文件变为具有root权限的suid的文件,首先编辑一个test.c
使用命令gcc test.c -o 1
编译一下,编译为文件1
设置文件的suid,注意这里要执行用户需要拥有运行权限,也就是其他用户权限要有x
1 | ls -la //查看文件权限 |
再次查看文件权限发现文件名已经变红了
可以使用以下命令查看具有SUID权限的文件
1 | find / -perm -u=s -type f 2>/dev/null |
find
: 在文件系统中查找文件和目录。/
: 搜索的起始目录是根目录。-perm
: 权限匹配选项,用于指定要搜索的文件权限。-u=s
: 表示要搜索的权限是用户的 SetUID 权限,即文件所有者的权限。-type f
: 指定要搜索的对象是文件(不包括目录)。2>/dev/null
: 将标准错误输出重定向到 /dev/null,这样可以忽略权限不足或找不到文件的错误信息。
可以看到/tmp/1就在其中
使用非root用户,运行1,发现cat /etc/shadow
运行成功,说明此时1运行时就是root权限,接下来就是提权的利用
提权的利用
已知的可以用来提权的linux可行性文件列表如下:
- Nmap
- Vim
- find
- Bash
- More
- Less
- Nano
- cp
find
就先拿find来说
先将find增加SUID权限,原本为755权限,现在改为4755,使用命令chmod 4755 /bin/find
当find文件拥有SUID权限时,通过find执行的所有命令都会以root权限执行如下:
使用非root用户执行命令:
1 | find 1 -exec whoami \; |
未拥有SUID权限时:
拥有SUID权限时:
vim
这次我们用另一种方式给vim命令赋予权限
1 | chmod u+s /usr/bin/vim |
依然可以用find / -perm -u=s -type f 2>/dev/null
来查看是否已经拥有SUID权限
这里是将vim复制为了.vim
此时切换非root用户时,使用.vim命令新建一个文件
1 | /usr/bin/.vim wbszs.txt |
然后使用ls -l wbszs.txt
查看权限
可以看到此时已经拥有了 root权限,因此可以使用修改后的vim对/etc/passwd或/etc/shadow等敏感文件进行修改