安全-EmpireCMS 小于等于7.5版本后台XSS漏洞复现

Posted 小狐狸FM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全-EmpireCMS 小于等于7.5版本后台XSS漏洞复现相关的知识,希望对你有一定的参考价值。

前言

安装配置的步骤略过,文章仅学习交流,请勿用于非法用途
此漏洞需要有后台的权限才可利用

EmpireCMS历史版本下载

一、环境

环境版本
操作系统win 10
php5.2.17
mysql5.7.26
ftp0.9.60
apache2.4.39
EmpireCMS7.2

网站根路径,upload的名称被我改为了empire

二、漏洞复现

开启服务

管理员登录

成功登录之后,index.php会有一个参数作为key,参数名字和参数的值都是随机的
参数格式:ehash_XXXX

然后构造payload进行xss注入,后面使用一个&符号接登录时候的参数

http://127.0.0.1/empire/e/admin/openpage/AdminPage.php?mainfile=javascript:alert(/xss/)&ehash_Z63h=3m6ls0xGLuKPr6KQrsnL

成功弹窗

如果没有使用参数,可能会报错

三、源码审计

[1]. 漏洞点

使用Seay进行审计,查看/e/admin/openpage/AdminPage.php文件
存在漏洞点的是$mainfile参数

在第20行接收了来自用户的GET型参数mainfile
并使用一个函数hRePostStr将获取的参数mainfile处理,赋值给一个变量$mainfile

[2]. hRepPostStr函数

hRepPostStr不是内置函数,需要在代码中查询,可以使用phpstorm快速定位函数
hRepPostStr函数位于/e/class/connect.php

  • hRepPostStr内调用的三个函数也是自定义的
  • hRepPostStr的算法思路如下:
    判断传入的$ecms是否为1,为1就调用ehtmlspecialchars$val处理
    CkPostStrChar判断是否需要结束php程序
    AddAddsData用于添加转义符\\

[3]. ehtmlspecialchars函数

  • ehtmlspecialchars函数的功能是调用htmlspecialchars内置函数对$val进行HTML实体编码
    此时传入htmlspecialchars内置函数的$flags值是ENT_COMPAT,只会转换双引号
    如果此时$val存在单引号且调用$val是使用的单引号,就可以实现单引号的闭合
  • PHP: htmlspecialchars - Manual


[4]. CkPostStrChar函数

[5]. AddAddsData函数

  • AddAddsData函数中先判断了一下MAGIC_QUOTES_GPC变量值是否为false
    false时就进入if语句,调用addslashes函数对$data转义
  • PHP: addslashes - Manual

[6]. MAGIC_QUOTES_GPC变量

  • MAGIC_QUOTES_GPC被定义在第6行,通过get_magic_quotes_gpc函数获取当前magic_quotes_gpc 的配置选项
    magic_quotes_gpcphp.ini中值为onoff,而get_magic_quotes_gpc()MAGIC_QUOTES_GPC的值为truefalse
  • PHP: get_magic_quotes_gpc - Manual

[7]. 变量判空

使用empty对变量判空,如果我们没有对$mainfile传参,则他的值就会变为main.php

[8]. 变量调用

83行处,将传入的$mainfile使用<?=变量?>进行了输出
<?=变量?>相当于<?php echo 变量;?>

[9]. 绕过分析

  • mainfile=javascript:alert(233)里面没有单引号、双引号、反斜线和NULL,所以不会被addslashes()htmlspecialchars()函数转义
  • htmlspecialchars()flags选项设置成了ENT_COMPAT会转换双引号,不转换单引号
    但是最终调用mainfile变量时前后都是使用双引号括起来的,所以使用单引号同样无法闭合绕过

四、修复

  • 将EmpireCMS的版本升级到最新
  • 先对mainfile传入的参数进行全小写,然后过滤javascript

xss失败

以上是关于安全-EmpireCMS 小于等于7.5版本后台XSS漏洞复现的主要内容,如果未能解决你的问题,请参考以下文章

CNVD-2018-19126 EmpireCMS后台任意代码执行可GetShell

帝国CMS(EmpireCMS) v7.5后台getshell分析(CVE-2018-18086)

安全-emlog 小于等于5.1.2版本 博客系统后台权限提升漏洞复现(i春秋)

安全-Wordpress 小于等于4.6.1版本任意代码执行漏洞复现(i春秋)

帝国CMS 如何查看版本

[求助]EmpireCMS一键安装的问题,请指教,谢谢!