Java反序列化之commons-beanutils分析

简介:

TemplatesImpl类是一个可序列化的类,其中有一个属性_bytecodes,里面保存的数据在defineTransletClasses函数里将会被加载成类:
Java反序列化之commons-beanutils分析
Java反序列化之commons-beanutils分析

存在着这样一条调用链条:
Java反序列化之commons-beanutils分析
简单来说,只要是能调用到getOutputProperties函数,就能触发包含在_bytecodes里的类构造函数被执行(这个类是由攻击者来实现的)。

Payload第一部分:
Java反序列化之commons-beanutils分析
创建了一个BeanComparator对象,将其作为参数用来创建一个PriorityQueue,向queue对象中添加两个大整数对象(占位用)。
接着通过反射机制设置了comparator后面将会对比对象的属性为outputProperties。

Payload第二部分:
Java反序列化之commons-beanutils分析
通过反射机制修改queue中数组保存的对比对象为内置了攻击代码的templates。
返回queue,将其生成序列化数据。

漏洞触发逻辑:
反序列化的queue的时候,其对应的PriorityQueue类readObject函数会依次读取序列化数据中的元素,放入到队列中。然后,调用heapify函数进行排序操作。
Java反序列化之commons-beanutils分析
最终,会调用到siftDownUsingComparator函数,其中会调用comparator的compare方法:
Java反序列化之commons-beanutils分析
compare方法中将会调用被对比对象的对应属性get方法,这里的o1,o2就是之前传入的templates对象,this.property就是之前通过反射机制修改的outputProperties。因此,最终就调用了TemplatesImpl的getOutputProperties函数,触发POC代码执行:
Java反序列化之commons-beanutils分析

Java反序列化之commons-beanutils分析













本文转自fatshi51CTO博客,原文链接: http://blog.51cto.com/duallay/2050088,如需转载请自行联系原作者



相关文章
|
3月前
|
安全 Java 编译器
new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析
逃逸分析是一种静态程序分析技术,用于判断对象的可见性与生命周期。它帮助即时编译器优化内存使用、降低同步开销。根据对象是否逃逸出方法或线程,分析结果分为未逃逸、方法逃逸和线程逃逸三种。基于分析结果,编译器可进行同步锁消除、标量替换和栈上分配等优化,从而提升程序性能。尽管逃逸分析计算复杂度较高,但其在热点代码中的应用为Java虚拟机带来了显著的优化效果。
130 4
|
1月前
|
存储 Java Go
【Java】(3)8种基本数据类型的分析、数据类型转换规则、转义字符的列举
牢记类型转换规则在脑海中将编译和运行两个阶段分开,这是两个不同的阶段,不要弄混!
190 2
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
143 1
|
1月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
201 1
|
1月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
161 1
|
2月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
3月前
|
机器学习/深度学习 安全 Java
Java 大视界 -- Java 大数据在智能金融反洗钱监测与交易异常分析中的应用(224)
本文探讨 Java 大数据在智能金融反洗钱监测与交易异常分析中的应用,介绍其在数据处理、机器学习建模、实战案例及安全隐私等方面的技术方案与挑战,展现 Java 在金融风控中的强大能力。
|
4月前
|
存储 Java 大数据
Java 大视界 -- Java 大数据在智能家居能源消耗模式分析与节能策略制定中的应用(198)
简介:本文探讨Java大数据技术在智能家居能源消耗分析与节能策略中的应用。通过数据采集、存储与智能分析,构建能耗模型,挖掘用电模式,制定设备调度策略,实现节能目标。结合实际案例,展示Java大数据在智能家居节能中的关键作用。
|
5月前
|
存储 Java 编译器
说一说关于序列化/反序列化中的细节问题
我是小假 期待与你的下一次相遇 ~
103 1
|
5月前
|
JSON Java 数据库连接