竹笋

首页 » 问答 » 环境 » 记一次MCMS的审计之路
TUhjnbcbe - 2025/6/11 20:37:00
白癜风诊疗康复 https://m.39.net/disease/a_5419394.html


  MCMS是J2EE系统,完整开源的JavaCMS,基于SpringBoot2架构,前端基于vue、elementui。为开发者提供上百套免费模板,同时提供适用的插件(文章、商城、
  十天前MCMS更新了新的一版本5.2.9提示新版本进行了SQL安全方面的优化,所以我们尝试审计MCMS5.2.8

环境搭建


  我们下载好安装包后

利用idea打开项目

创建数据库mcms,导入doc/mcms-5.2.8.sql

修改src/main/resources/application-dev.yml中关于数据库设置参数

运行MSApplication.javamain方法

利用账户名:密码msopen:msopen登录后台
  启动的时候会有一点小bug需要在idea中配置


  运行成功后,页面如图所示

前台反射型XSS

漏洞复现


  

 ①网安学习成长路径思维导图

 ②60+网安经典常用工具包

 ③+SRC漏洞分析报告

 ④+网安攻防实战技术电子书

 ⑤最权威CISSP认证考试指南+题库

 ⑥超页CTF实战技巧手册

 ⑦最新网安大厂面试题合集(含答案)

 ⑧APP客户端安全检测指南(安卓+IOS)


  

漏洞分析


  我们看到运行后的控制台输出为


  我们找到net.mingsoft.basic.filter.XssHttpServletRequestWrapper并添加断点,再次触发漏洞,看到一个完整的调用栈,


  net.mingsoft.basic.filter.XssHttpServletRequestWrapper#clean(java.lang.String,java.lang.String)


  

后台命令执行一

漏洞复现


  后台有一个可以上传模板文件的位置


  我们上传文件并抓取数据包


  


  我们看到数据包中的参数uploadPath指定了上传的位置,最后返回了上传后的路径以及文件内容


  通过修改参数uploadPath的值,我们就可以将文件上传webapp的任意目录下


  我们写一个1.txt进行验证

POST/ms/file/uploadTemplate.doHTTP/1.1Host:localhost:User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/.36(KHTML,likeGecko)Chrome/.0.0.0Safari/.36Content-Length:Accept:*/*Accept-Encoding:identityAccept-Language:zh-CN,zh;q=0.9Content-Type:multipart/form-data;boundary=----WebKitFormBoundaryz3nUf5Hws24R3B3ACookie:Origin:
  通过路由/ms/file/uploadTemplate定位到代码位置


  net.mingsoft.basic.action.ManageFileAction#uploadTemplate


  我们看到虽然存在非法路径过滤函数,查看函数内容,仅仅是对../进行了校验,通过绝对路径仍然可以绕过


  net.mingsoft.basic.action.ManageFileAction#checkUploadPath


  net.mingsoft.basic.action.BaseFileAction#uploadTemplate

后台命令执行二

漏洞复现


  我们看到除了上传模板的接口,还存在编辑模板的接口


  点击编辑,编辑后保存并抓取数据包


  原本的数据包


  我们看到参数fileName通过绝对路径指定了文件名,所以我们可以通过修改fileName来实现绝对路径写入

漏洞分析


  net.mingsoft.basic.action.TemplateAction#writeFileContent


  我们看到对文件的后缀名进行了检验,但还是通过传入的参数fileName写入文件


  

后台命令执行三

漏洞复现


  构造数据包

POST/ms/file/upload.doHTTP/1.1Host:localhost:User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/.36(KHTML,likeGecko)Chrome/.0.0.0Safari/.36Content-Length:Accept:*/*Accept-Encoding:identityAccept-Language:zh-CN,zh;q=0.9Content-Type:multipart/form-data;boundary=----WebKitFormBoundaryz3nUf5Hws24R3B3ACookie:Origin:
  返回上传成功的文件的地址


  

漏洞分析


  这个漏洞是在第一个后台命令执行的基础上发现的,两个类位于同一个文件内


  net.mingsoft.basic.action.ManageFileAction#upload


  虽然存在非法路径过滤函数checkUploadPath,查看函数内容,仅仅是对../进行了校验,通过绝对路径仍然可以绕过


  对文件的上传是利用了


  net.mingsoft.basic.action.BaseFileAction#upload


  存在很多过滤,但是还是可以成功上传文件


  

后台SQL注入漏洞


  

漏洞复现


  构造数据包

GET/ms/mdiy/page/verify.do?fieldName=1;select/**/if(substring((select/**/database()),1,4)=mcms,sleep(5),1)/**/and/**/1fieldValue=1id=1idName=1HTTP/1.1Host:localhost:Accept:application/json,text/plain,*/*Accept-Encoding:gzip,deflate,brAccept-Language:zh-CN,zh;q=0.9Cache-Control:no-cacheCookie:Pragma:no-cacheReferer:
  发现成功使得服务器沉睡五秒

漏洞分析


  net.mingsoft.mdiy.action.PageAction#verify


  获取参数并传到方法validated


  net.mingsoft.basic.action.BaseAction#validated(java.lang.String,java.lang.String,java.lang.String)


  将fieldName和fieldValue的传入到where参数中


  net.mingsoft.base.biz.impl.BaseBizImpl#queryBySQL(java.lang.String,java.util.List,java.util.Map)


  


  net.mingsoft.base.dao.IBaseDao#queryBySQL


  因为是mybits所以未采用预编译的${就容易产生注入


  

后台SQL注入二

漏洞复现


  登录后台后我们找到自定义模型的位置


  根据代码生成器生成一个自定义模型json并导入保存


  点击删除时抓取数据包


  修改modelTableName


  发现成功使得服务器沉睡五秒

漏洞分析


  net.mingsoft.mdiy.action.ModelAction#delete


  net.mingsoft.base.biz.impl.BaseBizImpl#dropTable


  


  net.mingsoft.base.dao.IBaseDao


  


  查看dropTable对应的mapper内容如下,直接将table内容进行拼接且未预编译,造成SQL注入。

更多靶场实验练习、网安学习资料,请访问合天网安实验室。

1
查看完整版本: 记一次MCMS的审计之路