文章目录
一、简述👋
-
漏洞描述
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/
去,避免暴露根目录
三、漏洞复现👋
直接在empirecms/e/admin
下打开管理后台
在爆破或账号密码进入后台后(默认账号密码为admin/123456)
依次点开系统,打开管理数据表,选择导入系统模型
新建shell.php.mod文件并上传,文件内容如下:
file_put_contents("1shell.php",<?php phpinfo();?>);
在导入文件后
生成的1shell.php
文件在/admin目录
下,即可访问empirecms/e/admin/shell.php
5、同时,如果为了连接蚁剑等,注意$符号
需要转义
file_put_contents("getshell.php","");?>
四、原理分析👋
下载安装文件分析,在/e/admin/ecmsmod.php
文件下的导入模型
而进入到LoadlnMod函数,来到/e/class/moddofun.php
- 标注第一点,判断上传文件类型,文件后缀只能是
.mod
- 标注第二点,上传文件处使用time().make_password(10)进行文件名加密,同时拼接
.php
作为文件名 - 标注第三点,用
include
进行一次包含,执行上传的PHP代码,即可以通过创建文件的代码绕过
因为一开始的导入模型文件是在/e/admin
目录下,所以创建的shell.php
在/admin
目录下
来源地址:https://blog.csdn.net/m0_55793759/article/details/126711655