当前位置: 首页 > news >正文

开源展示型网站莱芜百度贴吧

开源展示型网站,莱芜百度贴吧,钢板出租铺路钢板出租,中江县 网站建设Java 反序列化漏洞详解 Java 反序列化漏洞(Java Deserialization Vulnerability)是 Java 应用中一种高危安全漏洞,曾导致多个重大安全事件(如 Apache Commons Collections 漏洞、WebLogic、Jenkins 等被攻破)。它允许攻…

Java 反序列化漏洞详解

Java 反序列化漏洞(Java Deserialization Vulnerability)是 Java 应用中一种高危安全漏洞,曾导致多个重大安全事件(如 Apache Commons Collections 漏洞、WebLogic、Jenkins 等被攻破)。它允许攻击者通过构造恶意的序列化数据,在目标系统上执行任意代码(Remote Code Execution, RCE)。


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

🔹 序列化(Serialization)

将 Java 对象转换为字节流,便于存储或网络传输。

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("obj.ser"));
out.writeObject(myObject);
out.close();

🔹 反序列化(Deserialization)

将字节流恢复为 Java 对象。

ObjectInputStream in = new ObjectInputStream(new FileInputStream("obj.ser"));
MyObject obj = (MyObject) in.readObject();
in.close();

⚠️ 问题出在 readObject():它会自动调用对象的构造函数、初始化方法,甚至触发恶意代码执行


二、反序列化漏洞的原理

✅ 漏洞核心:

如果应用反序列化了不可信的数据(如用户输入、网络请求、文件上传),攻击者可以构造恶意对象,在反序列化过程中触发任意代码执行。


🔍 关键机制:readObject() 的自动调用

某些类在反序列化时会自动执行代码,例如:

  • java.util.PriorityQueue
  • org.apache.commons.collections.map.LazyMap
  • javax.management.BadAttributeValueExpException

这些类的 readObject() 方法在恢复对象时,会调用对象的 toString()equals()hashCode() 等方法。如果这些方法被恶意重写,就可能执行命令。


三、经典案例:Apache Commons Collections 漏洞(CVE-2015-4852)

这是最著名的 Java 反序列化漏洞之一。

攻击链(Gadget Chain)原理:

  1. 攻击者构造一个 LazyMap 对象,其 transformer 是一个 InvokerTransformer,可执行任意方法。
  2. LazyMap 放入 HashMapPriorityQueue
  3. 当反序列化时,某些类(如 BadAttributeValueExpException)会调用 toString()
  4. toString() 触发 LazyMap.get() → 调用 transformer.transform() → 执行 Runtime.getRuntime().exec("malicious command")

🧨 结果:攻击者可在服务器上执行任意命令,如下载木马、提权、挖矿等。


四、反序列化漏洞的利用条件

条件说明
1. 应用使用 ObjectInputStream.readObject()常见于 RMI、JMX、Spring、Hibernate、Redis 存储对象等
2. 输入数据来自不可信源如 HTTP 请求、文件上传、消息队列
3. 类路径中存在“利用链”(Gadget Chains)如 Apache Commons Collections、Groovy、Jython 等第三方库

五、常见攻击场景

场景说明
RMI(Remote Method Invocation)RMI 服务默认使用 Java 序列化,易受攻击
JMX(Java Management Extensions)JMX 接口暴露时可能被利用
Spring 框架Spring 某些组件(如 Spring REST)支持序列化对象传输
Redis / Memcached 存储 Java 对象如果反序列化缓存对象,可能被注入
文件上传反序列化用户上传 .ser 文件,服务器读取

六、如何检测反序列化漏洞?

✅ 1. 代码审计

查找是否使用:

ObjectInputStream.readObject();
ObjectInputStream.readUnshared();

✅ 2. 依赖检查

检查 pom.xmlbuild.gradle 是否包含:

  • commons-collections:commons-collections
  • groovy, jython, xstream 等存在 gadget 的库

✅ 3. 使用工具扫描

  • ysoserial:生成恶意 payload 的工具(用于测试)
  • Burp Suite + Java Deserialization Scanner 插件
  • Checkmarx、Fortify 等 SAST 工具

