首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 反序列化浅析

声明 文章首发于跳跳糖社区https://tttang.com/archive/1782/ 前言 之前所接触的大多是PHP 反序列化题型,最近遇见了一道Python pickle反序列化类型题,因此学习了一下其反序列化...Pickle 师傅们可自行先参考一下官方文档 https://docs.python.org/zh-cn/3/library/pickle.html 定义 模块 pickle 实现了对一个...Python 对象结构的二进制序列化和反序列化。...通俗易懂的说,就是pickle实现了基本数据的序列化和反序列化。...储存多个属性名: 属性值的字典)对第二个元素(对象实例)进行属性设置 b 栈上第一个元素出栈 无 s 将栈的第一个和第二个对象作为key-value对,添加或更新到栈的第三个对象(必须为列表或字典,列表以数字作为

73060

Python】PicklePyTorch反序列化漏洞

有人说,不要轻易加载未知来源的模型,否则存在反序列化攻击的风险,本文就对此言论进行测试分析。...Pickle反序列化漏洞 通常情况下,会用到Pickle来将一些变量/对象转换成字节串进行存储,此操作称为序列化。 读取pkl文件,还原其中的数据,此操作称为反序列化。...而在Python中,有一个天然的魔法方法__reduce__,它在进行反序列化中,会自动执行其下的内容,这就造成了一个可被用于攻击的漏洞。...具体的解释可参考官方文档:https://docs.python.org/3/library/pickle.html 下面看一个示例: import os import pickle class Test...PyTorch反序列化漏洞 Pytorch的模型保存和加载底层依然是用到了Pickle,因此同样存在反序列化的漏洞。

1.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python 反序列化漏洞学习笔记

    reduce 中的方式完成反序列化,会避免报错 这在反序列化漏洞中很重要 很重要 S 代表一个字符串 S'string'\n p 后面接一个数字,代表第n块堆栈 p0、p1 ....与 PHP 序列化相似,Python 序列化也是将对象转换成具有特定格式的字符串(py2)或字节流(py3),以便于传输与存储,比如 session 但是在反序列化时又与 PHP 反序列化又有所不同...: PHP 反序列化要求源代码中必须存在有问题的类,要求是被反序列化的对象中存在可控参数,具体可看这里 而 Python 反序列化不需要,其只要求被反序列化的字符可控即可造成 RCE,例如: # Python2..." # 将被反序列化的字符串 pickle.loads(s) # 反序列化后即可造成命令执行,因此网站对要被反序列化的字符串应该做严格限制 在 Python 中,一切皆对象,因此能使用 pickle...pass # 反序列化时会调用 __reduce__ 方法 由于 Python 反序列化时只需要被反序列化的字符串可控(而不需要源代码中存在有安全问题的类)便可造成 RCE 因此我们可以通过如下代码轻松构造

    98930

    Python安全之反序列化——picklecPickle

    概述 Python中有两个模块可以实现对象的序列化,pickle和cPickle,区别在于cPickle是用C语言实现的,pickle是用纯python语言实现的,用法类似,cPickle的读写效率高一些...poc.pickle中: 3) 执行此payload: 4) 模拟实现一个更为真实的web环境,取路径中的参数后使用cPickle.loads方法反序列化: 5) 将刚才生成的payload进行url编码...但是pickle不能序列化code对象,这里简单测试一下:将要执行的代码都写到一个函数里foo(),尝试反序列化代码对象: 问题解决:从python2.6起,包含了一个可以序列化code对象的模块Marshal...由于python可以在函数当中再导入模块和定义函数,故可以将自己要执行的代码都写到一个函数foo()里: 得到payload: http://127.0.0.1:8000/?...加载的数据列入白名单,可使用官方推荐的find_class方法,使用白名单限制反序列化引入的对象 https://docs.python.org/3.7/library/pickle.html#pickle-restrict

    3.6K20

    Python 数字类型

    本文内容:Python 数字类型 更多内容请见 Python 变量 Python 表达式与运算符 Python bool类型与逻辑关系运算 ---- Python 数字类型 1.整型 int 2....浮点型 float 3.整型与浮点型的相互转换 ---- Python数字类型有4种,分别是整型int、浮点型float、复数型comlex、布尔型bool。...1.整型 int 在 Python 中,整型数用关键字int表示(即英文单词 integer 的简写),包括:正整数、零和负整数。整型数全部由数字构成,不包括小数部分。...中,浮点型用关键字float表示,是由整数、小数点和小数构成的数字。...通过内置的数字类型转换函数可以显式地在数字类型之间进行转换: int(x),将 x 转换为整数,x 可以是浮点数或字符串。 float(x),将 x 转换为浮点数,x 可以是整数或字符串。

    2.1K20

    Python数字类型

    数字类型 数字类型是不可变类型。所谓的不可变类型,指的是类型的值一旦有不同了,那么它就是一个全新的对象。数字1和2分别代表两个不同的对象,对变量重新赋值一个数字类型,会新建一个数字对象。...Python 支持三种不同的数字类型,整数、浮点数和复数。 整数 通常被称为整型,数值为正或者负,不带小数点。...python 3的整型可以当做Long类型使用,所以python 3 没有python 2的Long类型。...表示数字的时候,有时我们还会用八进制或十六进制来表示: 十六进制用0x前缀和0-9,a-f表示,例如:0xff00 八进制用0o前缀和0-7表示,例如0o45 python的整数长度为16,32位,并且通常是连续分配内存空间的...数字类型转换 在某些特定的情况下,我们需要对数字的类型进行转换。python为我们提供了内置的数据类型转换函数。 int(x) 将x转换为一个整数。

    1K40

    python学习总结四(python数字

    一 简介 数字 提供了标量贮存和直接访问。他是不可改类型。也就是数字的值变化时是生成了 新的对象。 1 如何创建数字和赋值。(数字对象) a = 1 就这么简单。...2 如何更新数字 因为单独数字不能做为变量,改变他的值。“3+5” 实际上没有改变他的值 只是重新生成了一个数值对象,并得到引用他而已。python 与 其他不同。...三 浮点 就是小数点的数字 每个浮点型 占8个字节(64位) 四 复数 ?...操作符就不说了 五 关于数字的内建函数和工厂函数 1 标准的 前面说了: cmp() ,str() ,type() 2 互转的函数: int() , long(),float(), complex()...3 功能函数: #abs() 返回一个数字的绝对值 ,如果是复数就返回他的模。

    47910

    Python中的数字

    Python文件“使用说明”: Python的文件当然要以.py为结尾。 Linux上编写python文件要声明编译器位置: 首行:#!...Python中定义变量不需要声明,但需要赋值才能生效。变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型,由此可见,Python是一种弱类型语言。...变量赋值: 方式一:a=1 方式二:a = b = c = 1 方式三:a,b,c = 1,2,3 Python中的数字 Python2中支持四种数字类型:int、float、long、complex...Python3中支持四种数字类型:int、float、bool、complex(复数) Python所能表示进制数: In [1]: var = 0b111 (二进制) In [2]: var Out...: abs(x)返回数字x的绝对值 cmp(x,y)如果Xy)-(x pow(x,y) 返回x的y次幂 sum(iterable) 求一个可迭代对象每个元素相加之和 divmod(x,y) 返回x

    1.3K80
    领券