071-Web攻防-Python安全&反序列化&代码段&资源项目等
071-Web攻防-Python安全&反序列化&代码段&资源项目等
Python-PYC-反编译文件出源码
pyc 文件是py 文件编译后生成的字节码文件(byte code),pyc 文件经过python 解释器最终会生成机器码运行。因此pyc文件是可以跨平台部署的,类似Java的.class 文件,一般py 文件改变后,都会重新生成pyc文件。
- 什么是
.pyc文件?.pyc文件是 Python 编译后的字节码 文件。- Python 解释器会将源代码(
.py文件)编译成.pyc文件以加快后续执行。 .pyc文件存储的是经过编译的 字节码,可以被 Python 解释器直接执行,而不需要重新编译源代码。- .pyc
文件通常存储在pycache` 目录下,这个目录是在执行 Python 程序时自动创建的。
真题:http://pan.baidu.com/s/1jGpB8DS
安装:pip install uncompyle6
使用:uncompyle6 -o test.py test.pyc
下载:https://github.com/rocky/python-uncompyle6




Python-反序列化-调用链&魔术方法
JAVA PHP Python 语言序列化和反序列化函数:
| 编程语言 | 序列化函数/接口 | 反序列化函数/接口 | 备注 |
|---|---|---|---|
| Java | Serializable (接口) |
ObjectInputStream.readObject() |
Serializable 用于标记类可以被序列化 |
Externalizable (接口) |
ObjectInputStream.readUnshared() |
Externalizable 用于更精细的控制序列化和反序列化过程 |
|
fastjson |
fastjson.parseObject() |
fastjson 用于 JSON 格式的序列化和反序列化 |
|
jackson.ObjectMapper.writeValue() |
jackson.ObjectMapper.readValue() |
Jackson 是常用的 JSON 处理库 |
|
Gson.toJson() |
Gson.fromJson() |
Gson 用于 JSON 格式的序列化和反序列化 |
|
ObjectOutputStream.writeObject() |
ObjectInputStream.readObject() |
标准 Java 对象序列化和反序列化接口 | |
XMLDecoder.writeObject() |
XMLDecoder.readObject() |
主要用于 XML 格式的序列化和反序列化 | |
XStream.toXML() |
XStream.fromXML() |
XStream 用于 XML 格式的序列化和反序列化 |
|
| PHP | serialize() |
unserialize() |
PHP 内建的序列化和反序列化函数 |
json_encode() |
json_decode() |
json_encode 和 json_decode 用于 JSON 格式的序列化和反序列化 |
|
| Python | pickle.dump() (序列化对象到文件) |
pickle.load() (从文件反序列化对象) |
pickle 用于对象的二进制序列化 |
marshal.dump() |
marshal.load() |
marshal 用于 Python 内部使用,不适合跨平台 |
|
json.dump() (将对象序列化为 JSON 格式) |
json.load() (从 JSON 格式反序列化对象) |
json 用于处理 JSON 格式 |
|
PyYAML.dump() |
PyYAML.load() |
PyYAML 用于 YAML 格式的序列化和反序列化 |
|
shelve (对象持久化) |
shelve (对象反序列化) |
shelve 用于将 Python 对象存储在文件中 |
|
PIL.Image.save() (序列化图像对象) |
PIL.Image.open() (反序列化图像对象) |
PIL 用于图像数据的保存和加载 |
|
unzip() |
zipfile.ZipFile.read() |
Python 中用于压缩文件的解压操作 |
序列化:把类对象转化为字节流或文件
反序列化:将字节流或文件转化为类对象
pickle.dump(obj,file):将对象序列化后保存到文件
pickle.iad(file):将文件序列化内容反序列化为对象
pickle.dumps(obj):将对象序列化成字符串格式的字节流
pickle.loads(bytesobj):将字符串字节流反序列化为对象
PyYAML yaml.load()JSON ison.loads(s)
marshal
PyYAML
shelve
PIL
unzip
魔术方法:
reduce()反序列化时调用
reduce ex()反序列化时调用
setstate()反序列化时调用 用于反序列化时设置对象的状态
getstate()序列化时调用
1、序列化和反序列化演示-test.py

2、序列化和反序列化形成-test.py



__setstate__() 主要用于在对象反序列化时恢复对象的状态。它允许你控制如何将数据从反序列化格式(如文件或内存中的二进制格式)加载回对象。
3、序列化和反序列化利用-server.py pop.py

1 | gASVOwAAAAAAAACMCGJ1aWx0aW5zlIwEZXZhbJSTlIwfX19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2NhbGMnKZSFlFKULg== |

4、序列化和反序列化赛题-[watevrCTF-2019]Pickle store
跟上题差不多参考:watevrCTF-2019 Pickle Store
黑盒:Python反序列化特征:base64编码前面g固定(列化数据)
测试:直接提交构造的 payload 测试
Python-格式化字符串-类魔术方法引用
参考:https://xz.aliyun.com/t/3569
第一种:&操作符
第二种:string.Template
第三种:调用format方法(可控格式化字符串)

第四种:f-Strings(可控格式化字符串)








