SUID(Set User ID)提权是一种利用系统中设置了 SUID 权限的文件来提升自身权限的技术。在 Linux 系统里,当一个文件被设置了 SUID 权限后,用户执行该文件时,会以文件所有者的身份来运行。例如,当普通用户运行一个设置了 SUID 权限且属主为 root 的文件时,该用户在执行过程中将临时获得 root 权限。
首先需要使用find命令去搜寻哪些命令具有SUID权限,直接一步到位,查找所有者为root的文件,同时匹配具有 SUID 权限的文件。
find / -user root -perm -u=s -type f 2>/dev/null
-user root:表示所有者为root
-u=s:限制匹配具有SUID的文件
-type f:表示只搜寻文件类型
2>/dev/null:文件描述符为2表示标准错误,把命令执行过程中产生的错误信息重定向到 /dev/null
,也就是将错误信息丢弃,不在终端屏幕上显示,避免产生的大量错误信息干扰查找结果。
Find提权
在执行find命令的过程中利用exec参数来指定其他的命令。为了实验,我们需要给find命令赋予SUID权限。在执行find命令过程中又执行whoami命令,因为在执行find命令过程中权限为root,所以会临时获得root权限。
chmod u+s /usr/bin/find
首先创建一个文档,因为使用find命令时,文档是必须存在的。
find 123.txt -exec whoami \;
使用find开启一个临时的shell,就可以使用root身份执行命令了
find 123.txt -exec /bin/sh -p \; -p是为了维持权限
cp提权
在执行cp复制文件命令时,就会是root权限,为了实验,也需要给cp命令赋予SUID权限。
chmod u+s /usr/bin/cp
我们知道/etc/passwd
是 Linux 系统中存储用户账户信息的核心配置文件,所有用户(包括系统用户和普通用户)的基本信息都存储在此。
我们使用cp命令,将/etc/passwd中的内容复制到一个新的文件中,在这个新文件中我们使用普通用户权限就可以进行修改,我们在里面新添加一个拥有root权限的用户,再把文件复制回去,我们就可以用新用户登录,这样就是root权限了。
cp /etc/passwd 123.txt
passwd文件的内容格式为
用户名:密码占位符:用户ID(UID):组ID(GID):注释信息:家目录:默认Shell
随后使用命令生成一个新用户的加密密码,再按照root用户的格式添加
首先使用openssl生成一个随机盐(salt)
openssl rand -base64 16 生成一个长度为 16 字节的随机盐值,并以 Base64 编码输出
再使用salt生成加密后的密码
openssl passwd -6 -salt OkSMPVA/N5ozKrYmGAnIfQ== test (test为密码)
-6
表示使用 SHA-512 算法
有了加密后的密码,我们在复制出的123.txt文本文件中新增用户,按照root的格式新增。
再把123.txt文件中的内容复制回/etc/passwd文件中
cp 123.txt /etc/passwd
最后提权成功
ftp提权
和之前一样的,为了实验,也需给ftp命令赋予SUID权限
提权成功