-
-
[原创]分析SnakeYAML 反序列化漏洞(CVE-2022-1471)
-
发表于: 2024-5-13 09:23 2390
-
- 简介
SnakeYaml是Java中解析yaml的库,而yaml是一种人类可读的数据序列化语言,通常用于编写配置文件等。
yaml基本语法:
大小写敏感
使用缩进表示层级关系
缩进只允许使用空格
#表示注释
支持对象、数组、纯量这3种数据结构
示例:
yaml对象:
key:
child-key: value
child-key2: value2
yaml数组:
companies:
-
id: 1
name: company1
price: 200W
-
id: 2
name: company2
price: 500W
意思是 companies 属性是一个数组,每一个数组元素又是由 id、name、price 三个属性构成
详细参考:5d0K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2J5N6h3&6G2L8$3u0Q4x3X3g2U0L8$3#2Q4x3V1k6%4x3$3y4F1L8%4c8W2i4K6u0r3P5h3q4E0L8q4)9J5k6r3W2F1N6s2u0G2i4K6u0W2K9s2c8E0L8l9`.`.
SnakeYaml库:
SnakeYaml提供了yaml数据和Java对象相互转换的API,即能够对数据进行序列化与反序列化。
Yaml.load():将yaml数据反序列化成一个Java对象
Yaml.dump():将Java对象序列化成yaml
2.思路来源
今天在学习SnakeYAML的反序列化的时候,想到⼀个新的探测payload,⽹上之前有⼀个SPI(Service Provider Interface)
那个链⼦可以有通过URLClassloader检测。
SPI是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。SPI是调用方来制定接口规范,提供给外部来实现,调用方在调用时则选择自己需要的外部实现。 从使用人员上来说,SPI 被框架扩展人员使用。
3.RCE
如果存在任意文件写入的话,即构造一个恶意类,并添加到classpath下,导致代码执行
此时将将SPI1中say方法的内容改为calc,当运行后则会造成代码执行
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课