反序列化


import pickle

class A(object):
    a = 1
    b = 2
    def run(self):
        print(self.a,self.b)

print(pickle.dumps(A()))

Python 中也有类似的方法可以使其在被反序列化的时候执行,这里以 __reduce__ 为例

import pickle

class A(object):
    a = 1
    b = 2
    def __reduce__(self):
        return (print, (self.a+self.b,))

print(pickle.dumps(A()))

通过 pickle 的 loads 来反序列化并自动执行

我们可以看到我们已经将我们的 a+b 自动输出了(这里也可以提示我们,pickle 的 loads 参数如果可以被控制,我们就可以进行利用)

我们这里可以对其进行混淆、编码操作,依旧以 Base64 编码为例,我们序列化代码如下

接下来我们只需要进行反序列化调用之前先进行解码操作即可


Source & Reference