关键词:
写在前面
平时我们在处理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
函数,把$ref
的value
解析成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... 查看详情