Python反序列化漏洞分析

简介

Python序列化和反序列化是将一个类对象向字节流转化从而停止存储和传输, 然后运用的时分再将字节流转化回原始的对象的一个过程, 这个和其他言语的序列化与反序列化其实都差不多.

Python中序列化普通有两种方式: pickle模块和json模块, 前者是Python特有的格式, 后者是json通用的格式.

相较于PHP反序列化灵敏多样的应用方式, 例如POP链结构, Phar反序列化, 原生类反序列化以及字符逃逸等. Python相对而言没有PHP那么灵敏, 关于反序列化破绽主要触及这么几个概念: pickle, pvm, __reduce__魔术办法. 本文主要来看看pickle模块的反序列化破绽问题.

Pickle

简介

Pickle能够用于Python特有的类型和Python的数据类型间停止转换(一切Python数据类型).

Python提供两个模块来完成序列化: cPicklepickle. 这两个模块功用是一样的, 区别在于cPickleC言语写的, 速度快; pickle是纯Python写的, 速度慢. 在Python3中曾经没有cPickle模块. pickle有如下四种操作办法:

函数 阐明
dump 对象反序列化到文件对象并存入文件
dumps 对象反序列化为 bytes 对象
load 对象反序列化并从文件中读取数据
loads 从 bytes 对象反序列化

简单运用

序列化操作

  • 代码
    “`python
    import pickle

class Demo():
def init(self, name=’h3rmesk1t’):
self.name = name

print(pickle.dumps(Demo()))

- Python3

```python
b'\x80\x04\x95/\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\x04Demo\x94\x93\x94)\x81\x94}\x94\x8c\x04name\x94\x8c\th3rmesk1t\x94sb.'
  • Python2
(i__main__
Demo
p0
(dp1
S'name'
p2
S'h3rmesk1t'
p3
sb.
------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片