[Java代码审计]—MCMS
环境搭建
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
- contentBiz是IContentBiz类型的,IContentBiz的实现类是ContentBizImpl,接着他的父类
BaseBizImpl
实现了query方法 - 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()进行渲染,造成代码执行
[Java代码审计]—MCMS相关推荐
- 【网络安全】JAVA代码审计—— XXE外部实体注入
一.WEB安全部分 想要了解XXE,在那之前需要了解XML的相关基础 二.XML基础 2.1 XML语法 所有的XML元素都必须有一个关闭标签 XML标签对大小写敏感 XML必须正确嵌套 XML 文档 ...
- java代码审计文章集合
0x00 前言 java代码审计相关文章整理,持续更新. 0x01 java环境基础 搭建Java Web开发环境 配置IDEA编辑器开发java web,从0创建项目 IDEA动态调试 IDEA配置 ...
- java代码审计_Java代码审计入门篇
本期斗哥带来Java代码审计的一些环境和工具准备. Java这个语言相对于PHP来说还是比较复杂的,所以一开始接触到Java源码审计的时候会遇到一些关于环境和配置上一些困难,本文记录斗哥在开始去审计J ...
- java代码审计_Java代码审计| Spring框架思路篇
Java的WEB框架是Java进阶课程,当要进行Spring的漏洞分析,要有一定的Java代码知识储备. Java后端标准的学习路线:JavaSE->JavaEE->Java Web框架 ...
- java代码审计----win10安装docker
开始看<java代码审计> 第一先安装jdk 多版本jdk共存 安装docker win10安装docker docker官网下载desktop 安装后,docker启动不起来,小鲸鱼图标 ...
- 浅析Java代码审计中的SQL注入漏洞
浅析Java代码审计中的SQL注入漏洞 1.注入漏洞简介 2.SQL注入漏洞简介 3.JDBC拼接不当造成SQL注入 第一关:使用Statement 第二关:使用PrepareStatement 4. ...
- JAVA代码审计之WebGoat靶场SQL注入
文章目录 前言 WebGoat IDEA部署靶场 No.1 回显注入 No.2 布尔盲注 No.3 Order by 代审技巧 SQL注入挖掘 SQL注入防御 Fortify体验 总结 前言 为了从自 ...
- java代码审计中的一些常见漏洞及其特征函数
文章来源:https://xz.aliyun.com/t/1633 最近在先知上看到之前有篇关于java代码审计的文章总结的蛮好,记录以下特征函数,方便查阅,同时自己也会将在平时代码审计过程中积累的函 ...
- 文末送靶场邀请码 | 怎样快速入门Java代码审计?(一问一答汇总)
代码审计(Code Audit)是一种以发现安全漏洞.程序错误和违反程序规范为目标的源代码分析. 根据2020年10月份的CNVD安全月报显示,Web应用程序漏洞占比34%,显而易见Web应用程序仍然 ...
最新文章
- jvm性能调优 - 13JVM的年轻代垃圾回收器ParNew原理
- 交换机putty怎么调试_使用在300和500系列托管型交换机的一个控制台连接通过PuTTY访问CLI...
- ffmpeg-win32-v3.2.4 下载_iTOP-4412开发板android4.4代码下载和编译
- oFono学习笔记——GATChat(2):发送AT命令
- 野火开发版屏幕_鸿蒙2.0手机开发者版发布,华为多数自研设备明年升级鸿蒙
- opensource项目_Opensource.com生日快乐:开源7年
- 快速排序算法_经常用到的的排序(快速排序和归并排序)简单的计算机算法学习...
- 杂读 May 12,2008
- SnackbarUtils:一行代码搞定Snackbar
- 使用kermit通过串口升级uboot
- 《零秒工作》的一些总结
- python定义整型数组_Python数组定义方法
- 百度地图 LBS API 使用
- 【学习笔记】黑马程序员Java课程学习笔记(更新至第12章---集合)
- Airpods Pro连接Macbook Pro偶尔会没有声音
- 读书笔记,《刻意练习》,第四章,黄金标准
- Windows Update启动不了如何解决?教你快速修复
- Java身份证处理工具
- element-ui el-dialog拉伸
- 为什么我们要使用Notes Domino?
热门文章
- php隐藏指定id的div,CSS_纯css3显示隐藏一个div特效的具体实现,复制代码代码如下: !DOCTYPE H - phpStudy...
- TDD 测试驱动开发与精益
- 喜报:安科瑞电能质量在线监测装置取得国家电网检测报告
- 脚本_上传 ,azkaban系统,sqoop迁移数据指令(!缺失hiveToOds)
- php正则邮箱验证,php正则表达式验证邮箱
- 助力全球抗疫:3D突发公共卫生事件管理平台
- linux未被识别crond服务,crond服务不能启动
- 树莓派想使用 aptitude 解决依赖包问题,但是使用 apt-get 安装 aptitude 时出现依赖包错误怎么办?
- PostgreSQL 数据库备份与恢复介绍
- 知乎用户画像与实时数据架构实践