首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

说说JAVA反序列化

实战中,利用 Java 反序列化实现远程命令执行的案例增长趋势明显,同时,WebLogic、 WebSphere、 JBoss、 Shiro等框架也都先后受到反序列化漏洞的影响,不安全的反序列化漏洞也已被列入...0x01 关于JAVA序列化和反序列化 序列化是把对象转换为字节序列的过程,反序列化是把字节序列恢复为对象的过程。...由于 JAVA生态的原因,开发者会引用大量开源组件和第三方组件,JAVA标准库及大量第三方公共类库成为反序列化漏洞利用的关键。...JAVA 常见的序列化和反序列化的方法有JAVA 原生序列化和 JSON 类(fastjson、jackson)序列化。本文对JAVA原生反序列化进行讨论,JSON类序列化后续将介绍。...0x02 JAVA反序列化漏洞原理 如果JAVA应用对用户输入,即不可信数据做了反序列化处理,那么攻击者可以通过构造恶意输入,让反序列化产生非预期的对象,非预期的对象在产生过程中就有可能带来任意代码执行

77610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java 反序列化学习

    java序列化提供了一个private static final long serialVersionUID 的序列化版本号,只有版本号相同,即使更改了序列化属性,对象也可以正确被反序列化回来。...需要注意的是,Java 反序列化生成对象时,并不是反射调用原 Class 的无参构造函数,而是产生一种新的构造器。 如何利用?...从上面的反序列化过程中可以看到,Java 本身没有对传入的数据进行校验,也没有白名单、黑名单机制,如果一旦可控,则可以反序列化任意的类。...也就是说,readObject 其实是 Java 中的“魔术方法”,是反序列化漏洞利用中的入口。 入口有了,接着寻找目标即可。最想要的自然是 RCE,能进行任意文件读写也不错。...先介绍一下 Java 反序列化中的里程碑: https://github.com/frohoff/ysoserial URLDNS 该 Gadget 没有外部的依赖,全是Java的原生类,很适合用来做探测使用

    1.3K40

    Java反序列化漏洞

    Java反序列化漏洞通用利用分析 转自:https://blog.chaitin.cn/2015-11-11_java_unserialize_rce/ 背景 2015年11月6日,FoxGlove...确实,Apache Commons Collections这样的基础库非常多的Java应用都在用,一旦编程人员误用了反序列化这一机制,使得用户输入可以直接被反序列化,就能导致任意代码执行,这是一个极其严重的问题...Java反序列化漏洞简介 序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象。...所以这个问题的根源在于类ObjectInputStream在反序列化时,没有对生成的对象的类型做限制;假若反序列化可以设置Java类型的白名单,那么问题的影响就小了很多。...反序列化问题由来已久,且并非Java语言特有,在其他语言例如PHP和Python中也有相似的问题。

    1.1K30

    利用JAVA定积分

    Java 中,可以使用数学库 Math 中的方法来计算定积分或者其他数学表达式。本次需求是利用JAVA定积分,也就是编译一个自动计算定积分的函数。理论步骤首先理解什么是定积分?...根据定义,曲线面积,分成n个区间,即n个矩形,由于每个区间差都是一样的,可作为一个矩形的宽,矩形的长为每个区间的中点对应的函数,长和宽的乘积就是其中一个小矩形的面积,将n个小矩形的面积相加就是,该被积函数的积分...定义每个小区间的间隔差方法,即将范围分成n个等区间代码实践理论知识,已分析完成,那么接下来就用代码案例进行实现,比如计算表达式 f(x)=2*x*x+x 的定积分:package 高数;import java.util

    44710

    JAVA反序列化】序列化与反序列化&Java反射&URLDNS链

    原生序列化与反序列化 序列化:JAVA对象转换成字节序列的过程;将数据分解为字节流,以便存储在文件中或在网络上传输;用一个字节序列表示一个对象,该字节包含对象的数据、对象的类型、对象的存储属性。...序列化对象会通过ObjectOutputStream的writeObject方法将一个对象写入到文件中 反序列化:字节序列恢复成JAVA对象的过程;打开字节流并重构对象,反序列化是使用了readObject...当两个进程进行远程通讯时需要Java序列化与反序列化(可以相互发送各种数据,包括文本、图片、音频、视频等) 发送方需要把这个Java对象转换成字节序列(二进制序列的形式),然后在网络上传送,另一方面,接收方需要从字节序列中恢复出...由于这种动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期仍然可以扩展 让java具有动态性 修改已有对象的属性 动态生成对象 动态调用方法 操作内部类和私有方法 在反序列化漏洞中的应用...在一些漏洞利用没有回显的时候,我们也可以使用到该链来验证漏洞是否存在 原理 java.util.HashMap实现了Serializable接口,重写了readObject, 在反序列化时会调用hash

    15310

    Java反序列化(七) | CommonsCollectionsShiro

    CommonsCollectionsShiro CommonsCollectionsShiro单纯是CC链为了满足一些Shiro的反序列化条件而拼接改造的CC链, 所以具体详细过程就不展开分析了, 直接给...payload生成源码分析即可 CC1+CC6+CC3 Why is CC1+CC6+CC3 实际上在Shiro中的CC脸就是一个CC1+CC6+CC3的杂合链, 为什么是杂合链呢, 主要原因是 不能反序列化数组对象...用于构造通过CC3反序列化执行命令的恶意类 CommonsCollectionsShiro.java 获取恶意类数据流后写入杂合链中并最后返回序列化数据 Get_poc.java 调度前两个文件得到序列化数据后进行...; import java.io.ObjectOutputStream; import java.lang.reflect.Field; import java.util.HashMap; import...调度获取Evil的字节码并放入杂合链中获得反序列化数据后进行加密,输出加密结果 package POC_macker.CCShiro; import javassist.ClassPool; import

    35820

    Java反序列化(八) | CommonsBeanutilsShiro

    调用了getProperty, 所以下面找一下哪里调用了compare函数 优先队列调用compare(前) 早在CC2的时候我们就找过了compare的调用方法: 优先队列PriorityQueue反序列化的时候调用了...compare函数, 所以我们可以直接使用优先队列作为反序列化的出发点 java.util.PriorityQueue#readObject java.util.PriorityQueue#heapify..., (T) es[right]) > 0) CommonsBeanutils(前+中+后) – Gadget 所以我们可以将优先队列作为触发点进行三级跳板执行代码: 优先队列PriorityQueue反序列化执行...如果直接构造CB链去打Shiro的话会失败并且在后台看到报错显示无法加载CC依赖中的一个类, 这是因为我们使用默认的单参数构造函数的话会在后面使用生成一个CC包中的对象并将这个对象序列化, 所以在后面反序列化的时候加载这个....*; import java.lang.reflect.Field; import java.util.PriorityQueue; public class CommomsBeanutilsShiro

    36330

    JavaJava序列化和反序列化

    # Java中的序列化和反序列化 在Java中,序列化是将对象的状态写入字节流的机制。它主要用于Hibernate、RMI、JPA、EJB和JMS技术中。...反序列化是序列化的逆操作,即将字节流转换为对象。序列化和反序列化过程是平台无关的,这意味着您可以在一个平台上对对象进行序列化,在另一个平台上进行反序列化。...反序列化的例子 反序列化是从序列化状态重构对象的过程。...让我们看一个示例,其中我们从反序列化对象中读取数据。 Deserialization是从序列化状态重构对象的过程。它是序列化的逆操作。让我们看一个示例,其中我们从反序列化对象中读取数据。...发送方和接收方必须具有相同的SerialVersionUID,否则在反序列化对象时将抛出InvalidClassException。

    12110

    JAVA 序列化与反序

    JAVA序列化与反序列化 JAVA序列化是指把JAVA对象转换为字节序列的过程;反序列化是指把字节序列恢复为JAVA对象的过程。 接下来首先看一个简单的例子。...接下来运行此程序 接下来再自定义一下反序列化函数,反序列化与序列化相反即可,把Output换成Input,把write改为read,具体代码如下 package org.example; import...,可以发现 此时的name变成了null JAVA反序列化安全问题 为什么会产生漏洞 服务端进行反序列化数据时,会自动调用类中的readObject代码,给予了攻击者在服务器上运行代码的能力 可能形式...但它有以下优点: 1、使⽤ Java 内置的类构造,对第三⽅库没有依赖。 2、在⽬标没有回显的时候,能够通过 DNS 请求得知是否存在反序列化漏洞。 因此用它来测试反序列化漏洞是否存在是尤为合适的。...这样的话我们就无法判断是反序列化出来的URLDNS,还是序列化中的URLDNS,造成了干扰,此时我们该怎么办呢,我们可以看到这里的源头是因为**put()**,所以我们可以先不发送请求 #Serialization.java

    30020

    Java反序列化工具-marshalsec

    marshalsec是一款java反序列利用工具,其可以很方便的起一个ldap或rmi服务,通过这些服务来去访问攻击者准备好的恶意执行类来达到远程命令执行或入侵的目的。...should point to a JDK not a JRE:意思是JAVA_HOME应该指向jdk而不是jre。...下面给出解决办法: 通过命令:echo $JAVA_HOME来获取java的安装路径 编辑/etc/profile配置文件,重新配置JAVA_HOME的路径,给他重新配置jdk的路径 再次...:指定exploits,根目录下的java文件名 开启rmi服务 java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer...在vps上安装好marshalsec,开启rmi服务,并且将java恶意命令执行类上传到vps后开启访问服务。同时再vps上起nc监听端口。操作如下: 可以看见反弹成功!

    2.6K20

    浅析Java反序列化漏洞议题

    Java反序列化漏洞,来攻击最新版的WebLogic、WebSphere、JBoss、Jenkins、OpenNMS这些大名鼎鼎的Java应用,实现远程代码执行。...序列化与反序列化机制 序列化是让Java对象脱离Java运行环境的一种手段,可以有效的实现多平台之间的通信、对象持久化存储。...反序列化是指把字节序列恢复为 Java 对象的过程,ObjectInputStream 类的readObject()方法用于反序列化。...在前面抛出的一个问题里面,反序列化明明是一个Java当中再正常不过的机制,为什么会产生反序列化漏洞呢?...ysoserial地址:ysoserial ysoserial是一款在Github开源的知名java 反序列化利用工具,里面集合了各种java反序列化payload; poc代码: # -*-* coding

    51530
    领券