打怪升级之CmsEasy代码审计小记
字数 1414 2025-08-26 22:11:57
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
-
绕过方法:
- 不传递
submitPOST 参数可绕过部分代码执行 - 直接通过
include包含任意文件
- 不传递
-
利用链:
- 上传包含 PHP 代码的图片文件(系统允许上传)
- 通过文件包含执行上传文件中的代码
利用方法:
- 上传包含恶意代码的图片文件
- 通过文件包含漏洞包含该文件
- 实现远程代码执行
0x03 漏洞修复建议
-
任意文件操作:
- 严格限制文件操作目录
- 对文件路径进行规范化处理
- 增加权限校验
-
SQL 注入:
- 使用参数化查询
- 完善过滤机制
- 避免依赖黑名单过滤
-
文件包含:
- 限制包含文件路径
- 对包含文件进行白名单校验
- 避免直接使用用户输入拼接路径
0x04 审计方法论
-
功能点审计:
- 重点关注文件操作、数据库操作等高危功能
- 特别关注用户输入直接参与系统操作的点
-
加密代码处理:
- 对于混淆/加密代码,需要先进行解密或动态调试
- 关注加密代码中的安全函数实现
-
自动化审计辅助:
- 使用污点分析追踪用户输入流向
- 对高危函数调用进行标记
-
黑盒测试结合:
- 先进行黑盒测试发现可疑点
- 再通过代码审计确认漏洞
0x05 总结
CmsEasy 7.3.8 版本存在多个高危漏洞,主要问题包括:
- 用户输入未充分过滤
- 加密代码可能隐藏安全问题
- 功能实现缺乏足够的安全考虑
这些漏洞在后续版本(如 7.5.3)中已部分修复,但类似问题仍值得在代码审计中重点关注。