[Java代码审计]—MCMS

news2025/1/10 12:15:37

环境搭建

MCMS 5.2.4:https://gitee.com/mingSoft/MCMS/tree/5.2.4/

利用 idea 打开项目

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

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

启动项目登录后台 http://localhost:8080/ms/login.do,账户名:密码 msopen:msopen

漏洞分析

SQL注入

该cms的mybatis映射文件直接写在了dao层,由于${}会有SQL注入问题,所以直接搜索${},发现query方法中,categoryId参数可能存在SQL注入

在这里插入图片描述

根据namespace可知该语句的映射接口类是net.mingsoft.cms.dao.IContentDao

<mapper namespace="net.mingsoft.cms.dao.IContentDao">

在IContentDao中并没有发现query方法,但他继承了IBaseDao,而query就在其中

下面就要看哪里实现了query方法,根据分层逻辑,业务层对应接口类为:net.mingsoft.cms.biz.IContentBiz ,而他的实现类是net.mingsoft.cms.biz.impl.ContentBizImpl而其中没有调用该方法,所以向上找他的父类BaseBizImpl

在这里插入图片描述

接着找哪里调用了该方法,同样根据分层逻辑,找到了控制层的net.mingsoft.cms.action.web.ContentAction,该层的接口为/cms/content

该类的list方法中,会调用contentBiz属性的query方法参数为content

  1. contentBiz是IContentBiz类型的,IContentBiz的实现类是ContentBizImpl,接着他的父类BaseBizImpl实现了query方法
  2. content属性是ContentBean类型的,而ContentBean的父类是CategoryEntity它定义了categoryId属性,并实现了对应的getter、setter方法

这里未对前端用户输入的参数进行过滤,另外该CMS全局也没有针对SQL注入的过滤,所以只需要传入categoryId参数,将查询语句闭合即可导致SQL注入
在这里插入图片描述

由于定义的是PostMapping,因此需要post传参

payload:

POST:categoryId=1' and updatexml(1,concat(0x7e,user(),0x7e),1) and '1

在这里插入图片描述

其它用${}的点,由于参数不可控故无法进行注入

文件上传

net.mingsoft.basic.action.web.FileAction提供了文件上传入口,并且路径文件名等都可控
在这里插入图片描述

跟进下边的upload()方法,主要是对文件的一些初始化操作,第一行设置了黑名单
在这里插入图片描述

而黑名单只限制了exe、jsp,可以用jspx绕过
在这里插入图片描述

编写一个上传入口

<form method="POST" action="http://127.0.0.1:8088/file/upload" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="rename" name="rename" value="false">
    <input type="submit" name="submit">
</form>

成功上传jspx木马文件
在这里插入图片描述

解压压缩包getshell

net.mingsoft.basic.action.TemplateAction通过fileUrl传入任意文件路径,对文件进行解压,在unzip方法中未对压缩包中的文件过滤

若我们通过上边的文件上传,传上去一个带有jsp木马的zip压缩包,即可通过该利用点解压出jsp的shell文件
在这里插入图片描述

先上传个shell.zip
在这里插入图片描述

在访问指定路径进行解压,成功获取到jsp shell

在这里插入图片描述

任意文件删除

net.mingsoft.basic.action.TemplateAction通过fileName可以指定目录删除,并且不像文件上传等对…/进行限制,这就导致我们可以通过…/进行任意目录删除
在这里插入图片描述

默认路径为/template/appid,因此若要删除upload目录,则需传参fileName=../../upload
在这里插入图片描述
在这里插入图片描述

任意文件写入

net.mingsoft.basic.action.TemplateAction的writeFileContent()方法,没有进行过滤,可以往模板文件写入任何内容
在这里插入图片描述

  • fileName:新文件名
  • oldFileName:旧文件名
  • fileContent:文件内容

若设置文件名为shell.jspx,内容为一句话木马,在随便找一个原有文件进行替换,即可getshell,但需要注意,checkFileType会进行文件类型就检测,仍然是不能为exe和jsp,这也是为什么文件名设为shell.jspx的原因
在这里插入图片描述

在这里插入图片描述

模板注入

