JAVA反序列化漏洞浅析
JAVA反序列化与ObjectInputStream
关于ObjectOutputStream:
ObjectOutputStream:对象的序列化流,作用:把对象转成字节数据的输出到文件中保存,对象的输出过程称为序列化,可实现对象的持久存储。
关于ObjectInputStream:
ObjectInputStream 反序列化流,将之前使用 ObjectOutputStream 序列化的原始数据恢复为对象,以流的方式读取对象。
在JAVA中,利用ObjectinputStream的readObject方法进行对象读取时,如果,目标对象已经重写了readObject方法,那么此时就会执行已经被重写的readObject如下:
1 | //创建一个MyObj类,此时MyObj类需要继承Serializable才能进行序列化和反序列化 |
1 | //main方法,将新的MyObj对象序列化后写入object文件,之后反序列化后再读取出来 |
点击运行后,发现输出了“haha wocao”并执行了calc命令
![](2022-06-15 154047.png)
可见在反序列化时,可能会给恶意代码提供可乘之机
如果反序列化执行的是恶意构造的字节序列,那么漏洞就产生了
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Don_Joshua's Blog!