概念

序列化和反序列化的区别

  • 序列化:把Java对象转换为字节序列的过程
  • 反序列化:把字节序列转化为Java对象的过程

出现点

  1. 功能特性

    • 反序列化操作一般应用在导入模板文件、网络连通、数据传输、日志格式化存储、对象数据落磁盘或DB存储等业务场景,因此审计过程应重点关注这些功能模块
  2. 数据特性

    • 一段数据以rO0AB开头,基本可以确定是JAVA序列化base64加密的数据
    • aced开头,是java序列化数据的16进制
  3. 具体出现
    • 网络通信:RMI、JMX、JMS、RPC框架(如Dubbo)或使用原生Java序列化协议的Socket通信。
    • Web应用:通过HTTP请求参数、Cookie、Session(HttpSession存储于文件或Redis)传入并反序列化用户可控的对象。
    • 缓存与持久化:从文件系统或缓存(如Redis、Ehcache)读取序列化对象(.ser文件或字节流)。
    • 第三方组件:使用了存在不安全反序列化漏洞的第三方库(如Apache Commons Collections, Spring, Fastjson等)。

利用

Ysoseria集成的jar配合生成、特性的专业漏洞利用工具等