该cms模版引擎是freemarker,该模版引擎是存在模版注入的,结合上边的任意写,可以将下边内容写入html页面中

<#assign value="freemarker.template.utility.Execute"?new()>${value("calc.exe")}

在这里插入图片描述

之后生成主页时,会渲染该文件执行命令
在这里插入图片描述

简单分析下源码

访问指定路由后,会调用generate()生成主页
在这里插入图片描述

其中主要是对map进行一些初始化操作,并通过rendering()进行渲染
在这里插入图片描述

最后调用process()进行渲染,造成代码执行

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/385267.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【NLP】自动化计算文本文件TTR的bash脚本

自动化计算文本文件TTR的bash脚本 简介 这是一个可以计算文本文件TTR的bash脚本&#xff0c;文件名为&#xff1a;calculate_TTR.sh。它会接收一个文件名作为参数&#xff0c;并输出总单词数、特异单词数和TTR。 TTR是什么 TTR&#xff08;Type-Token Ratio&#xff09;是用…

javaweb期末复习重点

2022.12.12javaweb复习重点 10个选择题10个填空题10个判断2-3简答题2个程序题&#xff08;15分一个&#xff09; 1.HTML、Javascript、divcss ? 详细解释 HTML HTML(Hyper Text Mark-up Language)即超文本标记语言&#xff0c;是用于描述网页的一种标记语言。简单来说&…

九龙证券|全面推进技术研发,6G概念爆火!多家上市公司表示已布局

据商场研讨组织估计&#xff0c;2040年全球6G商场规划逾越3400亿美元。 6G概念指数逆市大涨5.61% 3月2日&#xff0c;6G概念指数逆市上涨5.61%。成份股中&#xff0c;本川智能、沃特股份、邦本科技、我国卫通涨停&#xff1b;信科移动-U大涨14.61%&#xff0c;亚光科技、信维通…

html常用标签2和语法练习

目录 1.表单标签 form标签 input标签 选择框 复选框:checkbox 按钮框:button 文件选择框 多行编辑框:textarea 2.html语法练习 展示简历信息 填写简历信息 ​编辑 3.HTML特殊字符 1.表单标签 表单是让用户输入信息的重要途径 表单域:包含表单元素的区域,重点是form…

手把手教你用js实现手机通讯录功能(附源码)

js实现手机通讯录效果图需求需求一&#xff1a;锚点通过#id配合a标签使用css中scroll-behavior属性的使用需求二需求三获取汉字拼音的首字母方法1&#xff1a;使用插件&#xff0c;这里推荐pinyin-pro方法2&#xff1a;使用unicode去重数组中冗余的对象法一&#xff1a;用Map去…

abap MODIFY常用语法解析

MODIFY 是既可以操作数据又可以操作内表的一个语法, 实现的逻辑都一样. 如果你内表或数据库中存在该行数据会对该行数据进行更新. 如果不存在,就会插入数据. , 1.如果it_tab是带有标题行的内表,是可以忽略FROM wa_tab工作区的 MODIFY it_tab .2.把工作区wa_tab中的数据更新…

中高级前端面试宝典之浏览器篇

中高级前端面试宝典 作为一名前端开发工程师&#xff0c;要掌握的知识点是多而杂的&#xff0c;在面试刷题阶段&#xff0c;经常没头没脑的&#xff0c;我将面试题系统化&#xff0c;分了好几个系列&#xff0c;祝愿大家&#xff08;包括我&#xff09;在这个疫情刚过去的互联网…

高通平台开发系列讲解(摄像头篇)QCM6490 上摄像头驱动开发

文章目录 一、Camera 硬件简介二、内核驱动移植2.1、确定设备树2.2、增加 camera 节点2.3、配置相关 GPIO沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 qcm6490 摄像头驱动开发。 一、Camera 硬件简介 摄像头连接器一般会包含 Mipi 信号、mclk、供电、re…

从业者必读,一篇文章轻松掌握DevOps核心概念和最佳技能实践!

文章目录前言一. DevOps的定义及由来二. DevOps的价值三. devops工具有哪些3.1 devops工程师的硬实力3.2 devops工程师的软实力总结前言 大家好&#xff0c;又见面了&#xff0c;我是沐风晓月&#xff0c;本文是对DevOps的总结&#xff0c;一篇文章告诉你什么是DevOps. 对很多…

