FastJson 1.2.24 反序列化 RCE 漏洞如何进行代码审计分析?
摘要:代码审计 | FastJson 1.2.24 反序列化 RCE 漏洞分析 本文从环境搭建出发,一步一步分析 FastJson 反序列化 RCE 的完整利用链,并结合调试断点深入分析底层代码执行逻辑。 目录 漏洞背景 环境准备 搭建 Mave
代码审计 | FastJson 1.2.24 反序列化 RCE 漏洞分析
本文从环境搭建出发,一步一步分析 FastJson 反序列化 RCE 的完整利用链,并结合调试断点深入分析底层代码执行逻辑。
目录
漏洞背景
环境准备
搭建 Maven 项目
FastJson @type 机制初探(User 例子)
parseObject 两种调用方式的本质区别
PoC 复现:JdbcRowSetImpl 利用链
底层代码调试分析
完整漏洞链路总结
修复建议
一、漏洞背景
FastJson 是阿里巴巴开源的高性能 JSON 解析库,广泛用于 Java 后端项目。
漏洞版本:≤ 1.2.24
核心原因是 @type 字段允许任意类加载,攻击者可以通过在 JSON 数据中指定恶意类,触发该类的危险方法,最终实现远程代码执行(RCE)。
简单来说,FastJson 在解析 JSON 的时候,如果发现有 @type 这个字段,它会把里面的值当作类名,直接去加载这个类——而且没有任何白名单限制。这个设计在 1.2.24 及以下版本是完全开放的,给了攻击者可乘之机。
二、环境准备
测试环境:
JDK:java 8u64
⚠️ 这里必须用低版本 JDK,原因很关键:从 JDK 8u191 开始,Java 对 JNDI 远程类加载做了限制(com.sun.jndi.rmi.object.trustURLCodebase 默认设为 false),也就是说高版本 JDK 直接阻断了通过 RMI 加载远程恶意类这条路。所以要复现这个漏洞,必须用 8u191 以下的版本。
FastJson 版本:1.2.24
相关资源:
JNDI 注入利用工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
FastJson 1.2.24 依赖:https://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.24/
FastJson 1.2.27(对比参考):https://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.27/
三、搭建 Maven 项目
第一步:建 Maven 项目
第二步:添加 FastJson 依赖
在 pom.xml 的 </properties> 后面加入以下依赖:
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.24</version>
</dependency>
</dependencies>
第三步:下载依赖
依赖下载成功后可以看到:
四、FastJson @type 机制初探(User 例子)
在正式打漏洞之前,先搞懂 @type 到底是干什么的,用一个简单的自定义类来演示。
