MCMS全面审计
字数 2096 2025-08-23 18:31:34
MCMS 5.2.8 全面安全审计报告
1. 系统概述
MCMS 是一个完整的开源 Java CMS 系统,基于 SpringBoot 2 架构,前端使用 Vue 和 Element UI。系统提供上百套免费模板和多种插件(文章、商城、微信、论坛、会员等)。
2. 环境搭建
- 官方源码:https://gitee.com/mingSoft/MCMS
- 数据库准备:
- 修改数据库名称
- 导入 doc/mcms-5.2.8.sql 文件
- 运行配置:
- 修改 application.yml 中的端口(默认8000)
- 运行 MSApplication.java 的 main 方法
- 访问地址:
- 登录页面:http://localhost:8000/ms/login.do
- 默认凭证:msopen/msopen
3. 漏洞分析
3.1 反射型XSS
路径:/mcms/search.do
漏洞点:
net.mingsoft.basic.filter.XssHttpServletRequestWrapper- 直接将用户输入拼接到错误信息中
验证方式:
- 访问 http://localhost:8000/mcms/search.do 并注入XSS代码
3.2 文件上传漏洞(第一处)
路径:/ms/file/uploadTemplate.do
利用方式:
- 打包JSP文件为ZIP
- 上传模板
- 系统会自动解压
漏洞点:
net.mingsoft.basic.action.ManageFileAction#uploadTemplate- 仅过滤
../,绝对路径可绕过
回显路径:
- http://localhost:8000/template/1/[时间戳].txt
3.3 文件上传漏洞(第二处)
路径:网站Logo上传
特点:
- 与第一处类似
- 回显路径:http://localhost:8000/upload/1/appLogo/[时间戳].txt
3.4 命令执行漏洞
路径:模板编辑功能
漏洞点:
net.mingsoft.basic.action.TemplateAction#writeFileContent- 通过fileName参数可指定绝对路径写入文件
3.5 SQL注入漏洞(第一处)
路径:/ms/mdiy/page/verify.do
利用方式:
1;select if(substring((select database()),1,4)='mcms',sleep(5),1)/ /and/ /1&fieldValue=1&id=1&idName=1
漏洞点:
- MyBatis使用$拼接SQL
net/mingsoft/ms-base/2.1.13/ms-base-2.1.13.jar!/net/mingsoft/base/dao/IBaseDao.xmlBaseBizImpl.java中重写queryBySQL方法
3.6 Shiro反序列化漏洞
发现:
- Shiro key:d3d3bWluZ3NvZnRuZXRtcw==
利用:
- 通过rememberMe参数进行反序列化攻击
3.7 文件上传漏洞(第三处)
路径:/ms/file/upload
漏洞点:
net.mingsoft.basic.action.ManageFileAction#upload- 仅过滤
../,绝对路径可绕过
3.8 文件上传漏洞(第四处)
路径:文章缩略图上传
特点:
- 仅过滤
.exe,.jsp,.jspx,.sh - 可上传ZIP包含JSP文件
- 通过
/ms/template/unZip.do解压执行
3.9 SSTI注入(Freemarker)
路径:模板管理
漏洞点:
net\mingsoft\base\util\FtlUtil.java- 缺少安全配置:
cfg.setNewBuiltinClassResolver(TemplateClassResolver.SAFER_RESOLVER)
Payload:
<#assign value="freemarker.template.utility.Execute"?new()>${value("calc.exe")}
3.10 Fastjson反序列化
发现:
- 存在Fastjson <=1.2.80
- 难以利用
3.11 SQL注入(第二处)
路径:分类查询
漏洞点:
CategoryDao.xml中使用${}拼接SQLBaseEntity中使用JSONObject.parseArray处理参数
利用方式:
- 构造
sqlWhereList参数进行注入
3.12 SQL注入(第三处)
路径:内容查询
漏洞点:
IContentDao.xml中使用${categoryId}- 未对参数过滤
Payload:
categoryId=1'and updatexml(1.concat(0x7e.user().0x7e).1)and'1
4. 修复建议
- 对所有用户输入进行严格过滤
- 文件上传:
- 限制上传文件类型
- 检查文件内容
- 使用随机文件名
- SQL注入:
- 使用#{}代替${}
- 添加全局过滤器
- XSS:
- 实现严格的输出编码
- 升级组件:
- Shiro
- Fastjson
- Freemarker:
- 添加安全解析器配置
5. 总结
MCMS 5.2.8版本存在多种高危漏洞,包括但不限于:
- 多处文件上传漏洞
- 多种SQL注入方式
- XSS漏洞
- 命令执行漏洞
- 反序列化漏洞
- SSTI注入
建议用户升级到最新版本或按照上述建议进行修复。