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

继续阅读