首页 > 编程语言 >java代审中对jar包的审计

java代审中对jar包的审计

时间:2024-07-24 16:33:15浏览次数:13  
标签:包中 文件 java 代审 jar 源码 上传

在代码审计中,java比较特殊,相比于php这种纯脚本文件驱动,java还可以使用内置虚拟机驱动(如比较新的spring技术),这就常常涉及到jar包。
之前都是跳过jar包,以为jar包里面就是一些框架性的东西,但是其实,有些jar包就是作者为系统专门编写或修改的,其中被引用的方法也是可能被直接引用,所以对jar包的审计其实等同于对显式源码审计,从前常常忽略了这一点,所以这里使用铭飞cms进行一个审计演示
使用铭飞cms5.2.4,地址https://gitee.com/mingSoft/MCMS
这里主要针对几个涉及到jar包的审计,所以其他常规的就先不做分析

1.jar包中隐藏的文件上传接口
首先在后台发现一处上传模板的功能点

抓包中,发现其路由为
/ms/file/uploadTemplate.do

在源码中搜索uploadTemplate,这个时候却没有发现有对应的源码,无论是路由mapping还是方法名皆无,这个时候就需要考虑到jar包中是否有对应源码

双击shift搜索

注意到 @PostMapping("/uploadTemplate") ,这个路由匹配正是在jar包中的类/repository/net/mingsoft/ms-basic/2.1.8/ms-basic-2.1.8-sources.jar!/net/mingsoft/basic/action/ManageFileAction.java
中找到的

其中存在非法路径检测

检测上传路径中是否存在../或者..\这种目录穿越

后面是统一上传文件方法upload

很明显这其中存在后缀检测,毕竟是统一上传方法,但是这里允许上传压缩包,所以很明显应该也存在解压接口


上传包含危险文件的压缩包,利用解压接口解压实现任意文件上传

这里的解压文件接口也是在jar包中的,可见这里对于jar包的直接利用是比较多的

这里的解压接口也是存在路径检测,否在在部署了tomcat的情况下,可以直接把jsp解压到tomcat目录下,这样就可以解析jsp文件拿到权限了,不然这样一个后台的spring任意文件上传比较尴尬

从黑盒角度来说,我是很想测一测这个fileurl有没有ssrf,可惜源码中解析文件是按文件路径来的

2.在同界面中还有个模板写入
/repository/net/mingsoft/ms-basic/2.1.8/ms-basic-2.1.8-sources.jar!/net/mingsoft/basic/action/TemplateAction.java

没错,源码中大部分细节性的方法都写在jar包里面,甚至于在显式代码中存在定义方法的类只有四个

jar包中文件写入的逻辑大致就是oldfilename,filename,filecontent这几个参数作为文件写入方法的参数,其中没有路径校验,没有内容校验,但是有后缀校验。jsp这种就不要想了,因为可以控制路径,将filename设置为/static/xss.htm传到静态目录下做个存储型xss也行

3.sql注入
直接在xml文件中搜索,在
net/mingsoft/cms/dao/IContentDao.xml中发现一处比较明显的

在相应的同名接口中没有定义对应的方法名query

其父类ibasedao中存在query方法

这时就需要去找对应方法的应用了
比如这里

使用的是 contentBiz 的方法query,而contentBiz是icontentbiz类

icontentbiz类又继承了ibasebiz

而ibasebiz是ibasedao数据接口层对应的业务逻辑层,所以这里也就是相当于调用了ibasedao中的query方法
contentbean应该是封装了数据,所以在postdata中构造payload即可
categoryId=-1'and extractvalue(0x7e,concat(0x7e,(database())))+--+

标签:包中,文件,java,代审,jar,源码,上传
From: https://www.cnblogs.com/hyyy31/p/18321157

相关文章

  • Java学习笔记(三)算术运算符、逻辑运算符、四种进制介绍
    Hii,mJinXiang⭐前言⭐本篇文章主要介绍Java算术运算符、逻辑运算符、四种进制介绍详细使用以及部分理论知识......
  • JavaScript 基础知识
    JavaScript是一种编程语言,可为您的网站增加交互性。这发生在游戏中,在按下按钮或在表单上输入数据时的响应行为中;具有动态样式;带有动画等。本文可帮助您开始使用JavaScript,并进一步了解可能的情况。什么是JavaScript?JavaScript 是一种功能强大的编程语言,可以为网站......
  • Java学习笔记(七)面向对象编程(中级部分)
    Hii,mJinXiang⭐前言⭐本篇文章主要介绍Java面向对象编程(中级部分)包、访问修饰符、封装、继承、super关键字、多态、向上(下)转型、equals、hashCode、断点调试等知识的详细使用以及部分理论知识......
  • 学习Java的日子 Day56 数据库连接池,Druid连接池
    Day561.数据库连接池理解:池就是容器,容器中存放了多个连接对象使用原因:1.优化创建和销毁连接的时间(在项目启动时创建连接池,项目销毁时关闭连接池)2.提高连接对象的复用率3.有效控制项目中连接的个数(连接对象占内存资源)数据库连接池负责分配、管理和释放数据库连接......
  • Java 内存模型
    Author:ACatSmilingSince:2024-07-24概念Java内存模型:JavaMemoryModel,简称JMM,是Java语言中定义的一组规则和规范,用于解决多线程环境下的内存可见性和有序性问题。JMM确定了线程之间如何通过内存进行交互,并规定了变量的读取和写入操作的行为。JMM能干吗?通过JMM来......
  • java8interface的新特性:default,static,funcation
    default:默认方法在类接口中可以直接定义的方法,实现接口的类可以直接使用使用案例:publicinterfaceMyInterface{defaultvoiddisplay(){System.out.println("Thisisdefaultmethod.");}}说明:被default修饰的方法可以不被子类实现。即在......
  • Jenkins下配置java的静态代码检测:findbugs、pmd及checkstyle实现代码自动检测
    一、插件介绍工具目的检查项FindBugs检查.class基于BugPatterns概念,查找javabytecode(.class文件)中的潜在bug主要检查bytecode中的bugpatterns,如NullPoint空指针检查、没有合理关闭资源、字符串相同判断错(==,而不是equals)等Duplicatecode帮助开......
  • Java基础编程500题——综合练习
    ......
  • 数据结构(Java):Map集合&Set集合&哈希表
    目录1、介绍1.1 Map和Set1.2模型2、Map集合2.1Map集合说明2.2 Map.Entry<K,V>2.3Map常用方法2.4Map注意事项及实现类 3、Set集合3.1Set集合说明 3.2 Set常用方法 3.3Set注意事项及其实现类4、TreeMap&TreeSet4.1集合类TreeMap(Key-Value模型)4.1.1底......
  • 几个适合Java开发者的免费IDEA插件
    今天,给大家推荐几个好用且免费的IntelliJIDEA插件。如果你还没有用过,可以尝试一下,也许对你的日常工作会有一定的效率提升噢!RestFulTool如果你是一个RESTful服务的开发者,那么这个一定要试一下。它是一套非常丰富的RESTful服务开发工具,对SpringMVC和SpringBoot支持也是......