MCMS代码安全审计小记
字数 1657 2025-08-29 22:41:10
MCMS代码安全审计教学文档
1. 系统概述
MCMS是一款基于SpringBoot 2架构的内容管理系统,主要用于管理和监控计算机网络中的各种设备和资源,提供网络拓扑图、设备状态、流量监控、安全性管理等功能。
2. 依赖组件分析
2.1 FastJson 1.2.78
- 项目中引入了Fastjson 1.2.78版本
- 存在JSON.parseObject进行json解析的代码
- 主要风险点:
ms-basic-2.1.13.jar中存在JSON反序列化点- 通过编辑器接口可能触发反序列化漏洞
2.2 Shiro 1.8.0
- 使用了shiro-core 1.8.0
- 发现硬编码的shiro-key
- 登录认证流程:
- 使用Shiro进行身份认证
- 支持rememberMe功能
- 漏洞利用:
- 存在Shiro反序列化命令执行漏洞
- 可利用工具直接进行漏洞复现
2.3 Freemarker 2.3.31
- 使用Freemarker模板解析引擎
- 主要风险点:
CmsParserUtil.java中的模板解析功能MCmsAction.java中的动态页面生成功能
- 漏洞利用路径:
- 后台"系统设置"→"模板管理"可编辑模板文件
- 在模板中插入恶意Freemarker载荷
- 通过"内容管理-静态化"生成主页触发载荷
- 或通过自定义页面功能选择恶意模板触发
3. SQL注入漏洞分析
3.1 漏洞点定位
- 全局搜索
${定位到3处潜在注入点 - 主要风险点:
queryIdsByCategoryIdForParser方法中的order参数拼接queryBySQL方法中的orderBy参数
3.2 利用分析
/queryData接口存在SQL注入风险- 注入点特征:
- orderBy参数可控
- 仅检查是否包含空格(可通过内联注释绕过)
- 利用方式:
POST /queryData orderBy=id/**/desc--
4. 文件上传漏洞分析
4.1 上传功能实现
- 统一上传方法位于
BaseFileAction.java - 过滤机制:
- 黑名单过滤jsp和exe文件
- 检查文件后缀
- 过滤路径中的
../和..\
4.2 利用限制
- 配置文件额外限制了上传文件类型
- 可能的绕过方式:
- 上传jspx文件(但实际测试仍被拦截)
- 上传html文件构造XSS(仅限后台self-xss)
4.3 模板上传利用
- 通过
uploadTemplate上传模板文件 - 可上传包含恶意Freemarker载荷的htm文件
- 结合模板注入漏洞实现命令执行
5. 文件下载漏洞分析
- 下载功能限制:
- 检查
../和..\ - 只能读取WEB-INF目录下的文件
- 检查
- 无法实现任意文件读取
6. 其他潜在风险
- SnakeYaml组件存在但未发现直接调用点
- 解压文件(zipslip)等漏洞未发现明显利用点
7. 审计方法论总结
-
依赖组件分析:
- 检查pom.xml和实际引入的第三方库
- 关注已知漏洞组件的版本
-
漏洞模式识别:
- Fastjson:搜索
JSON.parseObject - Shiro:检查密钥硬编码和rememberMe功能
- Freemarker:搜索
template.process - SQL注入:搜索
${和拼接SQL语句
- Fastjson:搜索
-
调用链追踪:
- 从漏洞点向上追溯调用链
- 检查参数是否可控
- 验证过滤机制是否可绕过
-
功能交互分析:
- 结合后台功能验证漏洞可利用性
- 如模板编辑+静态化功能组合利用
-
黑盒验证:
- 对审计发现的漏洞点进行实际测试
- 验证过滤机制的实际效果
8. 修复建议
-
Fastjson:
- 升级到最新安全版本
- 使用安全模式或添加过滤
-
Shiro:
- 升级到最新版本
- 使用随机生成的密钥
-
Freemarker:
- 对模板内容进行严格过滤
- 限制模板编辑权限
-
SQL注入:
- 使用预编译语句
- 加强orderBy参数过滤
-
文件上传:
- 使用白名单机制
- 限制上传文件执行权限
-
配置文件:
- 移除硬编码的敏感信息
- 加强权限控制
通过全面审计MCMS系统,我们发现其存在多处高危漏洞,建议开发者参考上述修复建议进行安全加固。