Windy's little blog

一切生活中的杂七杂八, and I like CTF.

HackMyVm靶机Winter的Walkthrough(vhost enum,RCE, LFI)

    (靶机概要:vhost扫描,远程命令执行漏洞的利用,利用本地文件包含得到shell)

    靶机下载地址https://hackmyvm.eu/machines/machine.php?vm=Winter。

    加载运行后,扫描端口,发现开了22和80。

图片.png

   

    打开主页就是一个静态网页。扫描目录后发现许多文件。

    图片.png

    经过一番注册用户、登录、搜索,并没有发现什么漏洞可以利用。打开fileinfo.txt,发现提示靶机域名为winter,于是在/etc/hosts里加上域名。

    图片.png

   

    由于找不到可以攻击的漏洞,下面尝试扫描vhost。果然,发现2个域名。

    图片.png

   

    将manager.winter和cmd.winter两个域名加入/etc/hosts,然后首先访问manager.winter,访问后还是静态网页。扫描目录可以得到如下信息。

图片.png


    访问login.php可以来到一个登录页面,但目前也进不去。

图片.png


    接下来看cmd.winter。扫描目录发现一个shellcity.php,看这个名字就有戏。

图片.png

    访问shellcity.php,来到一个发送信息的界面。

图片.png


    随便输入一些内容后发送,会有javascript的alert弹出已发送的内容。同时,提示“存在RCE漏洞”。

图片.png


    这里有一个坑,就是如果在Message中输入部分bash命令,是可以返回结果的。比如,输入id,结果如下。

图片.png


    难道RCE就是这个Message输入框?经过测试,它只能执行id、whoami、pwd三个命令,其它都运行不了。这样也没法利用。(其实,这是作者故意挖的坑,后面看到源代码就清楚了。)

    那这个RCE漏洞肯定是以参数的方式传递进去的,接下来的关键步骤是搞到参数名。burp抓包后,发送到intruder,手动添加一个参数,并设为攻击点,攻击方式就是sniper。

图片.png

    payload选择burp自带的"Server-side variable names“。


图片.png


    攻击后成功得到参数名为run。

图片.png


   下面,在本机监听1234端口,在靶机执行反弹shell的命令。


图片.png


    运行后成功得到shell。


图片.png

    在/var/www目录里,有cmd、html、manager三个文件夹,分别对应刚才的三个vhost。


图片.png

    进入cmd目录夹,查看shellcity.php的源代码,对刚才页面的执行内容就一清二楚了。

图片.png


    接下来开始查找各种提权方法。来到home目录,发现catchme用户目录,但目前进不去。查看hint.txt的内容,一句没用的话。


图片.png


    上传LinEnum脚本后,可以看到本机开了3306和1336端口,且外部无法访问。



图片.png


    3306是mysql的端口,可以找到用户名和密码,但进入搜索后没有什么有用的信息。接下来,上传socat到靶机,并将1336端口转发到1337端口上。


图片.png


    从外部访问后又是一个静态网页。扫描目录可以发现snowman.php。打开以后又来到一个类似的发送信息的窗口,同样还是提示包含RCE漏洞。


图片.png


    运用刚才攻击shellcity.php的方法,尝试了很多遍,都没有找到可以利用的漏洞。

    这时,sudo -l看一下权限,可以以catchme用户的身份执行hexdump。

    图片.png


    hexdump只能用来查看文件内容,不能写文件或运行命令。我们运行如下程序来查看snowman.php文件的内容。

sudo -u catchme /usr/bin/hexdump -C /opt/customer/snowman.php

    在文件的最后发现玄机。

图片.png


    将这个dump文件转化为php文件,看到更清楚一些。根据代码,这里网页访问要用POST方法,至少要包含sub参数,然后取得GET方法的参数exec,这个是文件名,然后由include包含进来。

图片.png


    接下来的思路很清楚了,就是建立一个php文件,里面是shell代码,然后传递给exec参数,让网页执行。因此,新建r.php文件,里面是nc连接的代码。

图片.png


    但是这个r.php文件放的位置有讲究,一开始放在/tmp目录下,怎么都无法运行。于是将其放在/var/www/html/upload文件夹下。然后用burp执行,注意POST方法,但要传递GET类型的参数。


图片.png

    本机监听的2234端口果然得到了shell,而且是root权限。可以取得flag了。

图片.png


    最后,我觉得靶机配置有一些错误。因为在运行pspy浏览信息时,发现靶机每隔一段时间会运行/home/catchme/read.py文件,这个没有利用上。按通常思路,应该先是由www-data转为catchme用户,再提权为root用户。

图片.png

  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.0