首页 > 其他分享 >MCMS-5.2.8代码审计

MCMS-5.2.8代码审计

时间:2024-07-30 21:06:17浏览次数:12  
标签:审计 文件 5.2 调用 MCMS ms net mingsoft 上传

IDEA设置

下载了导入的依赖库源码后才能对库中代码进行搜索和跳转

SQL注入

在源文件中,多处出现 include 引用 sqlwhere

而sqlwhere的foreach语句中存在着sql注入,如果传入的集合sqlWhereList的el属性为eq,则可以控制field属性来写入恶意sql语句

搜索发现有好几处条件查询引用了sqlWhere

先查看net\mingsoft\mdiy\dao\IDictDao.xml

向上查询query,发现是net\mingsoft\base\dao\IBaseDao定义的接口

这里还是属于Mapper层

其传入的参数为BaseEntity

里面有获取sqlWhereList的方法

如果我们传入sqlWhere参数,且是JSON数组类型,就会转换为sqlWhereList

向上查看哪里调用了query方法

来到Service层

net\mingsoft\base\biz\impl\BaseBizImpl

再往上即controller层

有这么多地方调用了query,逐一尝试

其实不应该漫无目的的逐一尝试,有些query并没有引用sqlWhere,应该去搜索引入sqlWhere的query对应的controller

应重点关注这四个的controller

第一个

net/mingsoft/cms/action/CategoryAction

接口地址为:/ms/cms/category/list

传入的参数类型是CategoryEntity,该类又继承自BaseEntity,因此可以传入sqlWhere参数,并构造恶意的json数组:
[{"field":"updatexml(1,concat(0x7e,(select database())),1)","el":"eq"}]

第二个

net/mingsoft/cms/action/ContentAction.java

接口地址:/ms/cms/content/list

虽然这个做了过滤

但他只是对参数中的CategoryId做了过滤,没有考虑sqlWhere

同样存在sql注入漏洞

第三个

net\mingsoft\mdiy\action\DictAction

接口地址:/ms/mdiy/dict/list

第四个

接口地址:/ms/basic/log/list

第五个

跟前面的不一样

net/mingsoft/base/dao/IBaseDao.xml

在net.mingsoft.base.biz.impl.BaseBizImpl多处调用了queryBySQL

其中一处向上追踪

发现在net.mingsoft.basic.action.BaseAction#validated进行了调用

把fieldName和fieldValue作为键值对传入sql语句

其中fieldName就是里面的${key},如果fieldName可控,就会存在SQL注入漏洞

向上追踪,在net.mingsoft.mdiy.action.PageAction#verify调用了

接口地址:/ms/mdiy/page/verify

fieldName和fieldValue用户可控

payload:

/ms/mdiy/page/verify?fieldName=updatexml(1,concat(0x7e,(select%20database())),1)&fieldValue=1

XSS

地址:http://localhost:8080/mcms/search.do

当在输入框搜索恶意代码时,会报错

在IDEA中可以看到报错信息:

跟踪到XssHttpServletRequestWrapper.java查看

此处虽然对输入做了过滤,但是最后却直接将输入返回给前端

throw new BusinessException("参数异常:"+ content);

导致了XSS漏洞

文件上传

第一个

后台登录地址:http://localhost:8080/ms/login.do

系统设置->模板管理中存在上传接口

其接口地址为:/ms/file/uploadTemplate.do

文件上传的信息都保存在Bean中

此处虽然说只能上传zip文件,但是抓包之后可以修改为其他类型的文件,修改为一个TXT文本进行尝试:

打断点调试

发现bean对象的uploadPath默认都为template\1

将bean对象的相关属性放到Config中然后调用uploadTemplate方法

uploadTemplate方法负责文件上传,并黑名单检测文件后缀是否为exe,jsp,jspx,sh

最终上传的文件都会到web根目录下的/template/1/中

同时返回文件地址

且能够成功访问

但是并不能上传jsp后缀的文件

尝试将jsp文件打包成zip然后上传,看看是否会自动解压

查看代码发现在文件上传成功后会自动调用/template/unZip.do方法进行解压

该方法将ZipFile解压到ZipFile的父目录下,且限制了路径穿越

可以看到成功解压了,绕过了后缀名的限制

但是springboot启动的情况下,虽然能访问到jsp⽂件但是不能解析,⼀般是在tomcat部署的情况下才能解析成功

第二个

在模板管理中可以编辑模板,并保存

此时抓包得到的接口地址为:/ms/template/writeFileContent.do

通过控制fileName可以上传任意文件(除了jsp和exe后缀的)

fileName=1.txt&fileContent=123&oldFileName=1.txt

此时上传到的是web根目录

尝试目录穿越,但是发现报错

原因为BasicUtil.getRealTemplatePath方法获取web根路径会调用getRealPath方法,而getRealPath方法会判断路径中是否存在../,导致报错

freemaker模板注入

在内容管理->静态化中,可以根据模板生成主页

接口地址为:/ms/cms/generate/generateIndex.do

调用了CmsParserUtil.generate方法

调用了ParserUtil.rendering方法

该方法中又调用了另一个rendering

触发了process

