json组件下的原生反序列化getter触发

2025-01-26 6 0

前言

fastjson常用的利用方式为利用其在解析JSON的过程中导致的反序列化,同样在fastjson也能够作为反序列化Gadgets中的一个重要环节,能够触发getter方法

普通的getter调用

下面讨论的是如何使用fastjson中的JSONArray或者JSONObject进行原生反序列化调用进而触发对象的getter方法

入口

在fastjson中存在实现了Serializable接口的类很少,经过检索,有以下3

json组件下的原生反序列化getter触发插图

  1. AntiCollisionHashMap: 这个类实现了自己的readObject方法
    json组件下的原生反序列化getter触发插图1

  2. JSONObject/JSONArray在这个版本中存在有自己的readObject方法
    json组件下的原生反序列化getter触发插图2
    主要是通过重写了ObjectInputStream#resolveClass方法来进行反序列化类的安全性检查
    json组件下的原生反序列化getter触发插图3
    没有任何的反序列化功能点

JSONArray的toString调用

因为在JSONArray类中的实现的readObject方法中除了检查恶意类之外没有反序列化的过程,所以我们需要找到一个中转的点,这里也就是toString方法的带哦用

json组件下的原生反序列化getter触发插图4

本身JSONArray类中并没有toString方法,它使用父类JSONtoString方法

json组件下的原生反序列化getter触发插图5

这里就是能够触发getter方法的关键点,toString方法中调用了toJSONString方法,通过执行对应的JSONSerializer#write方法达到getter方法触发的目的

接下来详细分析一下原理

调用getter流程

前面提到了将会调用JSONSerializer#write方法

json组件下的原生反序列化getter触发插图6

这里将会通过getObjectWriter来获取一个ObjectSerializer的实现类

json组件下的原生反序列化getter触发插图7

这是一个关于ObjectSerializer的官方的一个例子

最后会来到SerializeConfig#getObjectWriter方法中获取对应class对象的ObjectWriter

json组件下的原生反序列化getter触发插图8

这里因为是使用的JSONArray进行JavaBean的嵌套使用,因为JSONArray是一个实现了List接口的一个类,所以获取到的是ListSerializer

而在ListSerializer#write的处理中

json组件下的原生反序列化getter触发插图9

针对他的元素(一个JavaBean),他通过调用getObjectWriter方法获取了对应Bean类的ObjectWriter对象

所以又重新回到了SerializeConfig#getObjectWriter的调用过程

json组件下的原生反序列化getter触发插图10

前面都是一些对一些常见的对象进行不同的Serilizer的映射,但是这里的JavaBean都不满足

来到这个方法的末尾部分

json组件下的原生反序列化getter触发插图11

在不满足前面已有的映射,通过createJavaBeanSerializer方法来动态的创建一个类

json组件下的原生反序列化getter触发插图12

在经过简单的黑名单过滤之后,调用TypeUtils#buildBeanInfo方法来提取这个JavaBean的类信息,为之后的类生成做准备

json组件下的原生反序列化getter触发插图13

json组件下的原生反序列化getter触发插图14

之后嘞,就是将提取的信息beanInfo传入createJavaBeanSerializer中进行JavaBeanSerializer类的动态生成

json组件下的原生反序列化getter触发插图15

createJavaBeanSerializer方法中主要是通过调用createASMSerializer方法进行创建的

json组件下的原生反序列化getter触发插图16


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

Beanshell 反序列化分析(CVE-2016-2510)
从国赛到西湖论剑:fenjing进阶通杀jinjia2_SSTI
探秘 Web 认证机制:从基础到 JWT攻防实战
FileUpload1 反序列化漏洞(1)
OAuth2.0原理及常见漏洞
[Meachines] [Easy] SteamCloud Kubernetes-RCE+Kubernetes节点权限提升

发布评论