开源商业系统MCMS-java代码分析
字数 1781 2025-08-22 22:47:30

MCMS-Java代码安全审计教学文档

1. 系统概述

MCMS是一款基于SpringBoot 2的Java免费开源商用CMS内容管理系统,前端采用Vue3和element plus框架。该系统提供上百套模板和实用插件,代码接近企业级,适合初学者学习研究。

2. 环境搭建

  1. 代码下载地址:https://gitee.com/mingSoft/MCMS/tree/5.2.6/
  2. 修改数据库配置文件,添加mcms数据库
  3. 启动系统

3. SQL注入漏洞分析

3.1 第一处注入点

位置queryChildren方法

调用链

  1. 四个地方调用了这个方法
  2. 第一个调用方法中category参数来自@ModelAttribute注解绑定
  3. 仅校验了title是否为空

利用方式
构造测试数据包进行注入

3.2 第二处注入点

位置{categoryid}路径变量

特点

  1. 使用@PathVariable注解绑定URL参数
  2. 参数直接传入数据库操作
  3. 无过滤操作

利用方式
通过功能点构造注入参数

3.3 第三处注入点

特点

  1. 与第二处类似
  2. 校验传入参数是否为0

利用方式
修改数字参数进行注入

3.4 第四处注入点

位置IContentDao映射器

调用链

  1. 查找${categoryId}参数
  2. 追踪到IBaseDao接口
  3. 通过BaseBiz实现类调用

特点

  1. 前端可无需登录直接访问
  2. POST请求未过滤

利用方式

  1. 直接拼接URL访问
  2. 使用sqlmap进行注入

3.5 第五处注入点

特点

  1. 与第四处类似
  2. 需要登录后台
  3. 参数为contentType

3.6 第六处注入点

位置<include refid="net.mingsoft.base.dao.IBaseDao.sqlWhere">

特点

  1. 包含SQL片段
  2. 多处未预编译
  3. 参数通过BaseEntity继承

利用方式

  1. 需要构造sqlwhere参数
  2. 需要四个参数:item.elmultipleitem.valueitem.field
  3. 可通过GET或POST方式注入

3.7 第七处注入点

位置orderBy参数

特点

  1. sqlWhere类似流程
  2. 存在于queryExcludeAppquery方法

3.8 第八处注入点

位置IBaseDao文件中的queryBySQL

特点

  1. 参数来自用户输入
  2. 通过基础应用层父类调用

利用方式
构造特定语句进行测试

4. XSS漏洞分析

过滤器分析

  1. 存在XSS过滤器
  2. 仅对*/search.do路径进行过滤
  3. 其他页面可绕过过滤

利用方式

  1. 在其他页面插入XSS代码
  2. 修改标题等方式注入

5. 文件上传漏洞分析

5.1 第一处上传点

位置/file/upload接口

特点

  1. 无上传限制
  2. 配置文件禁止特定后缀
  3. 可上传zip压缩包并解压

利用方式

  1. 上传含JSP文件的压缩包
  2. GET方式传入路径进行解压

限制
SpringBoot启动时JSP文件不解析

5.2 第二处上传点

位置:文件内容写入

特点

  1. 存在路径校验但可绕过
  2. 可覆盖模板文件
  3. 需要热部署环境

利用方式

  1. 构造WEB-INF/manager/cms/category/form.ftl路径
  2. 写入恶意Freemarker模板
  3. 访问相关接口执行命令

5.3 第三处上传点

特点

  1. 无任何过滤
  2. 可直接上传恶意文件

6. Fastjson反序列化漏洞

位置JSONObject.parse解析jsonconfig

特点

  1. 导入fastjson的JSONObject
  2. 直接解析用户输入

利用方式

  1. 构造特定版本的反序列化payload
  2. 发送恶意数据包

7. 审计总结

  1. SQL注入:多处存在,主要源于未预编译的动态SQL拼接
  2. XSS:过滤器配置不完善导致绕过
  3. 文件上传:多接口缺乏严格校验
  4. 反序列化:直接解析不可信输入

8. 修复建议

  1. 使用预编译语句处理所有SQL查询
  2. 完善XSS过滤器,覆盖所有用户输入点
  3. 严格限制文件上传类型和路径
  4. 升级Fastjson版本或替换为其他JSON库
  5. 对所有用户输入进行严格校验和过滤
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库 对所有用户输入进行严格校验和过滤