Java代码审计-mcms
字数 2094 2025-08-06 12:20:54

MCMS系统安全漏洞分析与教学文档

环境搭建

  1. 配置数据库用户名和密码
  2. 进行环境搭建
  3. 访问首页,使用默认密码成功登录

漏洞分析与复现

1. XSS漏洞

漏洞位置: net.mingsoft.basic.filter.XssHttpServletRequestWrapper

分析:

  • 直接使用throw抛出异常并进行拼接
  • 未对输出内容进行适当过滤或编码

复现步骤:

  1. 进入前台地址
  2. 构造XSS payload: <script>alert(1)</script>
  3. 成功实现弹框

2. SQL注入漏洞(1)

漏洞位置: ICategoryDao.xml中的${item.field}直接拼接

分析:

  • ${item.field}被直接拼接在SQL语句中
  • itemcollection="sqlWhereList"的别名
  • 需要构造sqlWhereList中的field参数

复现步骤:

  1. 进入公司管理-文章管理处
  2. 使用BurpSuite抓包
  3. 输入SQL注入payload触发报错注入

3. 文件上传漏洞(1)

漏洞接口: /ms/file/uploadTemplate.do

分析:

  • 上传压缩文件后直接解压
  • 未对文件内容进行检测
  • 可直接上传恶意文件(如1.jsp)

复现步骤:

  1. 构造包含恶意文件的压缩包
  2. 通过接口上传
  3. 验证文件是否成功上传并执行

4. SSTI:Freemarker模板注入

源码位置: net\mingsoft\base\util\FtlUtil.java

分析:

  • 访问指定路由后会调用generate()生成主页
  • 对map进行初始化操作并通过rendering()进行渲染
  • 调用process()进行渲染时造成代码执行

复现步骤:

  1. 进入首页文件
  2. 修改index.html加入SSTI payload
  3. 生成主页,成功弹出计算器

5. FastJson反序列化漏洞

分析:

  • 使用FastJson组件(版本1.2.8)
  • 该版本无法直接执行命令
  • 但仍存在反序列化风险

复现步骤:

  1. 使用Burp抓包
  2. 设置dnslog
  3. 构造payload触发,成功收到监听

6. SQL注入漏洞(2)

漏洞位置: query方法中的categoryId参数

分析:

  • 映射接口类为ContentDao
  • 继承自IBaseDaoquery方法在其中
  • 控制层ContentAction的接口为/cms/content
  • list方法调用contentBiz.query方法,参数为content
  • 未对用户输入进行过滤

复现步骤:

  1. 使用POST方式传参
  2. 构造SQL注入payload
  3. 使用Hackbar或Burp进行漏洞利用

7. 任意文件删除漏洞

漏洞位置: TemplateAction接口

分析:

  • 通过fileName可以指定目录删除
  • 未对../进行限制,可进行目录遍历

复现步骤:

  1. 使用Hackbar构造删除请求
  2. 通过../跳转目录
  3. 成功删除目标文件(如之前上传的1.jsp)

8. Shiro反序列化漏洞

分析:

  • 登录框存在"记住密码"功能
  • 系统存在Shiro组件
  • 源码中写入了固定的加密key

复现步骤:

  1. 使用工具测试Shiro特征
  2. 通过源码中的key和爆破出的利用链
  3. 成功实现命令执行
  4. 写入内存马,获取shell

9. 文件上传漏洞(2)

源码位置: net.mingsoft.basic.action.TemplateAction#writeFileContent

分析:

  • 使用filename获取文件
  • 通过模板管理->编辑功能上传文件

复现步骤:

  1. 进入模板管理
  2. 点击编辑
  3. 上传测试文件,验证是否成功

10. 文件上传漏洞(3)

分析:

  • 与文件上传2类似,使用upload方法
  • 存在checkUploadPath函数进行过滤
  • 只对../进行校验,绝对路径可绕过

复现步骤:

  1. 尝试使用绝对路径上传
  2. 验证文件是否上传成功
  3. 注意响应码400可能表示过滤机制

防御建议

  1. XSS防御:

    • 对所有输出进行HTML编码
    • 使用安全的HTML过滤库
  2. SQL注入防御:

    • 使用预编译语句
    • 避免直接拼接SQL
    • 使用ORM框架
  3. 文件上传防御:

    • 限制上传文件类型
    • 检查文件内容而非扩展名
    • 存储在非web可访问目录
  4. SSTI防御:

    • 禁用动态模板功能
    • 对用户输入进行严格过滤
  5. 反序列化防御:

    • 升级FastJson到最新安全版本
    • 禁用不必要的反序列化功能
  6. Shiro安全配置:

    • 使用随机生成的加密key
    • 及时更新Shiro版本
  7. 文件删除防御:

    • 限制删除操作的范围
    • 检查路径中的../等符号

总结

