首页 > 其他分享 >Fastjson反序列化漏洞

Fastjson反序列化漏洞

时间:2024-05-10 09:01:52浏览次数:23  
标签:Fastjson fastjson 缓存 漏洞 绕过 序列化 类名

image

Fastjson简介

Fastjson是一个Java库,可以实现json和对象之间的转换。

将数据与对象进行转化,这个操作涉及到了反序列化。

与原生的 Java 反序列化不同,FastJson 反序列化并未使用 readObject 方法,而是自定义了反序列化的过程。

通过在反序列化的过程中自动调用类属性的 setter 方法和 getter 方法

将JSON转化成对象

fastjson的格式

{"【对象名】":{
    "@type":"【类名】",
    "【成员变量名1】":【成员变量值1】,
    "【成员变量名2】":【成员变量值2】
    }
}

AutoType的作用:

fastjson提供了AutoType这种方式来指定需要还原的对象以及值 {"@type":"Java_deserialization.User","id":"66666"}其中@type对应的值就是类名,后面的内容就是成员变量名与值

同时还会在一定的条件下调用get和set方法,熟悉的配方熟悉的味道--反序列化漏洞

利用链

待补充

修复与绕过

出现漏洞之后autoTypeSupport属性默认为false,并且增加了checkAutoType()函数,通过黑白名单的方式来防御Fastjson反序列化漏洞

L; 绕过

版本< 1.2.41

com.sun.rowset.jdbcRowSetlmpl在1.2.25版本被加入了黑名单,fastjson有个判断条件判断类名是否以"L"开头、以";"结尾,是的话就提取出其中的类名在加载进来

那么在类名前后分别加上L和;就能绕过黑名单检测

