JAVA审计之反序列化漏洞-ONE

JAVA审计之反序列化漏洞-ONE

本文主要探究反序列化漏洞出现的原因是什么!超详解!安全开发

JAVA 序列化反序列化的概念

01什么是反序列化

把对象转换为字节序列的过程称为对象的序列化。序列化是为了将数据转化成字节流,以便存储在文件中或在网络上传输。

把字节序列恢复为对象的过程称为对象的反序列化。反序列化就是开打字节流并重构对象。

02为什么要反序列化

当两个进程进行通信时,可以相互发送各种类型的数据(文本,音频等)这些数据会以二进制序列的形式在网络上传输。当java进程通信时是否能实现进程间的对象传输,这时候就需要Java的序列化和反序列化了。

序列化and反序列化代码详解

1我们进行一段简单代码的编写,演示一下java进行序列化和反序列化的原因:

这是一个普通的java类

在 Java 中实现了 Serializable 接口后, JVM 会在底层帮我们实现序列化和反序列化, 如果我们不实现 Serializable 接口, 那自己去写一套序列化和反序列化代码也行。

序列化:

上面说到必须实现Serializable接口,我们不实现这个接口试一下:修改Person.java代码去掉implements Serializable:运行SerializationTest.java:

反序列化:

用transient关键字修饰该属性来阻止被序列化:把Person.java中的private String name;修改成private transient String name;

可以看到name属性无法被反序列化了。

反序列化漏洞原

反序列化的自动执行特性:Java反序列化的过程中,对象的构造(readObject()方法)和内部数据的还原是自动触发的,无需开发者调用。

如果反序列化的类重写了readObject()方法,该方法会在反序列化时自动执行,成为攻击入口

反序列化漏洞代码详解

重写readObject()方法

成功执行命令:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值