fastjson反序列化漏洞研究(上)
前言
最近护网期间,又听说fastjson传出“0day”,但网上并没有预警,在github上fastjson库中也有人提问关于fastjson反序列化漏洞的详情。也有人说是可能出现了新的绕过方式。不管怎样这都激起了我研究该漏洞的欲望,以前也研究过java的反序列化漏洞,但是没有具体研究过fastjson这个,借此机会好好分析下这个洞。
正文
fastjson主要功能就是实现对象和json字符串相互进行转换,这样方便传输。先简单了解下fastjson的用法,如下图所示,一般通过JSONObject.toJSONString()将对象序列化为json字符串(注意,这个和以往所说的java序列化是有些不一样的,平时所说的java序列化是序列化为字节流,也就是一段乱码,通常在http中传输还会base64编码下,编码前十六进制是以aced0005开头,base64编码后是以rO0AB开头,黑盒测试中可以通过这个来挖掘java的反序列化漏洞,这是题外话了。)
一般开发者就用第一种方法输出json字符串,这里测试代码中估计将第二种方法写出来,是想告诉大家fastjson可以识别json中的一些特殊的属性,比如说如果json字符串中某个key是“@type”,它就认为该key对应的value用于指定该json字符串对应对象的类型。
之后可以再通过JSONObject.parseObject()、JSON.parse()、JSON.parseObject()等方法将json字符串反序列化为对象,大同小异,fastjson的反序列化漏洞就是存在于JSONObject.parseObject(),所以以它为例进行讲解。以如下图:
既然必须指定对象类型,但是实际开发中大多数时候是并不知道对象类型的,这样怎么办呢?通常开发者会将对象类型设置为Object.class,毕竟java中所有类都是Object的子类。那这样又会出现一个问题,既然所有类都是Object的子类,fastjson如何知道反序列化对象的类型是什么呢?
这就是我们第一张图中的代码为什么会打印两种json字符串出来,fastjson可以通过识别“@type”对应的value来指定对象类型。这也是为什么第二张图中的代码运行后,通过JSONObject.parseObject(json, Object.class)反序列化时,带有“@type”的json字符串能成功反序列化为User对象,而不带“@type”的json字符串则不能成功反序列化。
而fastjson的反序列化漏洞就出现在这里,当json字符串可控时(实际常见中就是我们经常抓包会在请求中看到一些json字符串,而我们是可以随意修改这些字符串的,这就是可控),我们可以反序列化出任意对象,且fastjson返序列化时会调用User.class中属性的getter和setter方法,如下图我们可以看到,反序列化后的对象属性是有值的
fastjson反序列化漏洞研究(上)的更多相关文章
- fastjson反序列化漏洞研究(下)
之前的文章显示字符太多 拒绝显示 只好分为两篇了 这样我们只需要找到可以利用的类,构造poc链就好了,这个和以前的java反序列化漏洞类似,先不说.网上最早的poc是使用com.sun.org.ap ...
- Fastjson反序列化漏洞研究
0x01 Brief Description java处理JSON数据有三个比较流行的类库,gson(google维护).jackson.以及今天的主角fastjson,fastjson是阿里巴巴一个 ...
- Fastjson反序列化漏洞概述
Fastjson反序列化漏洞概述 背景 在推动Fastjson组件升级的过程中遇到一些问题,为帮助业务同学理解漏洞危害,下文将从整体上对其漏洞原理及利用方式做归纳总结,主要是一些概述性和原理上的东 ...
- fastjson反序列化漏洞实际案例利用
fastjson反序列化rce实际案例利用全过程: 存在问题网站:http://***.com/ 在网站上寻找一些安全漏洞的时候,发现一条json数据包 数据包如下: POST /*** HTTP/1 ...
- Fastjson反序列化漏洞复现
Fastjson反序列化漏洞复现 0x00 前言 对Fastjson反序列化漏洞进行复现. 0x01 漏洞环境 靶机环境:vulhub-fastjson-1.2.24 ip:172.16.10.18 ...
- Java安全之Fastjson反序列化漏洞分析
Java安全之Fastjson反序列化漏洞分析 首发:先知论坛 0x00 前言 在前面的RMI和JNDI注入学习里面为本次的Fastjson打了一个比较好的基础.利于后面的漏洞分析. 0x01 Fas ...
- Fastjson反序列化漏洞基础
Fastjson反序列化漏洞基础 FastJson是alibaba的一款开源JSON解析库,可用于将Java对象转换为其JSON表示形式,也可以用于将JSON字符串转换为等效的Java对象. 0x0 ...
- Fastjson反序列化漏洞分析 1.2.22-1.2.24
Fastjson反序列化漏洞分析 1.2.22-1.2.24 Fastjson是Alibaba开发的Java语言编写的高性能JSON库,用于将数据在JSON和Java Object之间互相转换,提供两 ...
- .NET高级代码审计(第三课)Fastjson反序列化漏洞
0X00 前言 Java中的Fastjson曾经爆出了多个反序列化漏洞和Bypass版本,而在.Net领域也有一个Fastjson的库,作者官宣这是一个读写Json效率最高的的.Net 组件,使用内置 ...
随机推荐
- 【插件式框架探索系列】应用程序域(AppDomain)
应用程序域(AppDomain)已经不是一个新名词了,只要熟悉.net的都知道它的存在,不过我们还是先一起来重新认识下应用程序域吧,究竟它是何方神圣. 应用程序域 众所周知,进程是代码执行和资源分配的 ...
- 报错:Sqoop2 Error message: Class not found JDBC Driver Class: com.mysql.jdbc.Driver
报错背景: CDH安装完成Sqoop2的组建后进行创建link的操作. 报错现象: There are issues with entered data, please revise your inp ...
- 【翻译】The Broadcast State Pattern(广播状态)
本文翻译自官网:The Broadcast State Pattern Provided APIs (提供的api) BroadcastProcessFunction and KeyedBroadca ...
- mongodb多个条件查询in,日期查询,嵌套查询,统计集合总数等常用实例
1. 多个条件查询in in db.inventory.find( { qty: { $in: [ 5, 15 ] } } ) 2. 日期查询 db.books.find({}) 查询时间大于6-,结 ...
- 【超分辨率】—(ESRGAN)增强型超分辨率生成对抗网络-解读与实现
一.文献解读 我们知道GAN 在图像修复时更容易得到符合视觉上效果更好的图像,今天要介绍的这篇文章——ESRGAN: Enhanced Super-Resolution Generative Adve ...
- conda使用报错:ImportError:DLL load failed
conda安装python环境经常报: ImportError:DLL load failed 将环境变量加入path可以解决: D:\program\anaconda D:\program\anac ...
- pipline中替换tag变量
实验架构: 192.168.0.96 gitlab 192.168.0.97 jenkins 192.168.0.98 harbor.docker集群 说明:下面代码编译镜像那一步的代码必须靠左,目的 ...
- 【JS新手教程】LODOP打印复选框选中的任务或页数
之前的博文:[JS新手教程]LODOP打印复选框选中的内容关于任务:Lodop打印语句最基本结构介绍(什么是一个任务)关于本文用到的JS的eval方法:JS-JAVASCRIPT的eval()方法该文 ...
- 图解 perspective && perspective-origin && transform3d && transform-origin
perspective && perspective-origin perspective是物体相对于画布的视距距离 perspective-origin是物体在画布位置的中心视点 t ...
- 虚拟机VMWare的操作
软件测试工程师需要搭建测试环境——虚拟机操作. VMWare Workstation虚拟机:模拟真实的环境进行各种试验和操作,启动之后,会占用一部分的系统资源. 官网安装:http://www.vmw ...