Windows+CLion+Opencv+NCNN笔记

一、下载protobuf和ncnn在腾讯优图的github上下载ncnn&#xff0c;下载链接为https://github.com/Tencent/ncnn。在安装NCNN之前需要编译安装protobuf&#xff0c;protobuf3.4.0下载链接为https://github.com/google/protobuf/archive/v3.4.0.zip。下载后解压&#xff0c;将ncn…

什么是决策能力?HR人才测评

什么是决策能力&#xff1f;决策能力是一项多种能力的综合&#xff0c;指的是能够认识、理解、并且综合分析后得出判断&#xff0c;从而采取行动的能力。如&#xff1a;对当前形势的分析&#xff0c;对相关人员的判断&#xff0c;能做出合理的&#xff0c;适当的行动来应对。决…

【MyBatis】篇一.

文章目录1、MyBatis概述2、环境搭建1、MyBatis概述 认识&#xff1a; JavaEE开发的一个套件SSM&#xff0c;即&#xff1a; MyBatis是一个持久层的框架&#xff0c;是对JDBC的一个封装&#xff0c;是一个半自动的ORM框架。 ORM即实体类对象和数据库中的数据的一个映射关系&am…

关于Facebook Messenger CRM,这里有你想要知道的一切

关于Facebook Messenger CRM&#xff0c;这里有你想要知道的一切&#xff01;想把Facebook Messenger与你的CRM整合起来吗&#xff1f;这篇博文是为你准备的! 我们将介绍有关获得Facebook Messenger CRM整合的一切信息。然后&#xff0c;我们将解释为什么你需要像SaleSmartly&a…

Git使用:常用命令汇总

前言 Git对于程序猿来说并不陌生&#xff0c;它是一款非常好用的项目管理工具&#xff0c;无论是前端开发还是后台开发&#xff0c;只要项目里面可以使用Git来管理&#xff0c;就会涉及代码的提交和合并操作&#xff0c;主要是常用的Git操作命令的使用&#xff0c;虽然目前有好…

CA-SSL:用于检测和分割未知类的半监督学习

论文作者 | Lu Qi, Jason Kuen , Zhe Lin, and etal论文来源 | CVPR2022文章解读 | William1、摘要为了提高检测/分割的性能&#xff0c;现有的自监督和半监督方法从未标记的数据中提取任务相关或任务特定的训练标签&#xff0c;但这两种方法对于任务性能都是次优的&#xff0c…

【JeecgBoot-Vue3】第1节 源码下载和环境安装与启动

目录 一. 资料 1. 源码下载 2. 官网启动文档 二、 前端开发环境安装 2.1 开发工具 2.2 前后端代码下载 2.3 前端启动 Step 1&#xff1a;安装nodejs npm Step 2&#xff1a;配置国内镜像&#xff08;这里选阿里&#xff09; Step 3&#xff1a;安装yarn Step 4&…

python的 ping 网络状态监测方法(含多IP)

ping 基本概念 ping &#xff08;Packet Internet Groper&#xff09;是一种因特网包探索器&#xff0c;用于测试网络连接量的程序。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令&#xff0c; 主要是向特定的目的主机发送 ICMP&#xff08;Internet Control Messag…

九、Bean的循环依赖问题

1 什么是Bean的循环依赖 A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你&#xff0c;你也依赖我。 比如&#xff1a;丈夫类Husband&#xff0c;妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。 2 singleton下的set注入产生的循环依赖 丈夫类 pac…

RabbitMQ的使用

1.初识MQ1.1.同步和异步通讯微服务间通讯有同步和异步两种方式&#xff1a;同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;但是你却不…

Python3,好看的外(shen)表(cai)千篇一律,炫彩的日志万里挑一。

炫彩日志输出1、引言2、代码实战2.1 库介绍2.2 库安装2.3 代码示例2.3.1 demo2.3.2 实战3、总结1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 我今天被炫到了。 小鱼&#xff1a;怎么了&#xff0c;你还能被旋到了&#xff1f; 小屌丝对啊&#xff0c; 被炫到了&#xff0c;很…