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方法,形成完整的调用栈。
➡️