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 组件,使用内置 ...
随机推荐
- 003-结构型-07-享元模式(Flyweight)
一.概述 提供了减少对象数且从而改善应用所需的对象结构的方式.运用共享技术有效地支持大是细粒度的对象. 它通过与其他类似对象共享数据来减小内存占用.它使用共享物件,用来尽可能减少内存使用量以及分享资讯 ...
- 标量子查询调优SQL
fxnjbmhkk4pp4 select /*+ leading (wb,sb,qw) */ 'blocker('||wb.holding_session||':'||sb.username||')- ...
- Python第一阶段06
1.面向对象编程: class Dog: def __init__(self, name): self.name = name def bulk(self): print("%s 汪汪汪.. ...
- jquery img src赋值
不用Jquery时:document.getElementById("imageId").src = "xxxx.jpg"; 用Jquery时:$(" ...
- CSS3动画框架 Animate.css
CSS3的动画应用越来越多了,Animate.css一个从名字上就知道干什么的动画框架. github上的访问地址:http://daneden.github.io/animate.css/ 使用方法 ...
- 03点睛Spring4.1-scope
转载:https://www.iteye.com/blog/wiselyman-2210377 3.1 scope scope描述spring容器是怎么样新建类的实例的(bean); 在spring中 ...
- CSS 常用效果--持续更新
单行超出省略: white-space: nowrap; text-overflow:ellipsis; overflow:hidden; 多行超出省略: text-overflow: -o-elli ...
- mysql 严格模式 Strict Mode
mysql 严格模式 Strict Mode 找到MySQL安装目录下的my.cnf(windows系统则是my.ini)文件 在sql_mode中加入STRICT_TRANS_TABLES则表示开启 ...
- htm5手机端实现拖动图片
htm5手机端实现拖动图片 <pre> <!doctype html><html><head> <title>Mobile Cookbook ...
- js18位身份证验证(非原创)
原文链接 function check_id(value) { var arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];/ ...