作者: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

因此在序列化與反序列化時會自動調用子類重寫的writeExternalreadExternal

看下writeExternal的邏輯與readExternal的邏輯,

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

在load方法中,使用DocumentBuilder.parse解析了反序列化中傳遞的XML數據,因此這里是可能存在XXE漏洞的

writeExternal中,調用了本身的toString方法,在其中又調用了自身的toXML方法

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

漏洞復現

  1. 重寫 EJBTaglibDescriptor中的writeExternal函數,生成payload

  2. 發送payload到服務器

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

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


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