Java代码审计-mcms
字数 2094 2025-08-06 12:20:54
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、反序列化等。这些漏洞大多源于未对用户输入进行充分验证和过滤,以及使用了不安全的编码实践。开发人员应遵循安全编码规范,对所有用户输入进行严格验证,并及时更新第三方组件到安全版本。