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

Python】PicklePyTorch反序列化漏洞

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

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

Python 反序列化漏洞学习笔记

与 PHP 序列化相似,Python 序列化也是将对象转换成具有特定格式的字符串(py2)或字节流(py3),以便于传输与存储,比如 session 但是在反序列化时又与 PHP 反序列化又有所不同...: PHP 反序列化要求源代码中必须存在有问题的类,要求是被反序列化的对象中存在可控参数,具体可看这里 而 Python 反序列化不需要,其只要求被反序列化的字符可控即可造成 RCE,例如: # Python2..." # 将被反序列化的字符串 pickle.loads(s) # 反序列化后即可造成命令执行,因此网站对要被反序列化的字符串应该做严格限制 在 Python 中,一切皆对象,因此能使用 pickle...Why Python 反序列化漏洞跟 __reduce__() 魔术方法相关 其类似于 PHP 对象中的 __wakeup() 方法,会在反序列化时自动调用 __reduce__() 魔术方法可以返回一个字符串或者时一个元组...pass # 反序列化时会调用 __reduce__ 方法 由于 Python 反序列化时只需要被反序列化的字符串可控(而不需要源代码中存在有安全问题的类)便可造成 RCE 因此我们可以通过如下代码轻松构造

87630

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

2.9K20

CTFshow刷题日记-WEB-反序列化(web254-278)PHP反序列化漏洞、pop链构造、PHP框架反序列化漏洞、python反序列化漏洞

> 让 isVip 的值为 ture 去构造序列化,反序列化简单的题还是很简单的,因为方法在反序列化时没法保存,所以只能控制属性 <?...b.start() 需要base64解码 此部分引用了tari tari师傅的博客 https://tari.moe/2021/04/06/ctfshow-unserialize/ Python...反序列化 web277 通过wappalyzer,可知题目使用了 flask 框架 关于 Python 反序列化可以看这篇文章,LINK1、LINK2,关于 Python 反序列化的做法真的很多,和...print(base64.b64encode(test)) 在 vps 上监听对应端口 带参数访问即可 web278-过滤了os.system 提示:过滤了os.system 使用上题poc即可 python...code.compile_command,codeop.compile_command, pty.spawn, posixfile.open,posixfile.fileopen, platform.popen 这也只是 Python

1.5K40

利用加载器以及Python反序列化绕过AV

本文仅以分离免杀为例,利用Python语言制作加载器对Cobaltstrike生成的Shellcode进行绕过杀软作为样例,举例说明通过加密Shellcode、分离免杀以及Python反序列化达到bypass...Python加载Shellcode 再了解了上述加载Shellcode的原理之后,我们就可以利用Python3中的ctypes库实现这一过程,ctypes是Python的外部函数库。...但是像执行命令的exec、eval等函数特征比较明显,所以我们对它也需要进一步处理,而同其它语言一样,Python也有序列化的功能,官方库里提供了pickle/cPickle的库用于序列化和反序列化,pickle...Pickle反序列化带来的安全问题相关内容,我们就可以知道如果这里的run()函数时自动执行的我们就可以通过反序列化过程来进行一个调用过程,与PHP中的__wakeup类似,Python中也有类似的方法可以使其在被反序列化的时候执行...打包成可执行程序 上文我们构建了我们的Python文件,但是利用起来需要目标环境支持Python以及相应的库文件支持,因此我们可以将我们的Python脚本打包成可执行程序来解决这些环境问题,打包方法有很多

1K30

3位反序

问题描述: 所谓反序数,即有这样成对的数,其特点是其中一个数的数字排列顺序完全颠倒过来,就变成另一个数,如102和201,36和63等,简单的理解就是顺序相反的两个数,我们把这种成对的数互称为反序数。...反序数唯一不可能出现以0结尾的数。 一个3位数各位上的数字都不相同,它和它的反序数的乘积是280021,这个3位数应是多少?...然后将原数和反序后的数分别存到列表中,通过reduce函数(基于lambda实现)获得两个数的整型值,最后判断两值之积是否等于280021即可; 另外,我没有判断三位数的各数是否相等,我觉得虽然如121...这样的数它的反序数还是它,但是用来判断14641(121*121)也是可以的,这样增大了使用范围,不仅仅止步于反序数了,如果想要完全满足题目要求,加上几句判断语句即可; 示例代码: for b in

50610

Python开发之序列化与反序列化:pi

Python中提供pickle和json两个模块来实现序列化与反序列化,pickle模块和json模块dumps()、dump()、loads()、load()这是个函数,其中dumps()、dump(...4 pickle模块与json模块的区别 (1)pickle模块用于Python语言特有的类型和用户自定义类型与Python基本数据类型之间的转换   json模块用于字符串和python数据类型间进行转换...JSON和Python内置的数据类型对应如下: JSON类型 Python类型 {} dict [] list "string" 'str'或u'unicode' 1234.56 int或float...true/false True/False null None 5 总结   (1)序列化与反序列化是为了解决内存中对象的持久化与传输问题;   (2)Python中提供了pickle和json两个模块进行序列化与反序列化...;   (3)dumps()和dump()用于序列化,loads()和load()用于反序列化;   (4)pickle模块能序列化任何对象,序列化结果为bites类型,只适合于Python机器之间交互

87620

Python算法——树的序列化与反序列化

Python中的树的序列化与反序列化 树的序列化与反序列化是指将树结构转换为字符串表示(序列化),以及将字符串表示还原为原始树结构(反序列化)。...在本文中,我们将深入讨论如何实现树的序列化与反序列化算法,提供Python代码实现,并详细说明算法的原理和步骤。 树的序列化 树的序列化可以通过深度优先搜索(DFS)来实现。...树的反序列化需要根据序列化字符串的规律,逐个还原树的节点。...= deserialize_level_order(serialized_tree_level_order) # 验证反序列化结果 print("反序列化后的树:") print_tree(deserialized_tree_level_order...) 输出结果: 层序遍历序列化: 1,2,3,4,5,null,null,null,null,null,null 反序列化后的树: 1 2 3 4 5 这表示通过序列化与反序列化算法,我们能够将二叉树转换为字符串表示

17010
领券