Tcsec安全研究院|fastjson漏洞分析

本文深入探讨了Fastjson的安全漏洞,包括版本探测、利用链分析以及不同版本的漏洞利用方法,如jackson的CVE-2017-7525和CVE-2020-36179,以及Fastjson的各种利用技巧,如DNSLOG探测和WAF规避策略。同时,文章提醒开发者关注Fastjson的安全更新,避免使用存在漏洞的旧版本。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

fastjson漏洞分析

fastjson介绍

fastjson 是一个 Java 库,可用于将 Java 对象转换为其 JSON 表示形式。它还可以用于将 JSON 字符串转换为等效的 Java 对象。Fastjson 可以处理任意的 Java 对象,包括没有源代码的预先存在的对象。
在这里插入图片描述

json -> bean

java 的核心就是对象的操作,fastjson 同样遵循这个原则利用get、set操作对象。将 User 对象转化为JSON字符串后,通过其提供的 parse() 方法就可将字符串还原成对象。
在这里插入图片描述

json框架探测

json框架识别

不同的json框架在解析json字符串的表现形式各不相同,利用其独特性质可以对json框架进行识别。举例现存在一个User对象,分析 json 反序列化时的性质。
在这里插入图片描述

jackson

  1. 严格要求与bean对象对齐,可少不能多,因此添加多余kv 报错
    在这里插入图片描述

  2. 无法解析单引号 报错
    在这里插入图片描述

  3. 无法识别注释符 报错
    在这里插入图片描述

gson

  1. 浮点无法转整数 报错,向 int 类型的值传浮点数无法解析会报错
    在这里插入图片描述

  2. 特有解析 报错,遇到 # 时都会当注释符处理
    在这里插入图片描述

  3. 特有解析 报错,拼接一个json字符串时会报错
    在这里插入图片描述

org.json

  1. 特有解析,插入 \n \r等字符改变输出,结合 # 注释符处理
    在这里插入图片描述

fastjson

  1. 浮点精度不丢失
    在这里插入图片描述

  2. 响应状态,如果是fastjson会对@type做出响应
    在这里插入图片描述

  3. DNSLOG 探测,这种方式可以无回显探测fastjson,是较为高效的一种方法,但不适用于不出网环境
    在这里插入图片描述

在 dnslog 域名被 ban 时,也可用一些正常域名探测是否存在DNS配置或出网
在这里插入图片描述

fastjson版本探测

当确定存在 fastjson 组件后,下一步就是对版本后的探测,以便更有针对性的利用。

有回显精确版本号

有报错回显的情况下,返回精确版本号
在这里插入图片描述

对于 FastJsonHttpMessageConverter 配置的解析,通常指定了key值或json结构,可通过添加[]等方式破坏既定结构
在这里插入图片描述

dnslog探测

1.2.47、1.2.68、1.2.80是漏洞的三个里程碑版本,通过java.lang.Classjava.lang.AutoCloseablejava.lang.Exception 来构造dns可以准确识别,并且该探测方式向下版本兼容

1.2.47
在这里插入图片描述

1.2.68
在这里插入图片描述

1.2.80
68和80都只会接收到第一个dnslog请求,83会收到第二个请求
在这里插入图片描述

fastjson利用链探测

确定版本后,就是针对利用链的一个探测。

Character 报错回显

探测到存在的类时将 Class 强转为 Char 导致报错回显
在这里插入图片描述

Class回显

当类存在时将返回一个类实例,通常体现在改变服务器的响应
在这里插入图片描述

dnslog外带

该方式利用难度很高,对操作系统、dns服务器均有要求
在这里插入图片描述

json利用

jackson

jackson通常是通过cve记录漏洞进行攻击,举例两个攻击方式,当然也可以自行构造调用链,与fastjson类似。

CVE-2017-7525 反序列化

在这里插入图片描述

CVE-2020-36179 SSRF & RCE

在这里插入图片描述

exec.sql
在这里插入图片描述

fastjson <=1.2.24

最初的漏洞版本,无任何校验,任意利用,举例payload

JdbcRowSetImpl

在这里插入图片描述

TemplatesImpl

在这里插入图片描述

bcel

在这里插入图片描述

fastjson 1.2.25-1.2.45 黑名单

之后的 fastjson 引入checkAutoType 机制检查,当手动开启 autotype 时,可以绕过黑名单检查,这几种方式目前实战中已经很少见了。但黑名单但引入,对研究其他组件的利用方式很有帮助。
https://github.com/LeadroyaL/fastjson-blacklist

1.2.41 加L

在这里插入图片描述

1.2.42 双写L

在这里插入图片描述

1.2.43 加[{

在这里插入图片描述

fastjson <=1.2.47 缓存通杀

在 fastjson 迭代到 1.2.47 时,爆出的漏洞在不开启 AutoTypeSupport 的情况下就可以构造任意反序列化
对于1.2.25-1.2.32:需关闭AutoTypeSupport
在这里插入图片描述

fastjson <=1.2.68

在 fastjson 迭代到 1.2.68 时,新增了对 expectClass 的判断,可以通过这个绕过 autoType 检查
在这里插入图片描述

fastjson <=1.2.80

fastjson 引入 expectClass 属性后造成了 1.2.68 的漏洞。而 checkAutoType 中还有一个对 expectClass 的判断,造成了 1.2.80 的漏洞。
在这里插入图片描述

fastjson WAF bypass

编码绕过

fastjson 对 key,value 值会自动进行 hex 解码和 unicode解码
在这里插入图片描述

在这里插入图片描述

字符填充

传统绕WAF思路,大量字符
在这里插入图片描述

fastjson dos

对于 Fastjson 1.2.36-1.2.62 的版本存在dos漏洞,在 1.2.80 后 fastjson 推出 noAutoType 版本,但并未对dos漏洞进行修复
在这里插入图片描述

fastjson 1.2.25-1.2.32 绕过autoType限制

fastjson 1.2.47 的漏洞存在一种情况,对于1.2.25-1.2.32版本区间需关闭AutoTypeSupport,这个问题在前几个月以赛题形式出现在了CTF中,也有了解决方案
在这里插入图片描述

fastjson -> codeql

比如寻找 shiro 的调用链,source 点就是类的 Field,sink点是lookup方法
在这里插入图片描述

找到3条调用链
在这里插入图片描述

总结

fastjson通过黑名单的方式限制攻击,终究是会有遗漏的,所以在官网的介绍中也建议使用fastjson2。
在这里插入图片描述

参考

https://blog.sometimenaive.com/2020/05/21/find-fastjson-jndi-gadget-by-codeql-tainttracking/
https://github.com/Whoopsunix/fastjson_study
https://github.com/knownsec/KCon/tree/master/2022

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值