Fastjson反序列化Groovy+Commons-io文件写入
内容提要
本文分析了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等类进行文件写入。