打怪升级之CmsEasy代码审计小记
字数 1414 2025-08-26 22:11:57

CmsEasy 7.3.8 代码审计教学文档

0x01 系统概述

CmsEasy 是一个企业建站管理系统,采用半开源模式(部分核心代码被加密混淆)。审计版本为 7.3.8(2019-12-30 发布),该系统存在多个安全问题。

0x02 漏洞分析

1. 任意文件操作漏洞

漏洞位置:模板编辑功能

漏洞描述
系统后台的模板编辑功能存在文件读取、写入和删除操作,由于缺乏足够的限制和过滤,导致任意文件操作。

漏洞细节

  1. 文件读取

    • 通过修改 id 参数可以读取任意文件
    • HTTP 请求中参数可控
  2. 文件删除

    • 接口函数经过加密混淆
    • 文件删除路径可控
  3. 文件写入

    • 同样存在路径可控问题

利用方法

  • 通过构造特定参数访问相关接口
  • 修改路径参数指向系统敏感文件

2. SQL 注入漏洞

漏洞位置
lib/admin/language_admin.php 中的 add_actionedit_action 函数

漏洞描述
虽然系统对 SQL 注入进行了转义和过滤,但过滤机制存在缺陷,可被绕过。

漏洞细节

  1. 过滤机制:

    • 过滤关键词:select*sleep
    • 过滤函数位于加密混淆的核心代码中
  2. 绕过方法:

    • 使用 benchmark 函数替代 sleep 进行基于时间的注入
    • 通过 fuzz 测试确定过滤黑名单并寻找绕过方法

利用方法

  • 构造特殊 SQL 语句绕过过滤
  • 使用替代函数实现注入效果

3. 本地文件包含漏洞

漏洞位置
lib/admin/language_admin.php 中的 edit_action 函数

漏洞描述
语言编辑功能对 include 的文件路径未做充分校验,可导致任意文件包含。

漏洞细节

  1. 参数来源:

    • $lang_choice 来自用户 GET 请求
    • $langurlname 来自数据库 langurlname 字段
    • 两者直接拼接形成 $path
  2. 绕过方法:

    • 不传递 submit POST 参数可绕过部分代码执行
    • 直接通过 include 包含任意文件
  3. 利用链:

    • 上传包含 PHP 代码的图片文件(系统允许上传)
    • 通过文件包含执行上传文件中的代码

利用方法

  1. 上传包含恶意代码的图片文件
  2. 通过文件包含漏洞包含该文件
  3. 实现远程代码执行

0x03 漏洞修复建议

  1. 任意文件操作

    • 严格限制文件操作目录
    • 对文件路径进行规范化处理
    • 增加权限校验
  2. SQL 注入

    • 使用参数化查询
    • 完善过滤机制
    • 避免依赖黑名单过滤
  3. 文件包含

    • 限制包含文件路径
    • 对包含文件进行白名单校验
    • 避免直接使用用户输入拼接路径

0x04 审计方法论

  1. 功能点审计

    • 重点关注文件操作、数据库操作等高危功能
    • 特别关注用户输入直接参与系统操作的点
  2. 加密代码处理

    • 对于混淆/加密代码,需要先进行解密或动态调试
    • 关注加密代码中的安全函数实现
  3. 自动化审计辅助

    • 使用污点分析追踪用户输入流向
    • 对高危函数调用进行标记
  4. 黑盒测试结合

    • 先进行黑盒测试发现可疑点
    • 再通过代码审计确认漏洞

0x05 总结

CmsEasy 7.3.8 版本存在多个高危漏洞,主要问题包括:

  • 用户输入未充分过滤
  • 加密代码可能隐藏安全问题
  • 功能实现缺乏足够的安全考虑

这些漏洞在后续版本(如 7.5.3)中已部分修复,但类似问题仍值得在代码审计中重点关注。

CmsEasy 7.3.8 代码审计教学文档 0x01 系统概述 CmsEasy 是一个企业建站管理系统,采用半开源模式(部分核心代码被加密混淆)。审计版本为 7.3.8(2019-12-30 发布),该系统存在多个安全问题。 0x02 漏洞分析 1. 任意文件操作漏洞 漏洞位置 :模板编辑功能 漏洞描述 : 系统后台的模板编辑功能存在文件读取、写入和删除操作,由于缺乏足够的限制和过滤,导致任意文件操作。 漏洞细节 : 文件读取 : 通过修改 id 参数可以读取任意文件 HTTP 请求中参数可控 文件删除 : 接口函数经过加密混淆 文件删除路径可控 文件写入 : 同样存在路径可控问题 利用方法 : 通过构造特定参数访问相关接口 修改路径参数指向系统敏感文件 2. SQL 注入漏洞 漏洞位置 : lib/admin/language_admin.php 中的 add_action 和 edit_action 函数 漏洞描述 : 虽然系统对 SQL 注入进行了转义和过滤,但过滤机制存在缺陷,可被绕过。 漏洞细节 : 过滤机制: 过滤关键词: select 、 * 、 sleep 等 过滤函数位于加密混淆的核心代码中 绕过方法: 使用 benchmark 函数替代 sleep 进行基于时间的注入 通过 fuzz 测试确定过滤黑名单并寻找绕过方法 利用方法 : 构造特殊 SQL 语句绕过过滤 使用替代函数实现注入效果 3. 本地文件包含漏洞 漏洞位置 : lib/admin/language_admin.php 中的 edit_action 函数 漏洞描述 : 语言编辑功能对 include 的文件路径未做充分校验,可导致任意文件包含。 漏洞细节 : 参数来源: $lang_choice 来自用户 GET 请求 $langurlname 来自数据库 langurlname 字段 两者直接拼接形成 $path 绕过方法: 不传递 submit POST 参数可绕过部分代码执行 直接通过 include 包含任意文件 利用链: 上传包含 PHP 代码的图片文件(系统允许上传) 通过文件包含执行上传文件中的代码 利用方法 : 上传包含恶意代码的图片文件 通过文件包含漏洞包含该文件 实现远程代码执行 0x03 漏洞修复建议 任意文件操作 : 严格限制文件操作目录 对文件路径进行规范化处理 增加权限校验 SQL 注入 : 使用参数化查询 完善过滤机制 避免依赖黑名单过滤 文件包含 : 限制包含文件路径 对包含文件进行白名单校验 避免直接使用用户输入拼接路径 0x04 审计方法论 功能点审计 : 重点关注文件操作、数据库操作等高危功能 特别关注用户输入直接参与系统操作的点 加密代码处理 : 对于混淆/加密代码,需要先进行解密或动态调试 关注加密代码中的安全函数实现 自动化审计辅助 : 使用污点分析追踪用户输入流向 对高危函数调用进行标记 黑盒测试结合 : 先进行黑盒测试发现可疑点 再通过代码审计确认漏洞 0x05 总结 CmsEasy 7.3.8 版本存在多个高危漏洞,主要问题包括: 用户输入未充分过滤 加密代码可能隐藏安全问题 功能实现缺乏足够的安全考虑 这些漏洞在后续版本(如 7.5.3)中已部分修复,但类似问题仍值得在代码审计中重点关注。