深入解析Python Pickle反序列化与r2pickledec工具实战

本文详细介绍了Python Pickle序列化机制的安全风险,并演示如何使用r2pickledec工具进行反编译分析。通过实际案例展示了如何从Pickle文件中提取敏感信息(如认证凭证),并利用Radare2进行二进制修补和自动化分析。

反序列化Pickle与r2pickledec实战

什么是Pickle?

Pickle是Python内置的序列化算法,能够将任何Python对象转换为字节流以便存储或网络传输。但Pickle notoriously dangerous(以危险著称)——永远不要反序列化来自不可信源的数据,否则可能导致远程代码执行。

Pickle基础

Pickle采用简单的汇编语言实现,仅包含68条指令,主要基于栈操作。指令名称直观易懂,例如empty_dict会将空字典压入栈中。栈通常只允许访问顶部项,如需访问其他项需使用memo(备忘录)机制。

安装Radare2和r2pickledec

推荐使用Radare2(简称r2)进行逆向分析,并通过r2pm安装插件:

1
2
$ r2pm -U              # 更新包数据库
$ r2pm -ci pickledec   # 清理安装

实战分析Pickle文件

通过base64编码的示例文件,我们使用r2进行解析:

1
2
$ r2 -a pickle test.pickle
[0x00000000]> pd

输出显示包含requests.sessionsSession字符串,表明该Pickle使用了requests库的会话功能。

反编译与关键发现

使用pdPf命令进行反编译并设置变量名标志。分析返回对象时发现:

1
2
3
4
str_x5f4 = "baseurl"
str_x5fe = "https://example.com/"
dict_x21 = {str_x24: what_x5f3, str_x5f4: str_x5fe}
what_x616 = g_Api_x1c.__new__(g_Api_x1c, *())

进一步分析认证字段发现敏感信息:

1
2
3
4
str_x30e = "auth"
str_x315 = "admin"
str_x31d = "Pickles are fun"
tup_x32f = (str_x315, str_x31d)

成功提取到管理员凭证:(“admin”, “Pickles are fun”)。

二进制修补技术

使用Radare2修改URL地址:

1
2
3
[0x000005fe]> oo+                 # 以读写模式重新打开文件
[0x000005fe]> r+ 1                # 为更长URL增加字节空间
[0x000005fe]> wa short_binunicode "https://doyensec.com/"

JSON与自动化分析

r2pickledec支持JSON输出(pdPj),便于自动化处理:

1
2
[0x00000000]> pdPj @0 ~{stack[0].value[1].args[0].value[1][1].offset}
1534

可通过r2pipe编写脚本批量修改多个文件中的URL地址。

结论

r2pickledec插件极大简化了Pickle逆向分析过程,结合Radare2的强大功能可实现:

  • 可视化反编译输出
  • 精确的二进制修补
  • 自动化JSON分析
  • 批量处理能力

该工具特别适用于安全研究人员分析恶意序列化数据和企业安全审计场景。

预告:后续文章将深入探讨Python Pickle混淆技术及其防御方法。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计