接上文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

image-20230323215718909

image-20230323221433451

使用命令gcc test.c -o 1编译一下,编译为文件1

image-20230323215817143

设置文件的suid,注意这里要执行用户需要拥有运行权限,也就是其他用户权限要有x

1
2
ls -la //查看文件权限
chmod 4775 1//4给文件1增添suid

再次查看文件权限发现文件名已经变红了

image-20230323220030036

可以使用以下命令查看具有SUID权限的文件

1
find / -perm -u=s -type f 2>/dev/null
  • find: 在文件系统中查找文件和目录。
  • /: 搜索的起始目录是根目录。
  • -perm: 权限匹配选项,用于指定要搜索的文件权限。
  • -u=s: 表示要搜索的权限是用户的 SetUID 权限,即文件所有者的权限。
  • -type f: 指定要搜索的对象是文件(不包括目录)。
  • 2>/dev/null: 将标准错误输出重定向到 /dev/null,这样可以忽略权限不足或找不到文件的错误信息。

image-20230323220653196

可以看到/tmp/1就在其中

image-20230323220708357

使用非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

image-20230323232843890

当find文件拥有SUID权限时,通过find执行的所有命令都会以root权限执行如下:

使用非root用户执行命令:

1
find 1 -exec whoami \;

未拥有SUID权限时:

image-20230323233811760

拥有SUID权限时:

image-20230323233647653

vim

这次我们用另一种方式给vim命令赋予权限

1
chmod u+s /usr/bin/vim 

依然可以用find / -perm -u=s -type f 2>/dev/null来查看是否已经拥有SUID权限

这里是将vim复制为了.vim

image-20240507105836401

此时切换非root用户时,使用.vim命令新建一个文件

1
/usr/bin/.vim wbszs.txt

然后使用ls -l wbszs.txt 查看权限

image-20240507111829692

可以看到此时已经拥有了 root权限,因此可以使用修改后的vim对/etc/passwd或/etc/shadow等敏感文件进行修改