开源商业系统MCMS-java代码分析
字数 1781 2025-08-22 22:47:30
MCMS-Java代码安全审计教学文档
1. 系统概述
MCMS是一款基于SpringBoot 2的Java免费开源商用CMS内容管理系统,前端采用Vue3和element plus框架。该系统提供上百套模板和实用插件,代码接近企业级,适合初学者学习研究。
2. 环境搭建
- 代码下载地址:https://gitee.com/mingSoft/MCMS/tree/5.2.6/
- 修改数据库配置文件,添加mcms数据库
- 启动系统
3. SQL注入漏洞分析
3.1 第一处注入点
位置:queryChildren方法
调用链:
- 四个地方调用了这个方法
- 第一个调用方法中
category参数来自@ModelAttribute注解绑定 - 仅校验了title是否为空
利用方式:
构造测试数据包进行注入
3.2 第二处注入点
位置:{categoryid}路径变量
特点:
- 使用
@PathVariable注解绑定URL参数 - 参数直接传入数据库操作
- 无过滤操作
利用方式:
通过功能点构造注入参数
3.3 第三处注入点
特点:
- 与第二处类似
- 校验传入参数是否为0
利用方式:
修改数字参数进行注入
3.4 第四处注入点
位置:IContentDao映射器
调用链:
- 查找
${categoryId}参数 - 追踪到
IBaseDao接口 - 通过
BaseBiz实现类调用
特点:
- 前端可无需登录直接访问
- POST请求未过滤
利用方式:
- 直接拼接URL访问
- 使用sqlmap进行注入
3.5 第五处注入点
特点:
- 与第四处类似
- 需要登录后台
- 参数为
contentType
3.6 第六处注入点
位置:<include refid="net.mingsoft.base.dao.IBaseDao.sqlWhere">
特点:
- 包含SQL片段
- 多处未预编译
- 参数通过
BaseEntity继承
利用方式:
- 需要构造
sqlwhere参数 - 需要四个参数:
item.el、multiple、item.value、item.field - 可通过GET或POST方式注入
3.7 第七处注入点
位置:orderBy参数
特点:
- 与
sqlWhere类似流程 - 存在于
queryExcludeApp和query方法
3.8 第八处注入点
位置:IBaseDao文件中的queryBySQL
特点:
- 参数来自用户输入
- 通过基础应用层父类调用
利用方式:
构造特定语句进行测试
4. XSS漏洞分析
过滤器分析:
- 存在XSS过滤器
- 仅对
*/search.do路径进行过滤 - 其他页面可绕过过滤
利用方式:
- 在其他页面插入XSS代码
- 修改标题等方式注入
5. 文件上传漏洞分析
5.1 第一处上传点
位置:/file/upload接口
特点:
- 无上传限制
- 配置文件禁止特定后缀
- 可上传zip压缩包并解压
利用方式:
- 上传含JSP文件的压缩包
- GET方式传入路径进行解压
限制:
SpringBoot启动时JSP文件不解析
5.2 第二处上传点
位置:文件内容写入
特点:
- 存在路径校验但可绕过
- 可覆盖模板文件
- 需要热部署环境
利用方式:
- 构造
WEB-INF/manager/cms/category/form.ftl路径 - 写入恶意Freemarker模板
- 访问相关接口执行命令
5.3 第三处上传点
特点:
- 无任何过滤
- 可直接上传恶意文件
6. Fastjson反序列化漏洞
位置:JSONObject.parse解析jsonconfig
特点:
- 导入fastjson的
JSONObject包 - 直接解析用户输入
利用方式:
- 构造特定版本的反序列化payload
- 发送恶意数据包
7. 审计总结
- SQL注入:多处存在,主要源于未预编译的动态SQL拼接
- XSS:过滤器配置不完善导致绕过
- 文件上传:多接口缺乏严格校验
- 反序列化:直接解析不可信输入
8. 修复建议
- 使用预编译语句处理所有SQL查询
- 完善XSS过滤器,覆盖所有用户输入点
- 严格限制文件上传类型和路径
- 升级Fastjson版本或替换为其他JSON库
- 对所有用户输入进行严格校验和过滤