【漏洞预警】Metinfo新版本6.1.0存在多个漏洞
最近Metinfo v6.1.0曝出任意文件读取,XXE,敏感信息泄露三个危害比较严重的漏洞。任意文件读取可以读取服务器上敏感文件,比如数据库配置文件。XXE又称为xm l外部实体注入,可以探测内网,读取文件,执行命令等。敏感信息泄露会泄露服务器相关配置和应用的绝对路径。其上述漏洞在最新版本已经修复,可在官网下载最新版,链接见底部。
长沙米拓信息技术有限公司成立于 2009 年 3 月,是一家专注于「为中小企业提供信息化服务」的互联网企业。用户大部分位于中国。其中浙江数量4489(可能是阿里云),香港3296,北京1879,广东526,河南466。
目前FOFA看到的Metinfo全球分布情况如下(非漏洞影响范围):
目前FOFA看到的Metinfo全国分布情况如下(非漏洞影响范围):
漏洞原理与危害此次漏洞共有三处:
1、任意文件读取
2、XXE漏洞
3、敏感信息泄露
任意文件读取
漏洞存在于app/system/include/module/old_thumb.class.php文件中。下面是部分源码:
version=6.0.0漏洞源码
<?php
# MetInfo Enterprise Content Management System
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.
defined('IN_MET') or exit('No permission');
load::sys_class('web');
class old_thumb extends web{
public function doshow(){
global $_M;
$dir = str_replace('../', '', $_GET['dir']);
if(strstr(str_replace($_M['url']['site'], '', $dir), 'http')){
header("Content-type: image/jpeg");
ob_start();
readfile($dir);
ob_flush();
flush();
die;
}
6.0.0简要说下,这个绕过满足两个条件,1 - dir参数中有"http"字符串,2 - 把"../"替换成"..././"或者"....//"即可绕过。最后payload为:/member/index.php?a=doshow&m=include&c=old_thumb&dir=http/..././..././config/config_db.php
version=6.1.0漏洞源码
<?php
# MetInfo Enterprise Content Management System
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.
defined('IN_MET') or exit('No permission');
load::sys_class('web');
class old_thumb extends web{
public function doshow(){
global $_M;
$dir = str_replace(array('../','./'), '', $_GET['dir']);
if(substr(str_replace($_M['url']['site'], '', $dir),0,4) == 'http'){
header("Content-type: image/jpeg");
ob_start();
readfile($dir);
ob_flush();
flush();
die;
}
这是最新版本6.1.0的源码,看到"header("Content-type: image/jpeg");"这行代码猜测是预览图片的,通过flush缓存到浏览器。关键点在于 $dir = str_replace(array('../','./'), '', $_GET['dir']);这一步,把"../"和"./"替换为空,这里存在绕过,提交"./.../"可以得到".",根据这个思路可以跳过目录,最后payload为:/member/index.php?a=doshow&m=include&c=old_thumb&dir=http/./.../..././/./.../..././/config/config_db.php
自己搭环境测试结果:
建议:这里官方已经修复,在官网上面最新版6.1.0的源码已经删除掉"old_thumb.class.php"文件了,可以放心下载。
XXE漏洞
漏洞文件为"app/system/pay/web/pay.class.php",下面是源代码:
public function donotify() {
global $_M;
//=======【微信异步通知验证】==========================
$xm l = $GLOBALS['HTTP_RAW_POST_DATA'];
$array = json_decode(json_encode(simplexm l_load_string($xm l, 'Simplexm lElement', LIBxm l_NOCDATA)), true);
if($array && $array['out_trade_no']) {
$date = $this->GetOeder($array['out_trade_no']);
$this->doNotify_wxpay($date);
}
$out_trade_no = $_M['form']['out_trade_no'] ? : $_POST['orderId'];
if($_POST['remark1' ])
{
$out_trade_no = trim($_POST['remark1']);
}
if($out_trade_no) {
$date = $this->GetOeder($out_trade_no);
//=======【支付宝异步通知验证】==========================
if($date['pay_type'] === '3') {
$this->doNotify_alipay($date);
}
//=======【银联异步通知验证】==========================
if($date['pay_type'] === '4') {
$this->doNotify_unionpay($date);
}
//=======【财付通异步通知验证】==========================
if($date['pay_type'] === '2') {
$this->doNotify_tenpay($date);
}
//=======【网银在线异步通知验证】==========================
if($date['pay_type'] === '7') {
$this->doNotify_chinabank($date);
}
//=======【paypal支付验证】 by:rabbbbit 20171103===============
if($date['pay_type'] === '5') {
$this->doNotify_paypal($date);
}
}
}
漏洞在"$array = json_decode(json_encode(simplexm l_load_string($xm l, 'Simplexm lElement', LIBxm l_NOCDATA)), true);"这行代码中,没有禁用外部实体加载,这里利用weblog测试下:
可以看到,成功访问了我的外网服务器。
建议:这里官方已经修复,在官网上面最新版6.1.0的源码已经删除掉"pay.class.php"文件了,可以放心下载。
敏感信息泄露
漏洞位于"install/phpinfo.php"文件,访问ip/install/phpinfo.php可以查看phpinfo信息,会泄露系统信息,绝对路径等敏感数据,为攻击者入侵创造有利条件。以下是验证过程:
建议:删除install/phpinfo.php文件或者官网下载最新版。
任意文件读取和XXE漏洞存在于6.1.0版本,但是官网目前已经修复后版本仍为6.1.0,相关用户最好确认下使用的6.1.0是否存在漏洞。
漏洞POC
目前,文中提到的漏洞相关PoC,FOFA客户端目前以支持检测上述漏洞。
任意文件读取漏洞POC
XXE漏洞POC
信息泄露漏洞POC
CVE编号
无
修复建议
在官网上面最新版6.1.0的源码已经修复上述漏洞,可以到官网https://www.metinfo.cn放心下载。
更多安全文章可以关注链接:https://nosec.org