反序列化除了readObject 还有什么触发点
1. readResolve()
和 writeReplace()
这两个方法主要用于控制对象的序列化和反序列化过程,它们可以用来触发攻击链
- 原理:
writeReplace()
:这个方法在对象被序列化时调用。它允许开发者用另一个对象来替换即将被序列化的对象。攻击者可以利用这个方法,让一个无害的对象在序列化时被替换成一个恶意的对象readResolve()
:这个方法在对象被反序列化后调用。它允许开发者用另一个对象来替换刚刚反序列化得到的对象。攻击者可以利用这个方法,在反序列化时触发攻击链,例如调用一个可以触发 JNDI 注入的类
- 攻击链举例:
- 攻击者构造一个恶意的对象,这个对象的
readResolve()
方法被重写,用于返回一个可以触发 JNDI 注入的JdbcRowSetImpl
对象 - 当应用程序反序列化这个对象时,
readResolve()
方法会被自动调用,从而将攻击链的控制权转移到JdbcRowSetImpl
上,最终导致 RCE
- 攻击者构造一个恶意的对象,这个对象的