Yoga7xm's Blog

Metinfo6.13 两处XSS漏洞分析

字数统计: 623阅读时长: 2 min
2019/06/23 Share

前言

马上要考试了,然后就简单的分析下俩个XSS的洞,开始准备考试了…

XSS 1(前台存储型)

漏洞点在admin/login/login_check.php,同样可以利用上一处变量覆盖的点

关键在这个update子句中,将authcode()处理后的$turefile写入到数据库中字段为met_adminfile,跟进函数authcode()

用于进行加解密的函数,并没有对其内容进行检测、过滤。而该变量为数组$url_array[]倒数第二项。这里导入了admin/include/common.inc.php

这里对传入的COOKIE、POST、GET的参数进行过滤,然后赋值到全局变量$_M['form']中,完成变量覆盖,所以也就是完全可控的,直接构造Payload

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

然后在后台的安全与效率对应着app/system/ui_set/admin/index.class.phpIndex类的doindex()方法,而该类继承关系为:index>admin>common

跟进common类

加载了全部的配置数据,跟进load_config_global()

这里将数据库中取出的met_adminfile配置选项数据进行解密,然后赋给全局变量数组$_M['config']['met_adminfile']

回到doindex()中,

这里拼接的时候调用了$_M['config']['met_adminfile']变量,然后将url赋值给$localurl_admin,然后在最后面导入了模板文件app/system/safe/admin/templates/index.php

这里两处都未经任何编码过滤,直接输出了$localurl_admin,导致Payload执行

同样的最新版本的6.20中还未修复……

XSS 2(后台反射型)

这个漏洞有点苛刻,不仅需要登录后台管理,还需要一条数据库信息才能触发。

漏洞点在admin/column/move.php

最后只是对$foldername进行检测,而$metcms没有进行过滤直接输出,导致了漏洞的产生。

并且在admin/include/common.inc.php中,同样因为变量覆盖可以使得上述变量可控

所以只要$foldyanzheng不为0和$folder_m非空就能执行传入的JS语句。

1
$folder_m=$db->get_one("SELECT * FROM $met_column WHERE foldername='$foldername' and lang='$lang'");

$met_column默认为met_column,$lang为语言cn,只有$foldername未知。所以还需要一条数据信息,查询数据库可以拿到

构造语句

1
SELECT * FROM met_column WHERE foldername='member' and lang='cn'

最后Payload为

1
/admin/column/move.php?foldyanzheng=1&foldername=member&lang_columnerr4=<svg onload=alert(/test/)>

同样的最新版本的6.20中还未修复……

Reference

https://www.anquanke.com/post/id/173064

https://mp.weixin.qq.com/s/oxeLfLMcy4y0Oq6VY0lmiA

CATALOG
  1. 1. 前言
  2. 2. XSS 1(前台存储型)
  3. 3. XSS 2(后台反射型)
  4. 4. Reference