专栏首页网络攻防实战知识交流Metinfo 6.1.3 前台XSS漏洞分析 CVE-2018-20486

Metinfo 6.1.3 前台XSS漏洞分析 CVE-2018-20486

前言

最近一直在刷这个cms的漏洞,主要是为了让自己维持一点代码量,不至于生疏,好久没有都没有大块的时间做安全了,和自己的精力有关,也和自己的心态有关,不管怎样,还是要抽时间维持一下自己的爱好,日子不能过的太爽,分析别人已经发出来的CVE,同时也是给自己找点事情做。 每个CMS都有自己的传值的方式,tp5系列远程代码执行漏洞也是这样出来的,metinfo的漏洞主要和它的变量覆盖有关。 同时也说说自己的漏洞观点,没有一个系统是安全的,如果是,只不过漏洞还没有被挖掘出来。 和以前一样的节奏,如果只是想复现一下这个漏洞,直接看漏洞的利用方式,漏洞的细节不用看。 以下是历史版本和最新版本的下载地址:

     https://www.mituo.cn/faq/1519.html
     https://www.mituo.cn/download/

漏洞利用方式

这个漏洞的影响范围一直到最新版本(6.1.3) 可以直接前台访问,然后x到后台:

http://127.0.0.1/admin/login/login_check.php?url_array[]=123&url_array[]=123&url_array[]=aa%22+autofocus+onfocus=alert(2)+a=%0a%0ba=&url_array[]=123

管理登录后台,切换到“安全与效率”界面,XSS可自动触发。

漏洞分析

漏洞的触发点在 admin/login/login_check.php

同样的

<?php
# MetInfo Enterprise Content Management System 
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved. 
error_reporting(E_ERROR | E_WARNING | E_PARSE);
if($depth!=''&&$depth!='../'&&$depth!='../../'){die();}
if(!isset($depth))$depth='';
$commonpath=$depth.'include/common.inc.php';
$commonpath=$admin_index?$commonpath:'../'.$commonpath;
define('SQL_DETECT',);
require_once $commonpath;
if($depth!=''&&$depth!='../'&&$depth!='../../'){die();}
$turefile=$url_array[count($url_array)-2];
if($met_adminfile!=$turefile&&$adminmodify!=){
    $met_adminfile=$turefile;
    $turefile=authcode($turefile,'ENCODE',$met_webkeys);
    $query="update $met_config set value='$turefile' where name='met_adminfile' and lang='metinfo'";
    $db->query($query);
}

加载了 $commonpath=include/common.inc.php 同样 在如下的代码段里存在变量覆盖漏洞:

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

不再过多的分析;

接着往下看 我们可以控制url_array变量,从而控制turefile,进入如上的if语句,可以直接更改数据库数据

$_M 数组是一个包含了网站设置,系统调用等信息的总和数组,具体内容如下:

    $_M[config]:网站配置数组,里面可以查询到所有的网站配置数据。
    $_M[form]:提交的GET,POST,COOKIE表单数组。在系统中不要直接使用$_POST,$_GET,$_COOKIE,
        这些都是没有过滤的,$_M[form]中是已经安全过滤后的数组。
    $_M[langlist]:语言设置数组,其中$_M[langlist][web]为前台语言设置,
            $_M[langlist][admin]为后台语言设置。
    $_M[lang]:前台语言,如果你是在网站前台,则这个值是你当前访问的语言,
        如果是后台,则这个值是你当前编辑的语言。
    $_M[table]:系统表名称。
    $_M[url]:系统一些常用URL入口地址。
    $_M[url][site_admin] :网站后台地址
    $_M[url][site] :网站前台地址
    $_M[url][entrance] :框架入口地址
    $_M[url][own] :当前执行的应用根目录地址
    $_M[url][app] :应用根目录地址
    $_M[url][pub] :系统公用文件(html.css,js)地址
    $_M[url][ui] :当前class所使用的UI地址,前台为“系统ui根目录/web”;,
                    后台为“系统ui根目录/admin”。
    $_M[user][cookie]:用户cookie信息,建议不要直接取值,使用get_met_cookie()取值。
    $_M[word]:当前的语言参数。
    $_M[plugin]:系统插件数组。

