一、前言
在JDK7u21
中反序列化漏洞修补方式是在AnnotationInvocationHandler
类对type属性做了校验,原来的payload就会执行失败,在8u20中使用BeanContextSupport
类对这个修补方式进行了绕过。
二、Java序列化过程及数据分析
在8u20的POC中需要直接操作序列化文件结构,需要对Java序列化数据写入过程、数据结构和数据格式有所了解。
先看一段代码
|
import java.io.Serializable; public class B implements Serializable { public String name = "jack"; public int age = 100; public B() { } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
import java.io.*; public class A extends B implements Serializable { private static final long serialVersionUID = 1L; public String name = "tom"; public int age = 50; public A() { } public static void main(String[] args) throws IOException { A a = new A(); serialize(a, "./a.ser"); } public static void serialize(Object object, String file) throws IOException { File f = new File(file); ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f)); out.writeObject(object); out.flush(); out.close(); } } |
运行A类main方法会生成a.ser文件,[......]
Read more