今天在学习的时候又接触到了JAVA反序列化漏洞。一直只知道JAVA反序列化就是利用反序列化工具进行攻击在目标系统中执行命令利用的就是传输对象时采用JAVA序列化。但是也只知道这么多了。所以就想着今天再了解一下反序列化漏洞。顺便再写个笔记。JAVA序列化什么是JAVA序列化序列化可以让数据持久化将对象等数据转化成字节序列也就是八位01序列存储在存储器中。在数据传输中便可以利用JAVA序列化让复杂的数据变成01序列进行传输。序列化 对象 -- 字符串反序列化 字符串 -- 对象序列化协议XMLSOAP、JSON、ProtobufJAVA序列化的实现我初步学习时了解到JAVA序列化的实现依赖Serializable接口。但是实际上JAVA反序列化的实现还有其他的框架比如Protobuf框架和Jackson框架在一些情况下其他框架比原有的Serializable接口实现选择优先级更高。JAVA序列化实现的方式对反序列化漏洞影响非常大因为反序列化漏洞的关键是利用JAVA反序列化时使用的构造器方法、setter方法等。也就是说不同的实现方式导致序列化的方式不同利用反序列化漏洞的方式也截然不同。JAVA反序列化漏洞拿原生的JAVA序列化为例。漏洞根源主要的攻击操作是攻击者通过构造一个恶意的序列化数据诱导程序在反序列化过程中执行到预期之外的恶意代码从而实现远程代码执行RCE.攻击发生的入口是反序列化类的readObject()。readObject和writeObject()是JAVA序列化的核心方法用于自定义序列化/反序列化逻辑的两个私有方法。这两个方法可以由开发者重写。如果反序列化中的readObject被类重写那么就会优先执行其中的自定义逻辑。这个便是攻击的起点。Gadget ChainGadget 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反序列化进行渗透测试
基础知识丨JAVA序列化与反序列化漏洞
发布时间:2026/5/19 1:31:28
今天在学习的时候又接触到了JAVA反序列化漏洞。一直只知道JAVA反序列化就是利用反序列化工具进行攻击在目标系统中执行命令利用的就是传输对象时采用JAVA序列化。但是也只知道这么多了。所以就想着今天再了解一下反序列化漏洞。顺便再写个笔记。JAVA序列化什么是JAVA序列化序列化可以让数据持久化将对象等数据转化成字节序列也就是八位01序列存储在存储器中。在数据传输中便可以利用JAVA序列化让复杂的数据变成01序列进行传输。序列化 对象 -- 字符串反序列化 字符串 -- 对象序列化协议XMLSOAP、JSON、ProtobufJAVA序列化的实现我初步学习时了解到JAVA序列化的实现依赖Serializable接口。但是实际上JAVA反序列化的实现还有其他的框架比如Protobuf框架和Jackson框架在一些情况下其他框架比原有的Serializable接口实现选择优先级更高。JAVA序列化实现的方式对反序列化漏洞影响非常大因为反序列化漏洞的关键是利用JAVA反序列化时使用的构造器方法、setter方法等。也就是说不同的实现方式导致序列化的方式不同利用反序列化漏洞的方式也截然不同。JAVA反序列化漏洞拿原生的JAVA序列化为例。漏洞根源主要的攻击操作是攻击者通过构造一个恶意的序列化数据诱导程序在反序列化过程中执行到预期之外的恶意代码从而实现远程代码执行RCE.攻击发生的入口是反序列化类的readObject()。readObject和writeObject()是JAVA序列化的核心方法用于自定义序列化/反序列化逻辑的两个私有方法。这两个方法可以由开发者重写。如果反序列化中的readObject被类重写那么就会优先执行其中的自定义逻辑。这个便是攻击的起点。Gadget ChainGadget 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反序列化进行渗透测试