看我如何在Weblogic里撿一個XXE(CVE-2018-3246)
*本文作者:黑客小平哥,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。
前言
前幾天空間被CVE-2018-2894刷屏,大家也都在研究和復現這個漏洞,正好我們安全團隊也在玩這個漏洞,那大家就一起來玩咯。 本次的重點是復現,上傳webshell,環境是內部一個測試環境,當我使用其中一個上傳頁面的時候,腦子突然熱了一下,把文件後綴改成了.xml,結果就很6了。
地址如下:http://127.0.0.1:8338/ws_utc/begin.do。
分析
突然看到了什麼,報錯了,但是錯誤代碼里有個「Internal Exception: org.xml.sax.SAXParseException」,這裡竟然解析xml文件,這裡說明一下,雖然這裡是上傳webshell的地方,xml文件貌似沒什麼用,但是當漏洞任意文件上傳漏洞修復之後,這個xml文件是不會禁止的,這裡既然解析了xml文件,說明這xml文件屬於正常文件。
此處當然要傳個payload試下了讀下etc/passwd,發現還是報錯,無法讀取:
這就完了?當然不是,既然無法讀取回顯,那就換個payload反彈下shell試試:
設置本地監聽:
返回包發現執行了payload代碼,並且讀取到伺服器etc/passwd文件:
至此,該漏洞已經確定存在,並將及時報告給官方了,2018年10月16日,該漏洞已經在oracle發布。
漏洞簡要分析:
根據路徑,漏洞定位到ws-testpage-impl.jar文件里的「importWsTestConfig」方法:
代碼如下:
可以發現,此處使用的方法為「ImportTestCaseAction」,進去看下該方法:
代碼如下:
Unmarshaller介面是將XML數據轉化為Java對象,此處是Unmarshaller使用不當,造成XXE,值得注意的是,經過和同事的不懈嘗試,發現jdk8默認禁止外部DTD的,jdk6和jdk7是可以的,而weblogic默認的jdk是存在該問題的(詳細版本範圍有待進一步考證)。
Demo介紹:
此處jdk為1.8,無法實現XXE:
此處jdk為1.6,即可執行:
本次研究結束,歡迎大佬繼續研究並指正。
*本文作者:黑客小平哥,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。
※子彈簡訊跑太快,隱私泄露涉黃,誰之過
※看我如何發現雅虎郵箱APP的存儲型XSS漏洞
TAG:FreeBuf |