Skip to content

Latest commit

 

History

History
48 lines (32 loc) · 1.94 KB

deserialization.md

File metadata and controls

48 lines (32 loc) · 1.94 KB

反序列化

0x00 Java序列化和反序列化

Java 序列化:把 Java 对象转换为字节序列的过程便于保存在内存、文件、数据库中,ObjectOutputStream类的 writeObject() 方法可以实现序列化。 Java 反序列化:把字节序列恢复为 Java 对象的过程,ObjectInputStream 类的 readObject() 方法用于反序列化。

一个类的对象要想序列化成功,必须满足两个条件:

  1. 该类必须实现 java.io.Serializable 接口。
  2. 该类的所有属性必须是可序列化的。如果有一个属性不是可序列化的,则该属性必须注明是短暂的。

0x01 Java反序列化漏洞成因

  1. 反序列化数据输入点
  2. 反序列化操作触发函数(类似PHP魔法函数)
  3. 漏洞利用执行函数序列

0x02 Java反序列化基础知识

这篇文章Java 中的序列化和反序列化从编程的角度把反序列化讲的很清楚。

0x03 如何发现反序列化漏洞

反序列化函数

ObjectInputStream.readObject
ObjectInputStream.readUnshared
XMLDecoder.readObject
Yaml.load
XStream.fromXML
ObjectMapper.readValue
JSON.parseObject

Ref