MCMS系统存在多种高危漏洞,包括但不限于XSS、SQL注入、文件上传、SSTI、反序列化等。这些漏洞大多源于未对用户输入进行充分验证和过滤,以及使用了不安全的编码实践。开发人员应遵循安全编码规范,对所有用户输入进行严格验证,并及时更新第三方组件到安全版本。

MCMS系统安全漏洞分析与教学文档 环境搭建 配置数据库用户名和密码 进行环境搭建 访问首页,使用默认密码成功登录 漏洞分析与复现 1. XSS漏洞 漏洞位置 : net.mingsoft.basic.filter.XssHttpServletRequestWrapper 分析 : 直接使用throw抛出异常并进行拼接 未对输出内容进行适当过滤或编码 复现步骤 : 进入前台地址 构造XSS payload: <script>alert(1)</script> 成功实现弹框 2. SQL注入漏洞(1) 漏洞位置 : ICategoryDao.xml 中的 ${item.field} 直接拼接 分析 : ${item.field} 被直接拼接在SQL语句中 item 是 collection="sqlWhereList" 的别名 需要构造 sqlWhereList 中的 field 参数 复现步骤 : 进入公司管理-文章管理处 使用BurpSuite抓包 输入SQL注入payload触发报错注入 3. 文件上传漏洞(1) 漏洞接口 : /ms/file/uploadTemplate.do 分析 : 上传压缩文件后直接解压 未对文件内容进行检测 可直接上传恶意文件(如1.jsp) 复现步骤 : 构造包含恶意文件的压缩包 通过接口上传 验证文件是否成功上传并执行 4. SSTI:Freemarker模板注入 源码位置 : net\mingsoft\base\util\FtlUtil.java 分析 : 访问指定路由后会调用 generate() 生成主页 对map进行初始化操作并通过 rendering() 进行渲染 调用 process() 进行渲染时造成代码执行 复现步骤 : 进入首页文件 修改index.html加入SSTI payload 生成主页,成功弹出计算器 5. FastJson反序列化漏洞 分析 : 使用FastJson组件(版本1.2.8) 该版本无法直接执行命令 但仍存在反序列化风险 复现步骤 : 使用Burp抓包 设置dnslog 构造payload触发,成功收到监听 6. SQL注入漏洞(2) 漏洞位置 : query 方法中的 categoryId 参数 分析 : 映射接口类为 ContentDao 继承自 IBaseDao , query 方法在其中 控制层 ContentAction 的接口为 /cms/content list 方法调用 contentBiz.query 方法,参数为 content 未对用户输入进行过滤 复现步骤 : 使用POST方式传参 构造SQL注入payload 使用Hackbar或Burp进行漏洞利用 7. 任意文件删除漏洞 漏洞位置 : TemplateAction 接口 分析 : 通过 fileName 可以指定目录删除 未对 ../ 进行限制,可进行目录遍历 复现步骤 : 使用Hackbar构造删除请求 通过 ../ 跳转目录 成功删除目标文件(如之前上传的1.jsp) 8. Shiro反序列化漏洞 分析 : 登录框存在"记住密码"功能 系统存在Shiro组件 源码中写入了固定的加密key 复现步骤 : 使用工具测试Shiro特征 通过源码中的key和爆破出的利用链 成功实现命令执行 写入内存马,获取shell 9. 文件上传漏洞(2) 源码位置 : net.mingsoft.basic.action.TemplateAction#writeFileContent 分析 : 使用 filename 获取文件 通过模板管理->编辑功能上传文件 复现步骤 : 进入模板管理 点击编辑 上传测试文件,验证是否成功 10. 文件上传漏洞(3) 分析 : 与文件上传2类似,使用 upload 方法 存在 checkUploadPath 函数进行过滤 只对 ../ 进行校验,绝对路径可绕过 复现步骤 : 尝试使用绝对路径上传 验证文件是否上传成功 注意响应码400可能表示过滤机制 防御建议 XSS防御 : 对所有输出进行HTML编码 使用安全的HTML过滤库 SQL注入防御 : 使用预编译语句 避免直接拼接SQL 使用ORM框架 文件上传防御 : 限制上传文件类型 检查文件内容而非扩展名 存储在非web可访问目录 SSTI防御 : 禁用动态模板功能 对用户输入进行严格过滤 反序列化防御 : 升级FastJson到最新安全版本 禁用不必要的反序列化功能 Shiro安全配置 : 使用随机生成的加密key 及时更新Shiro版本 文件删除防御 : 限制删除操作的范围 检查路径中的 ../ 等符号 总结 MCMS系统存在多种高危漏洞,包括但不限于XSS、SQL注入、文件上传、SSTI、反序列化等。这些漏洞大多源于未对用户输入进行充分验证和过滤,以及使用了不安全的编码实践。开发人员应遵循安全编码规范,对所有用户输入进行严格验证,并及时更新第三方组件到安全版本。