一般freemaker漏洞常位于后台可以编辑模版的地方,通过插入恶意的ftl指令到ftl文件中,当后端再次return或者process时即可触发代码执行

因此在模板内容中插入恶意的指令,并生成主页,即会触发模板注入

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

任意文件删除

这里用到了AOP切面技术

代码位于net/mingsoft/cms/aop/CategoryAop.java

@Pointcut("execution(* net.mingsoft.cms.action.CategoryAction.delete(..)) ")

拦截CategoryAction.delete方法

并在执行完delete之后执行AOP中的delete方法

实现删除栏目后并删除文章对应的静态化文件

deleteCategoryHtml方法没有对传入的categoryPath做任何过滤,因此可以实现任意文件删除

在内容管理->栏目管理处删除栏目并打断点调试

该方法会提取传入参数中的categoryPath

并调用deleteCategoryHtml方法

其中htmlPath为webapp目录下的html目录

appDir为web

最后拼接的路径为:

src/main/webapp/html/web/gywm/gongsijieshao

因此我们可以控制categoryPath,使其删除webapp目录下的1.txt文件:

删除成功

标签:审计,文件,5.2,调用,MCMS,ms,net,mingsoft,上传
From: https://www.cnblogs.com/KakeruJ/p/18333353

相关文章

  • [EIS 2019]EzPOP 代码审计 死亡绕过
    点击查看代码<?phperror_reporting(0);classA{protected$store;protected$key;protected$expire;publicfunction__construct($store,$key='flysystem',$expire=null){$this->key=$key;$this->sto......
  • Bitwig Studio for Mac(音乐创作软件)v5.2版
    bitwigstudiomac中的每个设备都是使用应用程序中集成的模块化系统内部设计的。我们选择的设备展示了BitwigStudio的引擎盖下隐藏的力量。这种广泛的设备将涵盖从微妙到极端的所有声音设计需求。BitwigStudioforMac(音乐创作软件)v5.2激活版软件地址BitwigStudiofo......
  • VMware Fusion Pro 虚拟机 免费了附最新版 13.5.2-23775688 下载地址
    VMwareFusionPro可以帮助用户在Mac上安装Windows、Linux等多种操作系统,最重要的是无需重启电脑切换系统,可以和MacOS系统同时运行,就类似于MacOS安装了一个应用。对于家庭用户来说足够简单,对于IT专业人员,开发人员和企业来说足够强大。VMwareFusionPro是一款强大的......
  • 使用 @Audited 增强Spring Boot 应用程序的数据审计能力
    介绍在SpringBoot开发的动态世界中,确保数据完整性和跟踪变化是至关重要的。实现这一目标的一个强大工具是@Audited注解。本文深入探讨了该注解的复杂性、其目的、实现步骤以及如何利用其功能进行有效的实体审计。理解@AuditedSpringBoot中的@Audited注解用于审计实体,提供对数......
  • 【中项】系统集成项目管理工程师-第5章 软件工程-5.1软件工程定义与5.2软件需求
    前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。     软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”,目前涵盖了计算机软件、计算机网络、计算机应用技术......
  • java代审中对jar包的审计
    在代码审计中,java比较特殊,相比于php这种纯脚本文件驱动,java还可以使用内置虚拟机驱动(如比较新的spring技术),这就常常涉及到jar包。之前都是跳过jar包,以为jar包里面就是一些框架性的东西,但是其实,有些jar包就是作者为系统专门编写或修改的,其中被引用的方法也是可能被直接引用,所以......
  • 财务审计保密措施!企业应该如何守护敏感财务信息呢?
    古语有云,“财不露白,密不示人。”此言道出了财务信息之敏感与重要,需深藏不露,以防不测。在当今商业社会中,财务信息不仅是企业运营的命脉,更是市场竞争中的核心机密。企业若欲稳健前行,必当视财务信息为珍宝,采取周密的保密措施,以防泄露之虞。本文将以安企神软件为例,探讨企业如何通......
  • 某个OA系统的代码审计
    2023年HVV中爆出来的洞了,但是有一些漏洞点修复了,刚好地市级的攻防演练中遇到了一个,想着把可能出现问题的点全部审计一下,顺便熟悉一下.net代码审计。ps:感兴趣的师傅们可以自行根据poc搜索源码。0x1反编译好吧,当我没说,下载dnspy反编译即可,但是首先要找到web逻辑代码才能开始审计......
  • ABP vNext—审计日志使用
    ABPvNext—审计日志关于审计日志开启审计日志如何自定义审计日志关于审计日志审计跟踪(也称为审核日志)是一个安全相关的时间顺序记录,记录这些记录的目的是为已经影响在任何时候的详细操作,提供程序运行的证明文件记录、源或事件。ABP提供了能够为应用程序交互自动记......
  • 运维防背锅的办法之一:做好审计
    需求运维工程师在工作中经常会遇到这样的问题:服务器的文件被删除了,谁干的?服务器的整个服务被删除了,谁干的?服务器上启动了一个奇怪的进程占据了大量的CPU,谁干的?这个时候,如果我们找不到始作俑者,那毫无疑问得运维自己背锅。如果有证据证明是别人干的,我们才能坦然地(甩锅)找到......