🗒️Insecure Deserialization序列化
2021-7-2
| 2023-4-12
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password
Insecure Deserialization

序列化概念

序列化是将复杂的数据结构(如对象及其字段)转换为“更扁平”的格式的过程,该格式的数据可以作为字节流序列发送和接收。序列化的数据让以下过程更简单:
将复杂数据写入进程间内存、文件或数据库 发送复杂数据,例如,通过网络或API调用,在应用程序的不同组件之间传递复杂数据
Java 序列化是指把 Java 对象转换为字节序列的过程,以便于保存在内存、文件、数据库中,ObjectOutputStream类的 writeObject() 方法可以实现序列化。
反序列化是与序列化相反的过程. Gadgets Chain 一个在它自己执行反序列化时执行危险操作的类(这里称之为gadget)是很少见的 但是找到一个在反序列化时会作用到其他gadget的gadget却很常见 并通常会带来更多的作用效果 一个作用到下一个,直到真正的危险操作被执行 这一串类,我们称之为Gadgets Chain 寻找gadget来构筑可利用的gadgets chain是安全研究人员的一个热门话题 这通常需要大量的时间去阅读代码

Java中的序列化和反序列化

api: java.io.ObjectOutputStream
java.io.ObjectIutputStream
序列化
  • -- java.io.ObjectOutputStream类—》writeObject()
  • --该方法对参数指定的obj对象进行序列化,把字节序列写到一个目标输出流中,按照Java的标准约定是给文件一个.ser扩展名
反序列化
  • -- java.io.ObjectIutputStream类—》readObject()
  • --该方法从一个源输入流中读取字节序列,再把他们反序列化成一个对象,并将其返回

序列化实现

实现serializable接口 但是使用transient可以排除序列化 example: private transient int age; 安全问题: 只要服务端反序列化数据,客户端传递类的readObject中代码会自动执行,给予攻击者在服务器上运行代码的能力。 形式 1.入口类的readObject直接调用危险方法。 2.入口类参数中包含可控类,该类有危险方法,readObject时调用。 3.入口类参数中包含可控类,该类又调用其他有危险方法的类,readObject时调用。 比如类型定义为Object,调用equals/hashcode/toString 重点相同类型同名函数 4.构造函数/静态代码块等类加载时隐式执行。
 
 
WebGoat靶场通关
  • 靶场
  • docker常用操作CSRF跨域攻击
    目录