Pickle反序列化攻击手法详解(Python)

2026-04-11 14:350阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

Pickle

pickle反序列化比java和php的危害要大不少
因为利用起来比较容易,很轻松可以RCE
实际应用场景中经常和其它基础漏洞配合起来使用
例如ssrf写redis序列化数据后被反序列化出恶意对象等
在很多比赛或漏挖中出现的llm应用也经常和pickle相关

能够序列化的对象

  • None
  • bool
  • int,float,complex
  • 元素全部为可打包对象的tuplelistsetdict
  • 函数
    • 使用def定义的模块顶层的函数(lambda不行)
    • 内置函数
    • 使用class定义在模块顶层的
  • 实例对象
    • __dict__属性和__getstate__()函数的返回值为可序列化对象

PS:对于不能序列化的数据会抛出PicklingError异常

opcode和Bytecode

pickle的序列化数据是一段字节流

字节流由一系列pickle opcode(直译就是操作码)组成

是一种独立的栈语言,

Python Bytecode (.pyc): 是给 PVM (Python Virtual Machine) 看的,用于通用的程序逻辑

例如:

阅读全文
标签:网络安全
问题描述:

Pickle

pickle反序列化比java和php的危害要大不少
因为利用起来比较容易,很轻松可以RCE
实际应用场景中经常和其它基础漏洞配合起来使用
例如ssrf写redis序列化数据后被反序列化出恶意对象等
在很多比赛或漏挖中出现的llm应用也经常和pickle相关

能够序列化的对象

  • None
  • bool
  • int,float,complex
  • 元素全部为可打包对象的tuplelistsetdict
  • 函数
    • 使用def定义的模块顶层的函数(lambda不行)
    • 内置函数
    • 使用class定义在模块顶层的
  • 实例对象
    • __dict__属性和__getstate__()函数的返回值为可序列化对象

PS:对于不能序列化的数据会抛出PicklingError异常

opcode和Bytecode

pickle的序列化数据是一段字节流

字节流由一系列pickle opcode(直译就是操作码)组成

是一种独立的栈语言,

Python Bytecode (.pyc): 是给 PVM (Python Virtual Machine) 看的,用于通用的程序逻辑

例如:

阅读全文
标签:网络安全