前言

最近护网期间,又听说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反序列化漏洞研究(上)的更多相关文章

  1. fastjson反序列化漏洞研究(下)

    之前的文章显示字符太多 拒绝显示  只好分为两篇了 这样我们只需要找到可以利用的类,构造poc链就好了,这个和以前的java反序列化漏洞类似,先不说.网上最早的poc是使用com.sun.org.ap ...

  2. Fastjson反序列化漏洞研究

    0x01 Brief Description java处理JSON数据有三个比较流行的类库,gson(google维护).jackson.以及今天的主角fastjson,fastjson是阿里巴巴一个 ...

  3. Fastjson反序列化漏洞概述

    Fastjson反序列化漏洞概述 ​ 背景 在推动Fastjson组件升级的过程中遇到一些问题,为帮助业务同学理解漏洞危害,下文将从整体上对其漏洞原理及利用方式做归纳总结,主要是一些概述性和原理上的东 ...

  4. fastjson反序列化漏洞实际案例利用

    fastjson反序列化rce实际案例利用全过程: 存在问题网站:http://***.com/ 在网站上寻找一些安全漏洞的时候,发现一条json数据包 数据包如下: POST /*** HTTP/1 ...

  5. Fastjson反序列化漏洞复现

    Fastjson反序列化漏洞复现 0x00 前言 对Fastjson反序列化漏洞进行复现. 0x01 漏洞环境 靶机环境:vulhub-fastjson-1.2.24 ip:172.16.10.18 ...

  6. Java安全之Fastjson反序列化漏洞分析

    Java安全之Fastjson反序列化漏洞分析 首发:先知论坛 0x00 前言 在前面的RMI和JNDI注入学习里面为本次的Fastjson打了一个比较好的基础.利于后面的漏洞分析. 0x01 Fas ...

  7. Fastjson反序列化漏洞基础

    Fastjson反序列化漏洞基础 FastJson是alibaba的一款开源JSON解析库,可用于将Java对象转换为其JSON表示形式,也可以用于将JSON字符串转换为等效的Java对象. 0x0 ...

  8. Fastjson反序列化漏洞分析 1.2.22-1.2.24

    Fastjson反序列化漏洞分析 1.2.22-1.2.24 Fastjson是Alibaba开发的Java语言编写的高性能JSON库,用于将数据在JSON和Java Object之间互相转换,提供两 ...

  9. .NET高级代码审计(第三课)Fastjson反序列化漏洞

    0X00 前言 Java中的Fastjson曾经爆出了多个反序列化漏洞和Bypass版本,而在.Net领域也有一个Fastjson的库,作者官宣这是一个读写Json效率最高的的.Net 组件,使用内置 ...

随机推荐

  1. jmeter配置元件之计数器

    如果需要引用的数据量较大,且要求不能重复或者需要自增,那么可以使用计数器来实现. 计数器(counter):允许用户创建一个在线程组之内都可以被引用的计数器. 计数器允许用户配置一个起点,一个最大值, ...

  2. visual studio code 调试ROS的插件

    ctrl+p搜索: ext install ros https://marketplace.visualstudio.com/items?itemName=ajshort.ros 进行安装 其他可以调 ...

  3. Spring cloud微服务安全实战-5-5实现授权码认证流程(1)

    目前为止已经完成了完整的用户逻辑 目前的问题是,用户在登陆的时候,用户名提交的是给前端服务器的.每个前端服务器的开发人员都可能接触到前端的用户名密码. 每一个客户端应用都要去处理登陆的逻辑,一单我的登 ...

  4. 转 linux下ClamAV使用

    linux下ClamAV使用 第一步:Clamav下载http://www.clamav.net/downloads#yuminstall wget –y第二步:创建clamav用户和组groupad ...

  5. Swift4.0复习类

    1.类的属性: 2.类的方法: 3.类作为引用类型: “Swift新增了一对操作符 === 与 !== 用于判定同一个类的两个对象引用是否指向同一对象实例.” 摘录来自: “大话Swift 4.0”. ...

  6. HTML布局水平导航条1制作

    该文是用css制作个导航条,用竖线分隔,导航条是点击的多个区块.步骤:ul里设置需要数量的li,li中加上a链接给ul加样式,去掉默认的前面的点给li设置左浮动,让ul里的li横向排列a链接设置成块状 ...

  7. Java基础教程:多线程杂谈——Volatile

    Java基础教程:多线程杂谈——Volatile 引入Volatile Java语言提供了一种稍弱的同步机制,即Volatile变量,用来确保将变量的更新操作通知到其他线程.当把变量声明为Volati ...

  8. LeetCode 142. 环形链表 II(Linked List Cycle II)

    142. 环形链表 II 142. Linked List Cycle II 题目描述 给定一个链表,返回链表开始入环的第一个节点.如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整 ...

  9. LeetCode 206. 反转链表(Reverse Linked List) 16

    206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...

  10. nlp算法

    人工智能算法大体上来说可以分类两类:基于统计的机器学习算法(Machine Learning)和深度学习算法(Deep Learning) 总的来说,在sklearn中机器学习算法大概的分类如下: 1 ...