Fastjson反序列化Groovy+Commons-io文件写入

💡 原文中文,约10200字,阅读约需25分钟。
📝

内容提要

本文分析了fastjson在1.2.69至1.2.80版本中的文件写入漏洞,结合Groovy和Commons-io库,探讨了在Windows和Linux环境下的利用方法。作者优化了利用链,指出不同版本和系统对成功率的影响,并提供了多种POC示例,最后讨论了后端指定类的处理方法。

🎯

关键要点

  • 本文分析了fastjson在1.2.69至1.2.80版本中的文件写入漏洞。

  • 结合Groovy和Commons-io库,探讨了在Windows和Linux环境下的利用方法。

  • 作者优化了利用链,指出不同版本和系统对成功率的影响。

  • 提供了多种POC示例,展示如何在不同环境下进行文件写入。

  • Windows环境下可以写入二进制文件,而Linux环境下只能写入文本文件。

  • 利用链子分版本,Commons-io的不同版本参数名称不一致可能导致利用失败。

  • 在反序列化时,fastjson选择构造函数的逻辑影响成功率。

  • 在实战环境中,后端指定类可能导致POC无法成功写入。

  • 针对后端指定类的情况,可以通过将$.a换为$.null来成功写入。

延伸问答

fastjson的文件写入漏洞是在哪些版本中存在的?

fastjson的文件写入漏洞存在于1.2.69至1.2.80版本中。

在Windows和Linux环境下,fastjson的文件写入有什么不同?

在Windows环境下可以写入二进制文件,而在Linux环境下只能写入文本文件。

如何优化fastjson的利用链以提高成功率?

优化利用链时需要考虑不同版本的Commons-io和构造函数的选择逻辑,以提高成功率。

在反序列化时,fastjson如何选择构造函数?

fastjson在反序列化时,如果存在无参构造函数则选择无参构造函数,否则选择有参构造函数,并优先选择参数最多的一个。

如何在后端指定类的情况下成功写入文件?

可以通过将$.a换为$.null来成功写入文件,避免与后端指定类的冲突。

提供一些POC示例以展示如何利用fastjson漏洞?

示例POC包括使用groovyjarjarantlr.CharScanner和org.apache.commons.io.input等类进行文件写入。

➡️

继续阅读