温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

什么是java反序列化攻击

发布时间:2026-09-14 11:40:49 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

Java 反序列化攻击(Java Deserialization Attack) 是一种常见的网络安全漏洞利用方式,主要发生在 Java 程序使用**对象序列化(Serialization)反序列化(Deserialization)**机制时,攻击者通过构造恶意的序列化数据,在目标系统上执行任意代码或造成其他危害。

下面从原理到危害、例子和防御,系统地说明。


一、什么是 Java 序列化与反序列化

1. 序列化(Serialization)

把 Java 对象转换成字节流,方便:

  • 网络传输
  • 存储到文件或数据库
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(obj);

2. 反序列化(Deserialization)

把字节流恢复成 Java 对象:

ObjectInputStream ois = new ObjectInputStream(in);
Object obj = ois.readObject();

⚠️ 关键点
readObject() 会自动调用对象的反序列化逻辑,无需程序员显式调用方法


二、为什么会产生反序列化攻击

Java 反序列化本身是“安全的机制”,问题在于:

反序列化时会自动执行对象中的逻辑

如果攻击者能控制反序列化的数据,并且:

  • 目标系统存在“危险的类”
  • 这些类在反序列化时会触发某些方法(如 readObjecthashCodeequals

就可能形成反序列化利用链(Gadget Chain),最终执行任意代码。


三、典型攻击流程

  1. 攻击者构造一个“恶意序列化对象”
  2. 通过以下方式发送到服务器
    • HTTP 请求体
    • Cookie
    • RMI
    • JMS
    • 缓存(Redis / Memcached)
  3. 服务器调用 readObject()
  4. 触发恶意逻辑(如命令执行)

四、经典例子

1. Apache Commons Collections 反序列化漏洞(2015)

这是最著名的 Java 反序列化攻击案例。

  • 利用 InvokerTransformer
  • 在反序列化时调用 Runtime.getRuntime().exec("命令")

简化逻辑:

反序列化对象
→ 调用 Transformer
→ 反射调用方法
→ 执行系统命令

影响:

  • WebLogic
  • WebSphere
  • JBoss
  • Jenkins

2. 简单示意(伪代码)

Object evil = ChainedTransformer(
    new InvokerTransformer("exec", ...)
);

byte[] data = serialize(evil);
sendToServer(data);

服务器一旦反序列化:

readObject(data); // 命令被执行

五、常见受影响场景

  • 使用 ObjectInputStream 直接反序列化不可信数据
  • 使用旧版本第三方库(Commons Collections、Fastjson、XStream)
  • RMI / JNDI 服务
  • 分布式缓存系统

六、常见漏洞库(历史)

问题
Apache Commons Collections 命令执行
Fastjson 自动类型反序列化
XStream XML 反序列化
Jackson 多态类型处理

七、如何防御 Java 反序列化攻击

✅ 1. 不要反序列化不可信数据

最重要原则

// ❌ 危险
Object obj = ois.readObject();

✅ 2. 使用白名单(ObjectInputFilter)

Java 9+ 支持:

ObjectInputFilter filter = info -> 
    info.serialClass() != null &&
    info.serialClass().getName().startsWith("com.safe.")
    ? Status.ALLOW : Status.REJECT;

ois.setObjectInputFilter(filter);

✅ 3. 升级依赖库

  • Commons Collections ≥ 3.2.2
  • Fastjson ≥ 1.2.83(或换 Jackson)
  • 及时打补丁

✅ 4. 替换序列化方案

  • JSON(Jackson / Gson)
  • Protocol Buffers
  • MessagePack

✅ 5. 安全审计

  • 禁止 readObject 执行危险逻辑
  • 扫描反序列化入口

八、一句话总结

Java 反序列化攻击 = 不可信数据 + 自动执行对象逻辑 + 危险类利用链

如果你愿意,我也可以:

  • 给你一个可演示的安全/恶意示例
  • Fastjson 反序列化原理
  • 或结合 CTF / 实战漏洞 来讲
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI