(靶机概要:vhost扫描,远程命令执行漏洞的利用,利用本地文件包含得到shell)
靶机下载地址https://hackmyvm.eu/machines/machine.php?vm=Winter。
加载运行后,扫描端口,发现开了22和80。
打开主页就是一个静态网页。扫描目录后发现许多文件。
经过一番注册用户、登录、搜索,并没有发现什么漏洞可以利用。打开fileinfo.txt,发现提示靶机域名为winter,于是在/etc/hosts里加上域名。
由于找不到可以攻击的漏洞,下面尝试扫描vhost。果然,发现2个域名。
将manager.winter和cmd.winter两个域名加入/etc/hosts,然后首先访问manager.winter,访问后还是静态网页。扫描目录可以得到如下信息。
访问login.php可以来到一个登录页面,但目前也进不去。
接下来看cmd.winter。扫描目录发现一个shellcity.php,看这个名字就有戏。
访问shellcity.php,来到一个发送信息的界面。
随便输入一些内容后发送,会有javascript的alert弹出已发送的内容。同时,提示“存在RCE漏洞”。
这里有一个坑,就是如果在Message中输入部分bash命令,是可以返回结果的。比如,输入id,结果如下。
难道RCE就是这个Message输入框?经过测试,它只能执行id、whoami、pwd三个命令,其它都运行不了。这样也没法利用。(其实,这是作者故意挖的坑,后面看到源代码就清楚了。)
那这个RCE漏洞肯定是以参数的方式传递进去的,接下来的关键步骤是搞到参数名。burp抓包后,发送到intruder,手动添加一个参数,并设为攻击点,攻击方式就是sniper。
payload选择burp自带的"Server-side variable names“。
攻击后成功得到参数名为run。
下面,在本机监听1234端口,在靶机执行反弹shell的命令。
运行后成功得到shell。
在/var/www目录里,有cmd、html、manager三个文件夹,分别对应刚才的三个vhost。
进入cmd目录夹,查看shellcity.php的源代码,对刚才页面的执行内容就一清二楚了。
接下来开始查找各种提权方法。来到home目录,发现catchme用户目录,但目前进不去。查看hint.txt的内容,一句没用的话。
上传LinEnum脚本后,可以看到本机开了3306和1336端口,且外部无法访问。
3306是mysql的端口,可以找到用户名和密码,但进入搜索后没有什么有用的信息。接下来,上传socat到靶机,并将1336端口转发到1337端口上。
从外部访问后又是一个静态网页。扫描目录可以发现snowman.php。打开以后又来到一个类似的发送信息的窗口,同样还是提示包含RCE漏洞。
运用刚才攻击shellcity.php的方法,尝试了很多遍,都没有找到可以利用的漏洞。
这时,sudo -l看一下权限,可以以catchme用户的身份执行hexdump。
hexdump只能用来查看文件内容,不能写文件或运行命令。我们运行如下程序来查看snowman.php文件的内容。
sudo -u catchme /usr/bin/hexdump -C /opt/customer/snowman.php
在文件的最后发现玄机。
将这个dump文件转化为php文件,看到更清楚一些。根据代码,这里网页访问要用POST方法,至少要包含sub参数,然后取得GET方法的参数exec,这个是文件名,然后由include包含进来。
接下来的思路很清楚了,就是建立一个php文件,里面是shell代码,然后传递给exec参数,让网页执行。因此,新建r.php文件,里面是nc连接的代码。
但是这个r.php文件放的位置有讲究,一开始放在/tmp目录下,怎么都无法运行。于是将其放在/var/www/html/upload文件夹下。然后用burp执行,注意POST方法,但要传递GET类型的参数。
本机监听的2234端口果然得到了shell,而且是root权限。可以取得flag了。
最后,我觉得靶机配置有一些错误。因为在运行pspy浏览信息时,发现靶机每隔一段时间会运行/home/catchme/read.py文件,这个没有利用上。按通常思路,应该先是由www-data转为catchme用户,再提权为root用户。