Metinfo 6.x存储型XSS分析(CVE-2018-20486)

栏目: 编程工具 · 发布时间: 5年前

内容简介:MetInfo采用PHP+MySQL架构,目前最新版本为6.1.3。2018年12月27日,Metinfo被爆出存在存储型跨站脚本漏洞,远程攻击者无需登录可插入恶意代码,管理员在后台管理时即可触发。该XSS漏洞引起的原因是变量覆盖,这种情况还是比较少见的,因此打算对这个漏洞进行分析并学习一下思路。Metinfo 6.x (6.0.0-6.1.3)

Metinfo 6.x存储型XSS分析(CVE-2018-20486)

0x01 前言

MetInfo采用PHP+MySQL架构,目前最新版本为6.1.3。2018年12月27日,Metinfo被爆出存在存储型跨站脚本漏洞,远程攻击者无需登录可插入恶意代码,管理员在后台管理时即可触发。该XSS漏洞引起的原因是变量覆盖,这种情况还是比较少见的,因此打算对这个漏洞进行分析并学习一下思路。

0x02 影响范围及利用条件

Metinfo 6.x (6.0.0-6.1.3)

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

0x03 漏洞分析

我们以官方最新版6.1.3为例进行分析。漏洞点位于/admin/login/login_check.php 12行,$url_array数组中某个元素被赋值给$turefile,经过条件判断后赋值给$met_adminfile,随后经过authcode方法加密后再赋值给$truefile。最后执行update SQL操作,将之前加密后的字符串插入数据库。

Metinfo 6.x存储型XSS分析(CVE-2018-20486)

再跟踪$url_array如何输入的,代码第7行包含了/admin/include/common.inc.php,跟进common.inc.php。在代码第10行发现变量$url_array被赋值,这里利用Xdebug打下断点,发现$url_array是以后台绝对路径分割而成的数组,而后台路径是安装时就确定的。

Metinfo 6.x存储型XSS分析(CVE-2018-20486)

那漏洞是如何产生的呢?继续看commin.inc.php,在代码77-82行,这是一个典型的对输入参数名进行变量注册的循环,并且是在$url_array赋值之后,存在变量覆盖漏洞。这里继续打下断点,访问下面的path

/admin/login/login_check.php?url_array[]=inject here&url_array[]=a

可以看到$url_array的值已经被覆盖并且可任意控制。

Metinfo 6.x存储型XSS分析(CVE-2018-20486)

再返回login_check.php,$url_array的值可被插入到$met_config表中,$met_config可由commin.inc.php的90-93行进行变量注册,这里$met_config被赋值为met_config。

接下来看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,index类继承了admin类,并在构造函数 __construct 中执行了父类admin的构造函数。

Metinfo 6.x存储型XSS分析(CVE-2018-20486)

继续跟进到/app/system/include/class/admin.class.php中,发现admin类继承了common类,同样在构造函数中执行了父类的构造函数。

Metinfo 6.x存储型XSS分析(CVE-2018-20486)

跟进到/app/system/include/class/common.class.php,common类的构造函数执行了load_confg_global方法加载全站配置数据。

Metinfo 6.x存储型XSS分析(CVE-2018-20486)

load_config_global方法在128行,调用load_config方法,执行 SQL 语句从met_config表查询出所有数据,并将其放在全局变量$_M[‘config’]中。

Metinfo 6.x存储型XSS分析(CVE-2018-20486)

因此可知,我们之前插入的XSS代码被放在 $_M['config']['met_adminfile'] 中,此时还处于加密的状态;load_config_global方法中代码120行,调用了authcode方法解密了 $_M['config']['met_adminfile']

Metinfo 6.x存储型XSS分析(CVE-2018-20486)

此时返回 /app/system/safe/admin/index.clss.php ,解密后的XSS payload进入$localurl_admin。

Metinfo 6.x存储型XSS分析(CVE-2018-20486)

index.class.php中代码39行,包含了模板/app/system/safe/admin/templates/index.php,跟进到index.php,在66行未过滤直接输出了$localurl_admin,最终导致了XSS。

Metinfo 6.x存储型XSS分析(CVE-2018-20486)

测试漏洞的POC为

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

管理员打开后台安全-安全与效率,直接触发

Metinfo 6.x存储型XSS分析(CVE-2018-20486)

0x04 修复方案

  1. 2019年1月2日,官方在 论坛 中确认了该漏洞,并准备在下一个小版本中修复
  2. 暂时缓解措施,修改/admin/include/common.inc.php,在82行变量注册之后插入

    $url_array=explode($DS,ROOTPATH_ADMIN);

    防止$url_array变量被覆盖。

参考链接:

https://www.anquanke.com/vul/id/1449669

https://github.com/Ppsoft1990/Metinfo6.1.3/issues/2


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

用户故事地图

用户故事地图

Jeff Patton / 李涛、向振东 / 清华大学出版社 / 2016-4-1 / 59.00元

用户故事地图作为一种有效的需求工具,越来越广泛地应用于开发实践中。本书以用户故事地图为主题,强调以合作沟通的方式来全面理解用户需求,涉及的主题包括怎么以故事地图的方式来讲用户需求,如何分解和优化需求,如果通过团队协同工作的方式来积极吸取经验教训,从中洞察用户的需求,开发真正有价值的、小而美的产品和服务。本书适合产品经理、用户体验设计师、产品负责人、业务分析师、IT项目经理、敏捷教练和精益教练阅读和......一起来看看 《用户故事地图》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试