七、防御措施(最佳实践)

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

  • 不要从网络、文件、用户输入中反序列化对象
  • 使用 JSON、XML 等数据格式替代

✅ 2. 使用 serialVersionUID 并校验完整性

private static final long serialVersionUID = 123456789L;

但不能防止恶意对象,仅防版本错乱。

✅ 3. 自定义 readObject() 方法

在敏感类中重写 readObject(),加入校验逻辑:

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {in.defaultReadObject();// 添加校验if (this.username == null || this.username.contains(";")) {throw new InvalidObjectException("Invalid input");}
}

✅ 4. 使用 ObjectInputFilter(Java 9+)

限制可反序列化的类:

ObjectInputStream ois = new ObjectInputStream(inputStream);
ois.setObjectInputFilter(filterInfo -> {if (filterInfo.serialClass() == null) return -1;String name = filterInfo.serialClass().getName();if (name.equals("com.example.TrustedClass")) {return 1;}return -1; // 拒绝其他类
});

✅ 5. 使用安全的替代序列化方式

  • JSON:Jackson、Gson
  • Protobuf:Google Protocol Buffers
  • Kryo(需配置安全反序列化)
  • MessagePack

✅ 6. 升级依赖库

  • 升级 commons-collections 到 3.2.2+ 或 4.1+
  • 使用最新版本的 Spring、Hibernate 等框架

✅ 7. 启用 WAF 或 IPS 防护

  • 配置 Web 应用防火墙(如 ModSecurity)检测恶意序列化特征
  • 使用 RASP(运行时应用自我保护)工具

八、真实漏洞案例

漏洞影响产品CVSS 评分
CVE-2015-4852Apache Commons Collections9.8(Critical)
CVE-2017-3241Oracle WebLogic RMI9.8
CVE-2016-4437JBoss Marshalling9.8
CVE-2020-2551Oracle Coherence9.8

✅ 总结

问题回答
什么是 Java 反序列化漏洞?攻击者通过构造恶意序列化数据,在反序列化时执行任意代码
危害是什么?远程代码执行(RCE),服务器被完全控制
常见利用链?Commons Collections、Groovy、Jython 等
如何防御?1. 避免反序列化不可信数据
2. 使用 ObjectInputFilter
3. 升级依赖
4. 使用 JSON 等安全格式

📌 一句话总结
Java 反序列化漏洞是“信任字节流”的代价——永远不要反序列化不可信的数据,否则你的服务器就是攻击者的“命令行”。

http://www.dtcms.com/a/599212.html

相关文章:

  • 做网站要注意的wordpress找回密碼
  • 东莞网站建设 光龙做网站备案哪些条件
  • 维护网站建设空间出租怎么生成链接
  • 搜狗推广做网站要钱吗手机网站怎么搜索引擎
  • 第5天python内容
  • 网站建设进展报告做excel的网站
  • 怎样做付费下载的网站wordpress 引用 插件
  • 连云港市建设银行网站wordpress排除首页显示
  • 内江市规划建设教育培训中心网站wordpress 微信公众
  • 国外的贸易网站智能营销系统
  • android 线程loop
  • 自己的网站如何给别人做有偿广告网站开发的目的意义
  • 代码随想录 134.加油站
  • 专门做水产海鲜的网站吗网站添加视频
  • 电子电气架构 --- 整车EEA简述
  • 双辽建设局网站手工制作房子
  • 网站服务器慢福田在线官网
  • 54.渗透-Yakit-基础模块应用(子域名收集)
  • 化妆品网站程序熟悉网站空间 域名等相关知识
  • Carla仿真多跳转发功能开发
  • 变量捕获相关内容
  • 【ZeroRange WebRTC】NAT 与防火墙在 WebRTC 中的影响
  • 交互设计作品集网站wordpress 增加其它语言
  • 揭阳做网站设计有没有免费做编辑网站管理系统
  • 做网站可以找设计公司吗有哪些做农产品的网站有哪些
  • 上海网站建设站点推广促销
  • python web 项目 部署成 Linux 服务
  • 门业网站模板下载清远东莞网站建设
  • 湖北 网站建设网站建设 人和商圈
  • 萧县城乡建设局网站小程序制作卡片列表