一, 漏洞描述
EmpireCMS7.5 及之前版本中的 admindbDoSql.PHP 文件存在代码注入漏洞. 该漏洞源于外部输入数据构造代码段的过程中, 网路系统或产品未正确过滤其中的特殊元素. 攻击者可利用该漏洞生成非法的代码段, 修改网络系统或组件的预期的执行控制流.
二, 影响版本
EmpireCMS<=7.5
三, 环境搭建
1, 官方下载 EmpireCMS V7.5 下载地址: http://www.phome.net/download/
2, 把下载的文件中的 upload 下的所有目录和文件放入到网站根目录下
3, 修改 PHP.INI 配置文件, PHP 环境中必须开启短标签, 不然安装会提示无法安装
4, 设置 PHP.INI 中 short_open_tag = On, 重启 phpstudy
5, 然后开始安装, 安装过程参考: https://jingyan.baidu.com/article/48b37f8dcc014b1a6564887c.html
四, 漏洞复现
1, 漏洞出现的页面如下
2, 分析源码定位漏洞出现的位置在 / e/admin/db/DoSql.PHP, 浏览代码, 对 sqltext 使用 RepSqlTbpre 函数进行处理
3, 跟进 RepSqlTbpre 函数, 发现仅仅对表的前缀做替换, 没有做其他任何处理
4, 继续浏览代码, 发现对 $query 使用 DoRunQuery 函数进行处理
5, 跟进 DoRunQuery 函数, 可以看到对 $sql 参数只做了去除空格, 以 ";" 分隔然后遍历, 并你没有做别的限制和过滤, 导致可以执行恶意的 sql 语句
6, 登录后台, 点击如下, 输入一段写 shell 的 payload,payload 内容如下:
select '<?php @eval($_POST[1])?>' into outfile 'C:/phpStudy/WWW/empirecms/shell.php'
7, 点击 "执行 SQL", 提示错误, 是由于 MySQL 安全限制的原因
8, 修改 MySQL 的配置文件, 在 [mysqld] 下添加条目: secure_file_priv =, 保存之后, 然后重启 MySQL
9, 再次执行 SQL 语句, 可以看到成功执行 SQL 语句
10, 查看是否成功上传 shell
11, 菜刀连接, 成功 getshell
-------------------------------------------------------------------------------------------------------------
参考: http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=CNNVD-201906-306
https://github.com/novysodope/empireCMS7.5/blob/master/getshell
来源: https://www.cnblogs.com/yuzly/p/11353929.html