[java安全]fastjson>=1.2.36$ref引用可触发get方法分析(代码片段)

Y4tacker Y4tacker     2023-01-03     259

关键词:

写在前面

平时我们在处理fastjson反序列化的时候,如果我们想要执行属性的get方法,而如果只有JSON.parse怎么办
我们知道JSON.parse可以套一层parseObject实现对get方法的调用,但说这个也没有必要继续本篇的介绍了,这里介绍另一种,废话不多说开始分析

JSONPath语法

看文档https://goessner.net/articles/JsonPath/,重点关注下这个

利用演示

人比较不老实,喜欢骚东西,这里执行下命令

public class Test 
    private String cmd;

    public String getCmd() throws IOException 
        Runtime.getRuntime().exec(cmd);
        return cmd;
    

    public void setCmd(String cmd) 
        this.cmd = cmd;
    

触发

    public static void main(String[] args) 
        ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
        String payload = "[\\"@type\\":\\"com.yyds.Test\\",\\"cmd\\":\\"calc\\",\\"$ref\\":\\"$[0].cmd\\"]";
        Object o = JSON.parse(payload);
    

最爱的计算器

$ref引用触发get方法分析

简简单单引入依赖

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.36</version>
</dependency>

老规矩拉到底,看看调用栈再分析

跟进handleResovleTask函数

获取$ref
至于如果你问在哪里设置的在DefaultJSONParser#parse()

ok,不说废话,继续看下去,满足条件跟进

这里面没有返回null

接下来重点来了,我们看看JSONPath.eval函数干了什么

跟进compile

根据path生成并返回一个JavaPath对象

继续看看eval

这里有一个init函数执行

我们重点关注这个explain函数,把$refvalue解析成Segment,这个Segment是定义在JSONPath类的一个接口,具体看他的过程

这里初始化长度是8很好奇吗
因为实现segment接口的类只有八个


ok,继续看看这个readSegement,获取.后面的值
这里通过readName获取到cmd

内部实现靠循环追加到StringBuilder后面

后面通过浅拷贝赋值返回
接下来按顺序执行前面explain生成的Segment array


跟进JSONPath.getPropertyValue

继续跟进

跟进


后面就是用反射调用get方法了


分析完毕

解释为什么1.2.36前的版本不行

我们知道关键在于JSONPath.eval方法的调用
我们来对比一下,前为1.2.36版本,后为1.2.35版本


限制了refValue的值不能为null,并且必须是JSONObject对象,那就结束了

[java安全]fastjson学习(代码片段)

前言之前的文章的补充了,咕了半年再好好学学fastjson。初认fastjsonFastjson是一个Java库,可以将Java对象转换为JSON格式,当然它也可以将JSON字符串转换为Java对象。Fastjson可以操作任何Java对象,即使是一些预先存在... 查看详情

[java安全]fastjson学习(代码片段)

前言之前的文章的补充了,咕了半年再好好学学fastjson。初认fastjsonFastjson是一个Java库,可以将Java对象转换为JSON格式,当然它也可以将JSON字符串转换为Java对象。Fastjson可以操作任何Java对象,即使是一些预先存在... 查看详情

[java安全]fastjson学习(代码片段)

前言开始学习fastjson,TemplatesImpl利用链让我跟的脑子疼,还是太菜了,断点打到后面整个人都是懵的。初认fastjsonFastjson是一个Java库,可以将Java对象转换为JSON格式,当然它也可以将JSON字符串转换为Java对象。Fa... 查看详情

[java安全]fastjson学习(代码片段)

前言开始学习fastjson,TemplatesImpl利用链让我跟的脑子疼,还是太菜了,断点打到后面整个人都是懵的。初认fastjsonFastjson是一个Java库,可以将Java对象转换为JSON格式,当然它也可以将JSON字符串转换为Java对象。Fa... 查看详情

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. 查看详情

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

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

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. 查看详情

[java安全]fastjson≤1.2.24结合jdbcrowsetimpl利用链(代码片段)

文章目录RMIFastjsonRCE关键函数实际利用演示JdbcRowSetImpl利用链分析参考文章RMI首先不得不提一下RMIRMI是Java远程方法调用,是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服... 查看详情

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

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

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

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

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安全基础中已经... 查看详情

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

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

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反序列化的历史版本绕过(开启autotype功能)(代码片段)

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

fastjson处理枚举

Fastjson这玩意儿不多说,Alibaba出品,出过几次严重的安全漏洞,但是依然很流行。这里写一下它怎么处理枚举。<!--https://mvnrepository.com/artifact/com.alibaba/fastjson--><dependency><groupId>com.alibaba</groupId><artifactI 查看详情

有没有啥fastjson漏洞的缓解策略?

参考技术AJFrogDevOps平台是不受Fastjson漏洞影响的。并且可以利用使用JFrogXray来查找易受攻击的版本:除了暴露新的安全漏洞和威胁外,JFrogXraySCA工具通过自动安全扫描,让开发人员和安全团队轻松访问其软件的最新相关信息。JFro... 查看详情