fastjson中JSONArrayJSONObject中toString方法触发getter的原理(有例题)
💡
原文中文,约3800字,阅读约需9分钟。
📝
内容提要
本文介绍了利用fastjson反序列化过程中调用getter方法进行JNDI注入的方法,重写ObjectInputStream#resolveClass方法进行安全性检查,详细分析了调用getter流程。
🎯
关键要点
-
本文介绍了利用fastjson反序列化过程中调用getter方法进行JNDI注入的方法。
-
常规的fastjson利用是通过autoType解析json串调用getter/setter方法。
-
在没有json串解析入口的情况下,仍然可以利用反序列化点进行攻击。
-
出题者重写了ObjectInputStream类中的resolveClass方法进行安全性检查。
-
MyBean类是攻击的关键点,通过构造POC实现JNDI注入。
-
利用链包括BadAttributeValueExpException#readObject、JSONArray#toString等。
-
JSONArray类的toString方法触发getter方法,是攻击的关键。
-
调用getter流程涉及JSONSerializer#write和ObjectSerializer的实现。
-
通过createJavaBeanSerializer方法动态生成JavaBeanSerializer类。
-
动态生成的类能够执行JavaBean类的getter方法,形成完整的调用栈。
➡️