声明 文章首发于跳跳糖社区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对,添加或更新到栈的第三个对象(必须为列表或字典,列表以数字作为
有人说,不要轻易加载未知来源的模型,否则存在反序列化攻击的风险,本文就对此言论进行测试分析。...Pickle反序列化漏洞 通常情况下,会用到Pickle来将一些变量/对象转换成字节串进行存储,此操作称为序列化。 读取pkl文件,还原其中的数据,此操作称为反序列化。...而在Python中,有一个天然的魔法方法__reduce__,它在进行反序列化中,会自动执行其下的内容,这就造成了一个可被用于攻击的漏洞。...具体的解释可参考官方文档:https://docs.python.org/3/library/pickle.html 下面看一个示例: import os import pickle class Test...PyTorch反序列化漏洞 Pytorch的模型保存和加载底层依然是用到了Pickle,因此同样存在反序列化的漏洞。
range()函数 \>>> range(1,5) # 代表从1到5(不包含5) [1, 2, 3, 4] \>>> range(1,5,2) # 代表从1...
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 因此我们可以通过如下代码轻松构造
https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf 序列化与反序列化 Python...最终留在栈顶的值将被作为反序列化对象返回。 stack 由 Python 的 list 实现,被用来临时存储数据、参数以及对象。...return RestrictedUnpickler(io.BytesIO(s)).load() server 端将接收到的数据进行反序列,这里与常规的 pickle.loads 不同,采用的是 Python...PS:我的环境是 Python 3.7.4,反序列化时获取到的 builtins 是一个 dict,所以用了两次 get,视环境进行调整吧。...反序列化漏洞/ https://www.leavesongs.com/PENETRATION/code-breaking-2018-python-sandbox.html
概述 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
本文内容: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 可以是整数或字符串。
长整型也可以使用小写”L”,但是还是建议您使用大写”L”,避免与数字”1”混淆。Python使用”L”来显示长整型。...Python abs() 函数 描述 abs() 函数返回数字的绝对值。 语法 以下是 abs() 方法的语法: abs( x ) 参数 x – 数值表达式。...函数 描述 ceil() 函数返回数字的上入整数。...返回值 返回数字的绝对值。 实例 #!...floor() 函数 描述 floor() 返回数字的下舍整数。
数字类型 数字类型是不可变类型。所谓的不可变类型,指的是类型的值一旦有不同了,那么它就是一个全新的对象。数字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转换为一个整数。
在python中,数据采用了对象的形式(无论是python内置对象还是使用python工具和像C语言自行创建的对象)。...Python数字类型工具: 整数和浮点数 复数 固定精度的十进制数 有理分数 集合 布尔类型 无穷的整数类型 各种数字内置函数和模块 python数字类型在程序中的显示方式之一是作为常量(还有一个是调用模块使用函数...>> 5.0//3 1.0 >>> 5//2.0,5//-2.0 (2.0, -3.0) 整数精度,在python3.0中整数可以使用无穷的长度,只要内存足够大。...,第二个数字是指定的数字的进制。 ...1、小数数字,是通过导入模块调用函数后创建的,使用小数数字有固定的精度浮点值。
今天的题目与自定义函数的定义以及使用有关,主要是传参问题,好多朋友都问我传参不知道传什么好,其实还是代码量不够,写得多了,报错多了,就知道写什么了 题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串
数字 解释器就像一个简单的计算器一样:你可以在里面输入一个表达式然后它会写出答案。...在这个手册的后半部分我们会看到更多的数字类型。 除法运算 (/) 永远返回浮点数类型。...这意味着当你把Python用作桌面计算器时,继续计算会相对简单,比如: >>> tax = 12.5 / 100 >>> price = 100.50 >>> price * tax 12.5625 >...除了 int 和 float,Python也支持其他类型的数字,例如 Decimal 或者 Fraction。...Python 也内置对 复数 的支持,使用后缀 j 或者 J 就可以表示虚数部分(例如 3+5j )。
Python Number 数据类型用于存储数值。 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间。...,varN]]]] 您可以通过使用del语句删除单个或多个对象,例如: del var del var_a, var_b Python 支持四种不同的数值类型: 整型(Int) - 通常被称为是整型或整数...052318172735L -32.54e100 3e+26J 0x69 -4721885298529L 70.2-E12 4.53e-7j 长整型也可以使用小写"L",但是还是建议您使用大写"L",避免与数字...Python使用"L"来显示长整型。 Python还支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型
一 简介 数字 提供了标量贮存和直接访问。他是不可改类型。也就是数字的值变化时是生成了 新的对象。 1 如何创建数字和赋值。(数字对象) a = 1 就这么简单。...2 如何更新数字 因为单独数字不能做为变量,改变他的值。“3+5” 实际上没有改变他的值 只是重新生成了一个数值对象,并得到引用他而已。python 与 其他不同。...三 浮点 就是小数点的数字 每个浮点型 占8个字节(64位) 四 复数 ?...操作符就不说了 五 关于数字的内建函数和工厂函数 1 标准的 前面说了: cmp() ,str() ,type() 2 互转的函数: int() , long(),float(), complex()...3 功能函数: #abs() 返回一个数字的绝对值 ,如果是复数就返回他的模。
分别用while循环和for循环来玩转猜数字游戏 1.对于限定猜数字次数 (1)while循环 number = 56 count = 0 while count < 3: guess_number
构造猜数字核心函数 import random def guess_core(guess_min,guess_max,guess_counrt): '''猜数字核心判断函数 :param...guess_min 范围的开始 :param guess_max 范围的结束 :param guess_counrt 猜数字的次数''' print('请猜出%d~%d之间的任意一个数字你有...构造用户外壳函数 def guess_number(): '''猜数字函数''' print('欢迎来到猜数字游戏') guess_min = number_judge(input...('输入开始数字:')) guess_max = number_judge(input('输入结束数字:')) guess_counrt = number_judge(input('输入猜取次数...调用执行 guess_number() 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
目录 python学习之数字 1.python数值类型 2. 数字类型转换 3. 常用函数 3.1 数学函数 3.2 随机函数 python学习之数字 Python 数字数据类型用于存储数值。...1.python数值类型 1.1 Python 支持三种不同的数值类型: 整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点。...Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。...x 和 y 是数字表达式。 3....常用函数 3.1 数学函数 函数 描述 abs(x) 返回数字的绝对值,如abs(-10) 返回 10 fabs(x) 返回数字的绝对值,如math.fabs(-10) 返回10.0 ceil(x) 返回数字的上入整数
def guessnum(): guess,count=0,1 rand=random.randint(1,101) print ('you just h...
【一】range()函数 在python中可以使用range()函数来产生一系列数字 for w in range(1,11): print(w) 输出: 1 2 3 4 5 6 7 8...9 10 #注意:这里的到10就结束了,不包括11 【二】list()函数 如果将range()作为参数传递给list()函数,那么就会将数字以列表的形式输出 num=list(range(1,11
领取专属 10元无门槛券
手把手带您无忧上云