跳转至

不安全的反序列化 (Insecure Deserialization)

序列化 (Serialization) 是将某些对象转换为稍后可以恢复的数据格式的过程。人们经常序列化对象以便将其保存到存储中,或作为通信的一部分发送。反序列化 (Deserialization) 是该过程的反向操作——从某种格式的数据结构中提取数据,并将其重建为对象。 —— OWASP

摘要 (Summary)

反序列化标识符 (Deserialization Identifier)

检查以下在其他章节中的子部分:

对象类型 头部 (十六进制) 头部 (Base64) 指标 (Indicators)
.NET ViewState FF 01 /w 通常出现在 HTML 表单周围的隐藏输入中
BinaryFormatter 0001 0000 00FF FFFF FF01 AAEAAAD 对 Base64 编码解码后,检查是否存在长的 FF FF FF FF 序列。
Java 序列化数据 AC ED rO 对 Base64 编码解码后,检查前几个字节。
PHP 序列化数据 4F 3A Tz 前缀如 O:, a:, s:, i:, b: 以及长度指示符。
Python Pickle 80 04 95 gASV 文本:操作码如 (lp0, S'Test'
Ruby Marshal 04 08 BAgK 对 Base64 编码解码后,检查开头是否存在 \x04\x08

POP Gadget (POP Gadgets)

POP (Property Oriented Programming,面向属性编程) Gadget 是由应用程序类实现的一段代码,可以在反序列化过程中被调用。

POP gadget 特性:

  • 可被序列化
  • 具有公开/可访问的属性
  • 实现了特定的易受攻击的方法
  • 具有访问其他“可调用”类的权限

实验环境 (Labs)

参考资料 (References)