[ 绕过

版本< 1.2.42

随后再次修复

会先去除一次L和;再进行黑名单判断,但是被双写绕过

之后修复了双写绕过,又遇见了和L&;类似的 [ 绕过,在类名前加上 [ 也可以绕过检测

通过严格匹配L;和[修复了漏洞

autoType开关绕过

版本1.2.48通过关闭缓存修复

在autoType关闭的前提下,先利用一个特殊类(java.lang.Class会在checkAutoType之前以常见类的身份加载进缓存)将payload加载进缓存,然后因为autoType关闭,fastjson优先去缓存寻找该类,并将该类反序列化出来(此反序列化存在漏洞)

在fastjson中有一个全局缓存,在类加载的时候,如果autotype没开启,会先尝试从缓存中获取类,如果缓存中有,则直接返回。黑客正是利用这里机制进行了攻击。

抛出异常绕过

版本v1.2.69修复,版本v1.2.68可以使用safeMode修复

在checkAutoType中,有这样一约定,那就是如果指定了expectClass ,那么也会通过校验

在fastjson中, 如果,@type 指定的类为 Throwable 的子类,那对应的反序列化处理类就会使用到 ThrowableDeserializer

而在此方法中,当有一个字段的key也是 @type时,就会把这个 value 当做类名,然后进行一次 checkAutoType 检测。且会指定expectClass,这样就绕过来检测。

且异常类中有get类型的方法,会在反序列化时直接调用达到rce

safeMode

彻底关掉相关功能,在黑白名单之前结束,在checkAutoType时抛出异常

写文件

在与黑白名单的博弈中,还衍生出了写文件的攻击形式(利用链不同)


工具&漏洞复现

环境搭建

使用vulhub搭建环境

使用插件检测

配置好相关的fastjson插件,发送json格式的POST包,burp就会自动检测

image

开启rmi服务

使用工具开启rmi服务

  • -C 参数指定恶意类执行的命令

  • -A 参数指定本机ip地址

image

发送payload

ps:如果是在本机复现,Host填写本地ip,不要写回环地址

先将数据包修改为POST请求,然后body加入带payload的json字符串

image

攻击成功

image


参考文章

从FastJson库的不同版本源码中对比学习绕过方法_fastjson如何关闭autotype-CSDN博客

fastjson-BCEL不出网打法原理分析-腾讯云开发者社区-腾讯云 (tencent.com)

干货|最全fastjson漏洞复现与绕过-腾讯云开发者社区-腾讯云 (tencent.com)

fastjson到底做错了什么?为什么会被频繁爆出漏洞? (baidu.com)

工具链接

welk1n/JNDI-Injection-Exploit: JNDI注入测试工具

https://github.com/pmiaowu/BurpShiroPassiveScan

标签:Fastjson,fastjson,缓存,漏洞,绕过,序列化,类名
From: https://www.cnblogs.com/Aixve/p/18183481

相关文章

  • 内网渗透测试是一种测试组织内部网络安全的方法,旨在发现和利用网络中的漏洞以及获取未
    内网渗透测试是一种测试组织内部网络安全的方法,旨在发现和利用网络中的漏洞以及获取未授权访问内部资源的能力。以下是内网渗透测试基础的一些主题:理解内网环境:理解目标组织的网络拓扑、子网划分、主机和服务。收集有关内部网络设备、操作系统、应用程序和安全配置的信......
  • Nexpose v6.6.250 for Linux & Windows - 漏洞扫描
    Nexposev6.6.250forLinux&Windows-漏洞扫描Rapid7VulnerabilityManagement,ReleaseMay02,2024请访问原文链接:Nexposev6.6.250forLinux&Windows-漏洞扫描,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org您的本地漏洞扫描程序搜集通过实时......
  • Apache Commons Collections反序列化漏洞
    目录复现环境准备POC漏洞原理分析构造反射链TransformedMap利用链ApacheCommonsCollections的反序列化漏洞在2015年被曝光,引起了广泛的关注,算是java历史上最出名同时也是最具有代表性的反序列化漏洞。复现环境准备jdk1.7版本下载压缩包链接:https://pan.baidu.com/s/......
  • xss漏洞防御方法
    csp安全策略csp介绍:W3C组织还针对XSS攻击制定了一个叫做CSP的安全层,也就是内容安全策略(ContentSecurityPolicy)。它的出现是为了帮助检测和缓解某些类型的攻击,比如跨站脚本(XSS)和数据注入等攻击,从而引入的浏览器策略。开发者可以根据CSP的规范,去创建一些很严格的规则,比如说......
  • xss漏洞
    xss漏洞的介绍:原理sql注入的本质是什么?就是把用户输入的数据不是正常的数据而是sql代码,然后被执行,Xss漏洞的原理其实就是前端写的有毛病,你能够自定义的去嵌入js代码让他去执行,讲的再明白一点就是,服务端把用户输入的数据当成前端代码去执行了  利用条件:用户输入的数据......
  • python教程6.3-json序列化
    序列化:dumps,编码,将python类型转成json对象反序列化:loads,解码,将json对象转成python对象pickle模块提供了四个功能:dumps、loads、dump、load(前2个操作变量,后2个操作文件)jsonjson模块也提供了四个功能:dumps、dump、loads、load,⽤法跟pickle⼀致。(前2个操作变量,后2个操作文件)......
  • buuctf-pwn-[第五空间2019 决赛]PWN5-格式化字符串漏洞
    题目地址:https://buuoj.cn/challenges#[第五空间2019决赛]PWN5先检查一下保护情况再拖进ida里分析找到一个格式化字符串漏洞,那么我们可以利用这个漏洞去获取或者改写dword_804C044的值从而进入if语句中,拿到shell什么是格式化字符串漏洞所谓格式化字符串漏洞,就是我们能控......
  • Fastjson反序列化漏洞
    目录漏洞原理复现Fastjson1.2.24Fastjson1.2.47漏洞分析Fastjson是阿里巴巴开源的一个Java库,用于将Java对象转换为JSON字符串(序列化),以及将JSON字符串转换为Java对象(反序列化),漏洞编号CVE-2017-18349。漏洞原理Fastjson引入了autoType功能,允许在反序列化过程中通过@type......
  • 【Python-Json】自定义类输入json序列化、json的读取与写入
    AI问答Questionjson支持numpy数组么Answer不幸的是,标准的JSON格式不直接支持NumPy数组.JSON是一种用于存储和交换数据的文本格式,它有限的数据类型只包括对象(object)、数组(array)、数字(number)、字符串(string)、布尔值(true/false)、空值(null)等.因此,无法直接将......
  • 《安富莱嵌入式周报》第336期:开源计算器,交流欧姆表,高性能开源BLDC控制器,Matlab2024a,操
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 本周更新一期视频教程:BSP视频教程第30期:UDSISO14229统一诊断服务CAN总线专题,常用诊断执行流程精讲,干货分享,图文并茂https://www.armbbs.cn/forum.php?mod=viewthread&tid=12......