news 2026/5/19 1:31:13

基础知识丨JAVA序列化与反序列化漏洞

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基础知识丨JAVA序列化与反序列化漏洞

今天在学习的时候又接触到了JAVA反序列化漏洞。一直只知道JAVA反序列化就是利用反序列化工具进行攻击,在目标系统中执行命令,利用的就是传输对象时采用JAVA序列化。但是也只知道这么多了。所以,就想着今天再了解一下反序列化漏洞。

顺便,再写个笔记。


JAVA序列化

  • 什么是JAVA序列化?

序列化可以让数据持久化,将对象等数据转化成字节序列,也就是八位01序列,存储在存储器中。

在数据传输中,便可以利用JAVA序列化让复杂的数据变成01序列进行传输。

序列化: 对象 --> 字符串

反序列化: 字符串 --> 对象

序列化协议:

XML&SOAP、JSON、Protobuf

  • JAVA序列化的实现

我初步学习时了解到:JAVA序列化的实现依赖Serializable接口。

但是,实际上JAVA反序列化的实现还有其他的框架,比如Protobuf框架和Jackson框架,在一些情况下,其他框架比原有的Serializable接口实现选择优先级更高。

JAVA序列化实现的方式对反序列化漏洞影响非常大,因为反序列化漏洞的关键是利用JAVA反序列化时使用的构造器方法、setter方法等。也就是说:不同的实现方式导致序列化的方式不同,利用反序列化漏洞的方式也截然不同。

JAVA反序列化漏洞

拿原生的JAVA序列化为例。

  • 漏洞根源

主要的攻击操作是:攻击者通过构造一个恶意的序列化数据,诱导程序在反序列化过程中执行到预期之外的恶意代码,从而实现远程代码执行(RCE).

攻击发生的入口是反序列化类的readObject()。

readObject和writeObject()是JAVA序列化的核心方法,用于自定义序列化/反序列化逻辑的两个私有方法。这两个方法可以由开发者重写。如果反序列化中的readObject被类重写,那么就会优先执行其中的自定义逻辑。这个便是攻击的起点。

  • Gadget Chain

Gadget Chain是一条攻击链,通过多个类的方法调用而串联成的执行路径。

也就是说,是将原有的各种方法调用过来,组合成能够达到自己目的的“逻辑代码”。攻击者把Gadget Chain封装成二进制数据发送给目标,便可以实现攻击。

利用这条路径便可以实现任意代码执行(RCE)。

构造方法:

Commons Collections库中,有ConstantTransformer、InvokerTransformer。

ConstantTransformer中有transform()方法会恒等地返回一个你指定的对象。

InvokerTransformer中有transform(Object input)方法可以通过反射,调用input对象的任意方法。

利用这两个方法,可以获得到组装Gadget Chain的各个方法,从而构造Gadget Chain。

  • 反序列化工具

ysoserial是一个著名的漏洞利用生成工具,预置了大量针对不同JAVA库的Gadget链,可以一键生成恶意序列化数据,可以大大提高攻击效率,降低攻击门槛。


反序列化漏洞是非常重要的漏洞。

它的影响范围很广,几乎所有主流的Java框架和库都爆发过JAVA反序列化漏洞事件。而只要业务代码依赖于一个存在该漏洞的库,且对外使用JAVA反序列化进行传输,那么就可能遭到JAVA反序列化攻击。

而且危害等级很高,反序列化漏洞往往会导向RCE,直接实现对目标的控制。ysoserial等工具又让攻击的门槛大大降低,非常简单便可以造成致命的危害。而且难检测、难修复。

护网中一定要针对JAVA反序列化进行渗透测试

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/19 1:30:50

毫米波雷达3D重建技术:挑战与RFconstruct系统创新

1. 毫米波雷达3D重建技术概述在自动驾驶感知系统中,毫米波雷达因其独特的物理特性正扮演着越来越关键的角色。与激光雷达和摄像头相比,工作在76-81GHz频段的毫米波雷达具有穿透雾霾、雨雪的能力,且不受光照条件影响,这使其成为全天…

作者头像 李华
网站建设 2026/5/19 1:29:11

解锁Godot游戏宝库:PCK文件解包实战指南

解锁Godot游戏宝库:PCK文件解包实战指南 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 你是否曾经好奇过Godot游戏中的精美画面和动人音效是如何封装的?那些神秘的PCK文件就…

作者头像 李华
网站建设 2026/5/19 1:29:06

从零打造互动机械火鸡:微控制器与创客项目的完美结合

1. 项目概述:当传统手工艺遇上现代微控制器每年感恩节,孩子们总喜欢用手掌蘸上颜料,在纸上拓印出火鸡的形状,这几乎成了一种节日传统。但作为一个喜欢折腾硬件和代码的创客,我总在想,能不能给这个经典活动加…

作者头像 李华
网站建设 2026/5/19 1:28:04

AI应用会话管理实战:agent-sessions库架构解析与生产部署指南

1. 项目概述与核心价值最近在折腾AI应用开发,特别是涉及到需要让AI“记住”上下文、管理复杂对话状态的项目时,我发现一个挺普遍的问题:会话(Session)管理。无论是构建一个客服机器人、一个多轮对话的游戏NPC&#xff…

作者头像 李华
网站建设 2026/5/19 1:28:04

MyBatis-Plus从入门到实战,Lambda查询+注解配置+SpringBoot整合全解析

MyBatis-Plus从入门到实战,Lambda查询注解配置SpringBoot整合全解析 目录 1 什么是Mybatis-Plus 1.1 什么是mybatis-plus1.2 官方愿景1.3 特性1.4 支持数据库1.5 框架结构 2 快速入门 2.1 创建springboot项目 2.1.1 并引入依赖2.1.3 编写配置文件 2.2 创建数据库以…

作者头像 李华