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注入。
更多靶场实验练习、网安学习资料,请访问合天网安实验室。