作者:Longofo@知道創宇404實驗室
時間:2019年10月16日
英文版本:http://www.bjnorthway.com/1068/
這個漏洞和之前@Matthias Kaiser提交的幾個XXE漏洞是類似的,而EJBTaglibDescriptor應該是漏掉的一個,可以參考之前幾個XXE的分析。我和@Badcode師傅反編譯了WebLogic所有的Jar包,根據之前幾個XXE漏洞的特征進行了搜索匹配到了這個EJBTaglibDescriptor類,這個類在反序列化時也會進行XML解析。
Oracle發布了10月份的補丁,詳情見鏈接(https://www.oracle.com/technetwork/security-advisory/cpuoct2019-5072832.html)
環境
- Windows 10
- WebLogic 10.3.6.0.190716(安裝了19年7月補丁)
- Jdk160_29(WebLogic 自帶的JDK)
漏洞分析
weblogic.jar!\weblogic\servlet\ejb2jsp\dd\EJBTaglibDescriptor.class這個類繼承自java\io\Externalizable

因此在序列化與反序列化時會自動調用子類重寫的writeExternal與readExternal
看下writeExternal的邏輯與readExternal的邏輯,

在readExternal中,使用ObjectIutput.readUTF讀取反序列化數據中的String數據,然后調用了load方法,

在load方法中,使用DocumentBuilder.parse解析了反序列化中傳遞的XML數據,因此這里是可能存在XXE漏洞的
在writeExternal中,調用了本身的toString方法,在其中又調用了自身的toXML方法


toXML的作用應該是將this.beans轉換為對應的xml數據。看起來要構造payload稍微有點麻煩,但是序列化操作是攻擊者可控制的,所以我們可以直接修改writeExternal的邏輯來生成惡意的序列化數據:

漏洞復現
-
重寫
EJBTaglibDescriptor中的writeExternal函數,生成payload
-
發送payload到服務器

在我們的HTTP服務器和FTP服務器接收到了my.dtd的請求與win.ini的數據

-
在打了7月份最新補丁的服務器上能看到報錯信息

本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1067/