文章插图
readObject0 方法以字节的方式去读,如果读到 0x73,则代表这是一个对象的序列化数据,将会调用 readOrdinaryObject 方法进行处理

文章插图
【1 Java安全之反序列化】
readOrdinaryObject 方法会调用 readClassDesc 方法读取类描述符,并根据其中的内容判断类是否实现了 Externalizable 接口,如果是,则调用 readExternalData 方法去执行反序列化类中的 readExternal,如果不是,则调用 readSerialData 方法去执行类中的 readObject 方法
文章插图
在
readSerialData 方法中,首先通过类描述符获得了序列化对象的数据布局 。通过布局的 hasReadObjectMethod 方法判断对象是否有重写 readObject 方法,如果有,则使用 invokeReadObject 方法调用对象中的 readObject
文章插图
我们就了解了反序列化漏洞的触发原因 。与反序列漏洞的触发方式相同,在序列化时,如果一个类重写了
writeObject 方法,并且其中产生恶意调用,则将会导致漏洞,当然在实际环境中,序列化的数据来自不可信源的情况比较少见 。那接下来该如何利用呢?我们需要找到那些类重写了
readObject 方法,并且找到相关的调用链,能够触发漏洞 。经验总结扩展阅读
- 电热水龙头安全吗?
- 金盾防盗门怎么样?
- 关于.Net和Java的看法-一个小实习生经历
- Java安全之Resin2内存马
- SimpleDateFormat线程安全问题排查
- 游泳别穿白色泳衣 穿什么颜色的泳衣更安全
- 你认为代餐食品安全吗 代餐减肥的原理是什么
- 201不锈钢餐具安全吗
- 请问苹果手机怎么样(苹果手机的安全性怎么样)
- 地插座安全吗?
