序列化是Java提供的一种对象持久化保存的技术。常规对象在程序结束后会被回收,如果想把对象持久保存方便下次使用,需要序列化和反序列化。
序列化有两个前提:
- 类必须实现java.io.serializable接口
- 类所有字段都必须是可序列化的
反序列化漏洞利用原理
1. 利用重写ObjectInputStream的readObject
重写ObjectInputStream的readObject方法时,可执行恶意代码。定义一个类,并实现serializable接口:
public class User implements Serializable { public String name; public int age; public String getUserInfo(){ return "user name: "+this.name +" age: "+this.age; } }