48、Java 反序列化与表达式注入漏洞深度剖析

Java 反序列化与表达式注入漏洞深度剖析

1. Java 反序列化漏洞概述

在 Java 编程中,反序列化漏洞是一个常见且危险的安全隐患。我们先来了解下相关的基础知识,包括漏洞入口点和数据特征。

1.1 漏洞入口点

Java 反序列化过程的入口点是对 ObjectInputStream 对象调用 readObject 函数。不过,我们必须考虑序列化数据的来源是否可由用户控制,这些数据来源可能包括 Web 应用中的 cookie、GET 参数、POST 参数、流、HTTP 头或数据库等。

1.2 数据特征

序列化数据的头部通常是固定的,但字节流在传输过程中可能会被编码。我们可以尝试对编码数据进行解码,并检查数据的前缀。正常序列化数据的字节流前缀为 ac ed 00 05 ,经过 Base64 算法编码后会变成 rO0AB

2. 反序列化漏洞利用方式

使用 JDK 内置 Serializable 编码的反序列化漏洞有两种不同的利用方式。

2.1 生成完整对象前的利用

这种方式是在 JDK 对恶意序列化数据进行反序列化的过程中实现攻击效果。它主要基于对 Java 开发中频繁调用函数的理解,来寻找漏洞触发点。例如, commons-collections 3.1 反序列化利用中的经典 RCE 小工具,就是以 readObject 函数为入口点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值