app/system/include/class/common.class.php

$_M['config']['met_adminfile'] = authcode($_M['config']['met_adminfile'],'DECODE', $_M['config']['met_webkeys']);
        if ($_M['config']['met_adminfile'] == '') {
            $_M['config']['met_adminfile'] = 'admin';
            $met_adminfile = authcode($_M['config']['met_adminfile'],'ENCODE', $_M['config']['met_webkeys']);
            $query = "UPDATE {$_M['config']['tablepre']}config SET `value` = '$met_adminfile' where `name`='met_adminfile'";
            $result = DB::query($query);
        }

中可以看到,met_adminfile也就是我们可以控制的值存在于$_M['config']['met_adminfile'],所以只要全搜索$_M['config']['met_adminfile'],就可以可以找到我们了可以控制的点了:

app/system/safe/admin/templates/index.php 在这个文件中,可以发现,标签直接输出了,所以可以构造特殊的存储类型的xss。

XSS的构造方式有很多中,但是只要满足输出条件即可: $turefile=$url_array[count($url_array)-2]在倒数第二个值中输入我吗想要的值就可以了。

本文分享自微信公众号 - 无级安全(wujisec)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 建站教程:云服务器使用(完整版)

    (学生主机免认证链接)购买地址:https://cloud.tencent.com/redirect.php

  • 网站安全漏洞检测详情与修复方案

    Metinfo CMS系统被爆出网站存在漏洞,可上传任意文件到网站根目录下,从而使攻击者可以轻易的获取网站的webshell权限,对网站进行篡改与攻击,目前该网...

    技术分享达人
  • SEO外链建设形式有哪些?

    外链建设对于大连网站优化有着重要作用,一个优质的外链可以快速的提高网站的曝光度和转换率。那么,外链建设的形式有哪些呢?我们一起来学习一下吧!

    大金SEO
  • Jsoup+Htmlunit抓取图片遇到坑

    Jsoup是用于解析HTML,就类似XML解析器用于解析XML。 Jsoup它解析HTML成为真实世界的HTML。

    赵哥窟
  • 浅入深出Vue:工具准备之PostMan安装配置及Mock服务配置

    由于家中有事,文章没顾得上。在此说声抱歉,这是工具准备的最后一章。 接下来就是开始环境搭建了~尽情期待

    若羽
  • JS控制Video播放器(快进、后退、播放、暂停、音量大小)

    比如:向上键对应的keyCode为38,向下键对应的keyCode为40,向左键对应的keyCode为37,向右键对应的keyCode为39,空格键对应的key...

    用户1518699
  • 浅入深出Vue:路由

    路由的概念在计算机界中的历史大概可以追溯到OSI模型中的数据链路层与网络层中的定义。这里的定义大意是:在转发数据包时,根据数据包的目的地址进行寻址,从而将数据包...

    若羽
  • 16、web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS

    phantomjs 是一个基于js的webkit内核无头浏览器 也就是没有显示界面的浏览器,利用这个软件,可以获取到网址js加载的任何信息,也就是可以获取浏览器...

    天降攻城狮
  • 【一起来烧脑】读懂HTTP知识体系

    读懂HTTP很重要,参加过面试的小伙伴都很清楚,无论是技术面试面试题出得怎样,都有机会让你讲解一下HTTP,大部分都会问一下。

    达达前端
  • 一次CMS源码审计与漏洞发现

    最近一直在学习《[红日安全]代码审计》系列中关于php代码中存在的问题,从中受益匪浅。从中选取了一个DM企业建站的cms用作练习,在还原了练习中的漏洞后尝试对其...

    FB客服

扫码关注云+社区

领取腾讯云代金券