反序列化Pickle与r2pickledec实战
什么是Pickle?
Pickle是Python内置的序列化算法,能够将任何Python对象转换为字节流以便存储或网络传输。但Pickle notoriously dangerous(以危险著称)——永远不要反序列化来自不可信源的数据,否则可能导致远程代码执行。
Pickle基础
Pickle采用简单的汇编语言实现,仅包含68条指令,主要基于栈操作。指令名称直观易懂,例如empty_dict会将空字典压入栈中。栈通常只允许访问顶部项,如需访问其他项需使用memo(备忘录)机制。
安装Radare2和r2pickledec
推荐使用Radare2(简称r2)进行逆向分析,并通过r2pm安装插件:
|
|
实战分析Pickle文件
通过base64编码的示例文件,我们使用r2进行解析:
|
|
输出显示包含requests.sessions和Session字符串,表明该Pickle使用了requests库的会话功能。
反编译与关键发现
使用pdPf命令进行反编译并设置变量名标志。分析返回对象时发现:
|
|
进一步分析认证字段发现敏感信息:
|
|
成功提取到管理员凭证:(“admin”, “Pickles are fun”)。
二进制修补技术
使用Radare2修改URL地址:
|
|
JSON与自动化分析
r2pickledec支持JSON输出(pdPj),便于自动化处理:
|
|
可通过r2pipe编写脚本批量修改多个文件中的URL地址。
结论
r2pickledec插件极大简化了Pickle逆向分析过程,结合Radare2的强大功能可实现:
- 可视化反编译输出
- 精确的二进制修补
- 自动化JSON分析
- 批量处理能力
该工具特别适用于安全研究人员分析恶意序列化数据和企业安全审计场景。
预告:后续文章将深入探讨Python Pickle混淆技术及其防御方法。