CVE-2018-20486漏洞是针对于Metinfo cms的存储型xss,可以绕过登录验证,直接拿到管理员cooike的高危漏洞。学习下漏洞挖掘、漏洞利用思路。
一、利用条件
Metinfo 6.x (6.0.0-6.1.3)
无需登录,知晓后台登陆地址。
二、漏洞还原环境
1、docker(推荐,根据配置文件和命令,docker就可以自动搭建我们所需要的任何系统环境了,还是比较方便的)
2、虚拟机
三、漏洞剖析
这里我们选择最新的Metinfo6.1.3进行漏洞还原。
漏洞位于admin/login/login_check.php第12行。
将url_array数组的一部分赋值给turefile,turefile经过authcode加密插入数据库。
在common.inc.php第10行中,url_array是本地文件的绝对路径赋值
这里也没问题,那漏洞出现在哪呢?
我们看common.inc.php中77-82行,这是对传入的cookie、post和get方法的参数进行可变变量进行注册的过程。这里的url_array[]已经赋值,如果我们构造url_array[]的内容以get的方法上传至服务器会有什么效果呢?
/admin/login/login_check.php?url_array[]=inject here&url_array[]=a
可见,url_array的内容已经被修改成功。而turefile同样被修改,最终被存储在数据库,存在存储型xss漏洞!
四、漏洞利用
xss激活点在哪里?
位于/app/system/safe/admin/index.clss.php 的doindex方法中,此方法对应着后台的【安全-安全与效率】操作。继承类的关系index <- admin <- common,common中load_config_global()接口加载全站配置数据。将数据库所有的信息加载在$_M变量。如图:
_M['config']['met_adminfile']解密,此时返回/app/system/safe/admin/index.clss.php,解密后的XSS payload进入$localurl_admin。
index.class.php中代码39行,包含了模板/app/system/safe/admin/templates/index.php,跟进到index.php,在66行未过滤直接输出了$localurl_admin,最终导致了XSS。
五、测试poc
http://127.0.0.1/MetInfo6_1_3/admin/login/login_check.php?url_array[]=<script>alert(1)</script>&url_array[]=a
打开【效率与安全】直接触发.
六、攻击测试
我们使用xss平台的恶意代码,以短链接的形式植入url_array,管理员点击,即获取管理员cookie。