租空间网站,互联科技行业网站,成武建设局网站,建设部证书公布网站目录
FastJson介绍
FJ序列化与反序列化方法
关于反序列化三种方式的关系与区别
FastJson反序列化漏洞原理通识
关于gettersetter FastJson介绍
FastJson#xff08;快速JSON#xff09;是一个Java语言编写的高性能、功能丰富且易于使用的JSON解析和序列化库。它由…目录
FastJson介绍
FJ序列化与反序列化方法
关于反序列化三种方式的关系与区别
FastJson反序列化漏洞原理通识
关于gettersetter FastJson介绍
FastJson快速JSON是一个Java语言编写的高性能、功能丰富且易于使用的JSON解析和序列化库。它由阿里巴巴集团开发提供了一种快速、高效的方式来处理JSON数据。 FJ序列化与反序列化方法
序列化JSON.toJSONString()参数设置SerializerFeature.WriteClassName 序列化时会多出一个type跟上类名 反序列化JSON.parseObject()参数设置Feature.SupportNonPublicField 反序列化时加上该参数才能还原private属性 关于反序列化三种方式的关系与区别 fastjson 处理反序列化的方式主要有三种
1、Object obj JSON.parse(jsonstr); 2、Object obj JSON.parseObject(jsonstr, UserFastJson.class); 3、Object obj JSON.parseObject(jsonstr); ①JSON.parseObject(jsonstr) 和 JSON.parseObject(jsonstr,UserFastJson.class)输出的结果一致都是执行了构建器以及setter方法。JSON.parseObject(jsonstr) 处理方式不仅仅执行了构建器还执行了所有的setter、getter方法。 ②JSON.parse(jsonstr)与JSON.parseObject(jsonstr, UserFastJson.class)可以认为是完全一样的最后得到的是具体类对象而parseObject(String text)是在二者的基础上又执行了一次JSON.toJSON()其先遍历所有的setter方法然后再遍历getter方法最后得到的是JSONObject类对象
也就是说JSON.parseObject()本质上还是调用JSON.parse()进行反序列化的区别是parseObject()会额外调用JSON.toJSON()来将Java对象转为JSONObject对象。 ③fastjson支持使用type指定反序列化的目标类
JSON.parse(jsonString) 和 JSON.parseObject(jsonString, Target.class)前者会在 jsonString 中解析字符串获取 type 指定的类后者则会直接使用参数中的class。 FastJson反序列化漏洞原理通识
若能找到一个类、在反序列化这个类对象时fastjson调用其setter或getter方法且setter或getter方法存在漏洞可以执行恶意代码。
这也是FJ反序列化漏洞与基于readObject的其他反序列化漏洞的最大区别。
此外fastjson 在反序列化时如果 Field 类型为 byte[]将会调用com.alibaba.fastjson.parser.JSONScanner#bytesValue 进行 base64 解码对应的在序列化时也会进行 base64 编码。 关于gettersetter fastjson 在为类属性寻找 gettersetter 方法时调用函数 com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer#smartMatch() 方法会忽略 _|- 字符串
满足条件的setter方法
函数名大于等于4非静态函数以set开头且第4个字母为大写返回类型为void或当前类参数个数为1个
满足条件的getter方法
函数名长度大于等于4非静态方法以get开头且第4个字母为大写无参数返回值类型继承自Collection或Map或AtomicBoolean或AtomicInteger