Fastjson
简介
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。
Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。
Fastjson 源码地址:https://github.com/alibaba/fastjson
Fastjson 中文 Wiki:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN
特性
1 提供服务器端、安卓客户端两种解析工具,性能表现较好。
2 提供了 toJSONString() 和 parseObject() 方法来将 Java 对象与 JSON 相互转换。调用toJSONString方 法即可将对象转换成 JSON 字符串,parseObject 方法则反过来将 JSON 字符串转换成对象。
3 允许转换预先存在的无法修改的对象(只有class、无源代码)。
4 Java泛型的广泛支持。
5 允许对象的自定义表示、允许自定义序列化类。
6 支持任意复杂对象(具有深厚的继承层次和广泛使用的泛型类型)
漏洞
远程代码执行漏洞1(CNVD-2017-02833 )
介绍
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
影响版本
Fastjson<1.2.24
防护
更新fastjson版本
远程代码执行漏洞2(CNVD-2019-22238)
介绍
fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。
影响版本
Fastjson<1.2.48
防护
更新fastjson版本
远程代码执行漏洞3
介绍
FastJSON <= 1.2.68 存在远程代码执行漏洞,可直接获取到服务器权限。漏洞成因是Fastjson autotype开关的限制可被绕过,然后链式地反序列化某些原本不能被反序列化的有安全风险的类。
影响版本
FastJSON <= 1.2.68
防护
更新fastjson版本,关闭autotype改用白名单,更新jdk(不太现实)
远程拒绝服务漏洞
介绍
Fastjson多个版本存在远程拒绝服务漏洞,Fastjson 1.2.60版本以下存在字符串解析异常,可导致远程拒绝服务攻击。攻击者即可通过精心构造的请求包对使用Fastjson的服务器造成远程拒绝服务攻击,可导致服务器宕机。
影响版本
fastjson <1.2.60
fastjson sec版本>=sec06
防护
更新fastjson版本
指纹识别
若有报错回显,可以故意构造不完整json请求,返回的数据包会进行报错。
若无报错回显,利用dnslog进行回显
总结
为保证安全,尽量使用、更新最新版本的fastjson。