1 FastJson介绍
Fastjson 是阿里巴巴开源的 Java 库,用于将 Java 对象转换为 JSON 字符串,以及将 JSON 字符串转换为 Java 对象。这个库的一个关键特性是它的反序列化能力,即将 JSON 字符串转换回 Java 对象。
把一个Java对象转换成字符串,有两种选择:
1)基于属性
fastjson引入了AutoType,即在序列化的时候使用@type字段,标注了类对应的原始类型,方便在反序列化的时候定位到具体类型。


2)基于setter/getter
当我们要对他进行序列化的时候,fastjson会扫描其中的getter方法,即找到getName和getFruit,这时候就会将name和fruit两个字段的值序列化到JSON字符串中。

![]()
这个特性也带来了安全风险,特别是在 Fastjson 版本 1.2.24 及之前,存在一个反序列化漏洞,允许攻击者执行远程代码。
Fastjson 在反序列化时,会读取 JSON 中的 @type 字段来确定对象的类型,并调用相应类的 setter 方法。这个过程中,如果 @type 被恶意构造,攻击者可以指定任意类库,通过精心构造的 JSON 字符串,触发恶意行为。
2 fastjson<=1.2.24
2.1 介绍
fastjson(v1.2.25 之前)的AutoType是默认开启的,也没有什么限制。 可以利用autoType这个特性,自己构造一个JSON字符串,并且使用@type指定一个自己想要使用的攻击类库。
比如利用com.sun.rowset.JdbcRowSetImpl这个类的dataSourceName传入一个rmi的源。
{"@type":"com.sun.rowset

本文详细介绍了FastJson的AutoType特性及其在版本1.2.24及以前存在的安全问题。攻击者可以利用AutoType功能构造恶意JSON字符串,触发JNDI注入攻击。通过启动RMI服务器并指定远程类加载,可能导致代码执行。FastJson在后续版本中对此进行了修复,但攻击者不断寻找新的绕过方式。文章还展示了漏洞利用的调用栈,并提供了不同版本的exploit示例。
1957

被折叠的 条评论
为什么被折叠?



