中间件漏洞详解
用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。
中间件是连接操作系统、数据库与上层应用的核心组件,承担着请求转发、资源调度、消息传递等关键功能。由于其部署广泛、配置复杂且需兼容多场景,成为攻击者的重要目标。中间件漏洞不仅包括软件自身代码缺陷,还涵盖默认配置不安全、依赖组件漏洞及配置错误衍生风险,可能导致服务器被控、数据泄露、内网横向渗透等严重后果。
一、中间件漏洞概述
1. 定义与核心危害
中间件漏洞指中间件在设计、开发或配置过程中存在的安全缺陷,攻击者可利用这些缺陷绕过认证、执行恶意代码、读取敏感文件或控制服务器。其核心危害包括:
远程代码执行(RCE):攻击者直接在目标服务器上运行任意命令(如植入后门、挖矿程序);
敏感信息泄露:泄露数据库账号密码、配置文件、用户数据等;
未授权访问:无需认证即可操作中间件核心功能(如管理控制台、消息队列);
内网渗透跳板:通过被控制的中间件横向攻击内网其他服务器。
2. 漏洞分类维度
按中间件功能类型可分为 6 大类,各类漏洞特点差异显著:
中间件类型 | 典型产品 | 核心风险点 |
Web 服务器中间件 | Apache、Nginx、IIS | 路径穿越、文件解析、命令执行 |
应用服务器中间件 | Tomcat、WebLogic、JBoss | 反序列化、WAR 包部署、AJP 漏洞 |
消息队列中间件 | ActiveMQ、RabbitMQ | 未授权访问、文件上传、RCE |
缓存中间件 | Redis、Memcached | 未授权访问、主从复制 RCE |
数据库中间件 | MyCat、Sharding-JDBC | 弱口令、SQL 注入 |
其他中间件 | Nexus、Jenkins | 仓库污染、脚本执行 |
二、各类中间件典型漏洞详解
(一)Web 服务器中间件:处理 HTTP 请求的核心组件
Web 服务器中间件直接面向互联网,漏洞利用门槛低、影响范围广,是最易被攻击的环节。
1. Apache HTTP Server
Apache 是全球使用最广泛的 Web 服务器,漏洞多集中于路径处理、协议解析及依赖组件。
漏洞名称 | 漏洞原理 | 危害程度 | 影响版本 | 检测与修复方案 |
路径穿越与命令执行(CVE-2021-41773/CVE-2021-42013) | 2.4.49 版本对路径规范化处理不完整,攻击者可通过../穿越目录;2.4.50 修复不彻底,可结合cgi-bin执行命令 | 高危 | 2.4.49、2.4.50 | 检测:发送GET /icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd HTTP/1.1请求; |
Log4j2 远程代码执行(CVE-2021-44228) | Apache Log4j2 组件存在 JNDI 注入漏洞,中间件若集成该组件(如 Apache Flink、Kafka),攻击者可通过日志输入触发 RCE | 严重 | Log4j2 2.0-beta9~2.14.1 | 检测:扫描日志中是否包含${jndi:}关键字; |
Apache Struts2 系列漏洞(如 CVE-2017-5638) | Struts2(Apache 基金会框架)的 OGNL 表达式解析漏洞,攻击者通过 HTTP 参数注入恶意 OGNL 代码执行命令 | 高危 | Struts2 2.3.5~2.3.31、2.5.0~2.5.10 | 检测:发送含%{#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,#res=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter(),#res.println("test"),#res.flush(),#res.close()}的请求; |
2. Nginx
Nginx 以高性能著称,漏洞多源于配置错误或文件名解析逻辑缺陷。
漏洞名称 | 漏洞原理 | 危害程度 | 影响版本 | 检测与修复方案 |
文件名逻辑漏洞(CVE-2013-4547) | Nginx 对文件名的 “空格” 和 “\0” 处理不当,攻击者可通过xxx.jpg%20%00.php将图片文件解析为 PHP 执行 | 中高危 | 0.8.41~1.4.3、1.5.0~1.5.7 | 检测:上传test.jpg%20%00.php并访问,查看是否执行 PHP 代码; |
反向代理路径穿越(配置漏洞) | 若 Nginx 配置为proxy_pass http://backend/$uri/,攻击者可通过../绕过代理规则访问后端敏感路径 | 高危 | 全版本(配置不当导致) | 检测:发送GET /../admin HTTP/1.1请求,查看是否访问到未授权页面; |
短链接跳转漏洞(CVE-2018-16843) | Nginx 的rewrite模块处理//时逻辑缺陷,攻击者可构造http://nginx-server//example.com跳转至任意域名,用于钓鱼 | 中危 | 1.15.0~1.15.5 | 检测:访问//example.com查看是否跳转; |
3. IIS(Internet Information Services)
IIS 是微软官方 Web 服务器,漏洞集中于旧版本(IIS 6.0)和配置缺陷。
漏洞名称 | 漏洞原理 | 危害程度 | 影响版本 | 检测与修复方案 |
IIS 6.0 解析漏洞(目录名 +.asp) | IIS 6.0 对目录名的解析逻辑错误:若目录名为xxx.asp,则该目录下所有文件均被解析为 ASP 脚本 | 高危 | IIS 6.0 | 检测:创建test.asp目录并上传test.txt,访问/test.asp/test.txt查看是否执行 ASP 代码; |
WebDAV 远程代码执行(CVE-2017-7269) | IIS 6.0 的 WebDAV 组件存在缓冲区溢出漏洞,攻击者通过PROPFIND请求发送超长字符串触发 RCE | 高危 | IIS 6.0 | 检测:使用 Metasploit 模块exploit/windows/iis/iis_webdav_scstoragepathfromurl; |
短文件名泄露(CVE-2010-2730) | IIS 7.0/7.5 对短文件名(8.3 格式)的处理缺陷,攻击者可通过~1枚举服务器文件(如test~1.txt) | 中危 | IIS 7.0、7.5 | 检测:发送OPTIONS /test~1* HTTP/1.1请求,查看响应状态码; |
(二)应用服务器中间件:部署 Java/.NET 应用的核心
应用服务器中间件负责解析动态脚本(如 JSP、ASP.NET),漏洞多为反序列化、后台部署或协议漏洞,危害极高。
1. Tomcat(Apache)
Tomcat 是最常用的 Java 应用服务器,漏洞集中于管理控制台和 AJP 协议。
漏洞名称 | 漏洞原理 | 危害程度 | 影响版本 | 检测与修复方案 |
AJP 协议漏洞(Ghostcat,CVE-2020-1938) | Tomcat 的 AJP 协议(默认 8009 端口)未验证请求属性,攻击者可通过构造请求读取任意 JSP 文件、执行恶意代码 | 高危 | 6.0.0~6.0.45、7.0.0~7.0.104、8.5.0~8.5.64、9.0.0~9.0.44 | 检测:使用工具ghostcat-exp读取WEB-INF/web.xml; |
后台 WAR 包部署漏洞(弱口令) | Tomcat 管理控制台(/manager/html)默认弱口令(admin/admin、tomcat/tomcat),攻击者登录后可部署恶意 WAR 包执行 RCE | 高危 | 全版本(默认配置) | 检测:尝试用默认口令登录/manager/html; |
PUT 方法任意文件上传(CVE-2017-12615) | Tomcat 配置允许PUT方法时,攻击者可通过PUT /test.jsp/ HTTP/1.1(末尾加/)绕过限制,上传 JSP 后门 | 高危 | 7.0.0~7.0.81 | 检测:发送PUT /test.jsp/ HTTP/1.1并写入 JSP 代码,访问该文件; |
2. WebLogic(Oracle)
WebLogic 是企业级 Java 应用服务器,漏洞数量多、利用成熟,是内网渗透的重点目标。
漏洞名称 | 漏洞原理 | 危害程度 | 影响版本 | 检测与修复方案 |
控制台未授权访问 + RCE(CVE-2020-14882) | WebLogic 控制台存在权限绕过,攻击者无需认证即可访问/console/css/%252e%252e/%252e%252e/console.portal,并通过 “部署应用” 功能上传恶意 WAR 包执行 RCE | 严重 | 10.3.6.0.0、12.1.3.0.0、12.2.1.3.0、12.2.1.4.0 | 检测:直接访问上述 URL,查看是否进入控制台; |
T3 协议反序列化(CVE-2019-2725) | WebLogic 的 T3 协议(默认 7001 端口)用于集群通信,攻击者可发送恶意反序列化 payload 触发 RCE | 高危 | 10.3.6.0.0、12.1.3.0.0、12.2.1.3.0 | 检测:使用工具ysoserial生成 T3 协议 payload 并发送; |
SSRF 文件读取(CVE-2014-4210) | WebLogic 的uuddiexplorer组件存在 SSRF 漏洞,攻击者可通过uddiexplorer/SearchPublicRegistries.jsp的operator参数访问内网地址、读取文件 | 中高危 | 10.0.2.0、10.3.6.0 | 检测:构造operator=http://127.0.0.1:7001查看是否返回内网页面; |
3. JBoss(Red Hat)
JBoss 是开源 Java 应用服务器,默认配置安全性极低,易被未授权访问。
漏洞名称 | 漏洞原理 | 危害程度 | 影响版本 | 检测与修复方案 |
控制台未授权访问(默认无密码) | JBoss 管理控制台(/jmx-console、/web-console)默认无需认证,攻击者可直接操作 MBean(如部署应用) | 高危 | 4.x、5.x、6.x | 检测:直接访问/jmx-console,查看是否进入管理界面; |
JMXInvokerServlet 反序列化(CVE-2017-12149) | JBoss 的/invoker/JMXInvokerServlet组件未限制反序列化,攻击者发送恶意 payload 触发 RCE | 高危 | 5.x、6.x | 检测:使用ysoserial生成JBossMQInvoker payload 并发送; |
WAR 包部署漏洞(未授权) | 攻击者通过/jmx-console/HtmlAdaptor调用jboss.web.deployment的deploy方法,上传恶意 WAR 包执行 RCE | 高危 | 4.x、5.x、6.x | 检测:调用 MBean 方法尝试部署 WAR 包; |
(三)消息队列中间件:实现跨服务通信的组件
消息队列中间件用于异步通信,漏洞多为未授权访问和文件上传,可导致消息泄露或服务器被控。
1. ActiveMQ(Apache)
ActiveMQ 是开源消息队列,默认无认证,漏洞利用路径清晰。
漏洞名称 | 漏洞原理 | 危害程度 | 影响版本 | 检测与修复方案 |
管理界面未授权访问 | ActiveMQ 管理界面(默认 8161 端口)默认无认证,攻击者可查看队列、发送 / 接收消息,甚至上传文件 | 高危 | 5.0.0~5.18.0(默认配置) | 检测:访问http://ip:8161/admin,查看是否无需登录进入; |
文件上传 RCE(CVE-2016-3088) | ActiveMQ 的fileserver组件允许上传文件,攻击者可上传恶意 JSP 文件(需结合路径穿越),访问后执行 RCE | 高危 | 5.0.0~5.13.2 | 检测:通过/fileserver上传test.jsp,并通过../路径访问; |
路径穿越(CVE-2023-46604) | ActiveMQ 的api接口对路径处理不当,攻击者可通过../读取任意文件(如/conf/jetty-realm.properties) | 中高危 | 5.0.0~5.17.6 | 检测:发送GET /api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/../conf/jetty-realm.properties HTTP/1.1; |
2. Redis
Redis 是高性能缓存中间件,未授权访问是其最核心漏洞,可直接导致服务器被控。
漏洞名称 | 漏洞原理 | 危害程度 | 影响版本 | 检测与修复方案 |
未授权访问 + 数据操控 | Redis 默认无密码、绑定0.0.0.0,攻击者可通过redis-cli连接,执行get/set操作泄露或篡改数据 | 高危 | 全版本(默认配置) | 检测:执行redis-cli -h ip ping,若返回PONG则未授权; |
主从复制 RCE(CVE-2022-0543) | 攻击者搭建恶意 Redis 主服务器,诱使目标 Redis(从服务器)主动同步,加载恶意exp.so模块执行命令 | 严重 | 2.8.0~6.2.6(未授权或弱口令) | 检测:尝试发送SLAVEOF 恶意IP 6379命令; |
持久化文件泄露 | Redis 的 RDB/AOF 持久化文件包含敏感数据(如缓存的用户密码),攻击者可通过CONFIG GET dir/CONFIG GET dbfilename找到文件路径,再通过其他漏洞读取 | 中危 | 全版本 | 检测:执行CONFIG GET dir查看持久化目录; |
(四)数据库中间件:实现数据库分库分表、读写分离的组件
数据库中间件作为应用与数据库的 “桥梁”,漏洞多为弱口令和SQL 注入,可导致数据库权限泄露。
1. MyCat
MyCat 是开源 MySQL 中间件,常用于分库分表,默认配置存在弱口令。
漏洞名称 | 漏洞原理 | 危害程度 | 影响版本 | 检测与修复方案 |
管理界面弱口令 | MyCat 管理界面(默认 9066 端口)默认账号admin/123456,攻击者登录后可执行show @@datasource查看数据库账号密码 | 高危 | 全版本(默认配置) | 检测:使用mysql -h ip -P 9066 -u admin -p123456登录; |
SQL 注入(配置不当) | 若 MyCat 未开启 SQL 拦截(sqlInterceptor),攻击者可通过应用传入的参数注入 SQL 语句,直接操作后端数据库 | 高危 | 全版本(配置缺陷) | 检测:构造id=1' or '1'='1等注入语句; |
2. Sharding-JDBC
Sharding-JDBC 是轻量级数据库中间件,漏洞多源于依赖组件和配置错误。
漏洞名称 | 漏洞原理 | 危害程度 | 影响版本 | 检测与修复方案 |
Log4j2 依赖漏洞(CVE-2021-44228) | Sharding-JDBC 默认集成 Log4j2,若使用受影响版本,攻击者可通过日志输入触发 RCE | 严重 | 4.0.0~4.1.1(集成 Log4j2 2.0~2.14.1) | 检测:检查pom.xml中 Log4j2 版本; |
读写分离配置错误导致数据不一致 | 若 Sharding-JDBC 配置loadBalanceAlgorithmType=ROUND_ROBIN但未正确区分主从库,可能导致写操作发送到从库,引发数据不一致 | 低危(业务风险) | 全版本(配置缺陷) | 检测:执行INSERT语句后查看从库是否有数据; |
三、中间件漏洞共性防御策略
中间件漏洞的核心诱因是 “配置不安全” 和 “版本不更新”,需从基础加固、监控审计、应急响应三方面构建防御体系:
1. 基础配置加固(核心)
禁用默认配置:
删除默认账号(如 Tomcat 的tomcat用户、MyCat 的admin默认密码);
关闭不必要的服务 / 端口(如 Tomcat 的 AJP 端口、WebLogic 的 T3 端口、Redis 的 6379 端口暴露公网);
禁止危险功能(如 IIS 的 WebDAV、JBoss 的jmx-console、Redis 的SLAVEOF)。
权限最小化:
中间件运行使用低权限用户(如 Tomcat 用tomcat用户而非root,Redis 用redis用户);
限制文件权限(中间件目录只读,持久化文件仅所有者可读写);
数据库账号仅授予 “增删改查” 必要权限,避免root权限。
2. 版本与组件更新
及时关注厂商漏洞公告(Apache、Oracle、Red Hat 官网),优先修复 “严重”“高危” 漏洞;
定期更新中间件至最新安全版本(如 Tomcat 9.0.80+、WebLogic 12.2.1.4.0+);
扫描并更新依赖组件(如 Log4j2、Commons Collections),避免 “依赖链漏洞”。
3. 安全监控与审计
日志审计:开启中间件详细日志(如 Apache 的access.log、WebLogic 的server.log),定期检查异常请求(如${jndi:}、../、反序列化 payload);
入侵检测:部署 IDS/IPS 或 WAF,拦截已知攻击(如 Log4j2 攻击、Redis 未授权访问、SQL 注入);
定期扫描:使用漏洞扫描工具(Nessus、AWVS、绿盟远程安全评估系统),每季度至少一次全面扫描。
4. 应急响应
发现漏洞后立即隔离受影响服务器(如关闭公网端口、断开内网连接);
应用临时补丁(如禁用危险端口、删除漏洞组件),再逐步升级至安全版本;
排查是否存在数据泄露或恶意代码(如检查服务器是否有后门、挖矿程序),必要时恢复备份。