SnakeYAML是一个用于解析和生成YAML格式数据的流行Java库,支持YAML1.1和1.2规范,能够实现YAML与Java对象之间的序列化和反序列化 漏洞原理:yaml反序列化时可以通过!!+全类名指定反序列化的类,反序列化过程中会实例化该类,可以通过构造ScriptEngineManager payload并利用SPI机制通过URLClassLoader或者其他payload如JNDI方式远程加载实例化恶意类从而实现任意代码执行
SnakeYAML是一个用于解析和生成YAML格式数据的流行Java库,支持YAML1.1和1.2规范,能够实现YAML与Java对象之间的序列化和反序列化
漏洞原理:yaml反序列化时可以通过!!+全类名指定反序列化的类,反序列化过程中会实例化该类,可以通过构造ScriptEngineManager payload并利用SPI机制通过URLClassLoader或者其他payload如JNDI方式远程加载实例化恶意类从而实现任意代码执行
漏洞利用参考:https://github.com/artsploit/yaml-payload Run
漏洞利用参考:https://github.com/artsploit/yaml-payload
反序列化流程: 1、导入依赖:使用Maven/Gradle项目时,首先添加SnakeYAML的依赖 2、创建Yaml实例:使用Yaml类的实例来处理反序列化。可以通过无参构造函数创建,也可以通过传递一个Constructor来定制化反序列化的方式(如使用SafeConstructor提高安全性) 3、调用load()方法:使用Yaml实例的load()方法,将YAML字符串或输入流转换为相应的Java对象 4、处理反序列化后的对象:根据实际业务需求对反序列化后的对象进行处理
使用SafeConstructor()进行安全构造 Run
使用SafeConstructor()进行安全构造
SafeConstructor是SnakeYAM 提供的一个安全构造器,用于防止反序列化漏洞,确保只反序列化基本类型和安全的对象