直播中
描述:
BEA WebLogic 暴露源代碼漏洞
詳細(xì):
受影響版本
所有系統(tǒng)上的
BEA WebLogic Enterprise 5.1.x
BEA WebLogic Server and Express 5.1.x
BEA WebLogic Server and Express 4.5.x
BEA WebLogic Server and Express 4.0.x
BEA WebLogic Server and Express 3.1.8
這個(gè)漏洞使攻擊者能讀取 Web 目錄下所有文件的源代碼。
WebLogic 依賴(lài)四個(gè)主要 Java Servlets to 服務(wù)不同類(lèi)型的文件。這些 servlets 是:
FileServlet - for 簡(jiǎn)單 HTML 頁(yè)面
SSIServlet - for Server Side Includes 頁(yè)面
PageCompileServlet - for JHTML 頁(yè)面
JSPServlet - for Java Server 頁(yè)面
看著weblogic.properties 文件, 這兒是各個(gè) servlets 的注冊(cè)值 :
weblogic.httpd.register.file=weblogic.servlet.FileServlet
weblogic.httpd.register.*.shtml=weblogic.servlet.ServerSideIncludeServlet
weblogic.httpd.register.*.jhtml=weblogic.servlet.jhtmlc.PageCompileServlet
weblogic.httpd.register.*.jsp=weblogic.servlet.JSPServlet
更多的 weblogic.properties 文件, 如果一個(gè)請(qǐng)求文件是沒(méi)有注冊(cè)管理的,那么就會(huì)調(diào)用一個(gè)默認(rèn)的 servlet 。以下是展示默認(rèn)的 servlet 是如何注冊(cè)的。
# Default servlet registration
# ------------------------------------------------
# Virtual name of the default servlet if no matching servlet
# is found weblogic.httpd.defaultServlet=file
因此如果 URL 中的文件路徑開(kāi)頭為 "/file/" , 將會(huì)引致 WebLogic 調(diào)用默認(rèn)的 servlet, 那將會(huì)使網(wǎng)頁(yè)未加分析和編譯而直接顯示。
論證:
只要在想看的文件原來(lái)的 URL 路徑之前加入 "/file/" 就會(huì)讓文件未經(jīng)分析和編譯,直接暴露源代碼。如:
http://site.running.weblogic/login.jsp
那么只要訪(fǎng)問(wèn)
http://site.running.weblogic/file/login.jsp
就會(huì)在 WEB 瀏覽器里看到文件的內(nèi)容。
以下是使用方法:
1. 通過(guò)強(qiáng)制使用 SSIServlet 查看未分析的頁(yè)面 :
----------------------------------------------------------
服務(wù)器站點(diǎn)通過(guò) WebLogic 中的 SSIServlet 處理頁(yè)面,它在 weblogic.properties 文件中注冊(cè)以下信息:
weblogic.httpd.register.*.shtml=
weblogic.servlet.ServerSideIncludeServlet
通過(guò) URL 使用 SSIServlet 自動(dòng)處理通配符 (*) 。因此 如果文件路徑開(kāi)頭為 /*.shtml/,將強(qiáng)制文件由 SSIServlet 處理。如果使用其它文件類(lèi)型如 .jsp 和 .jhtml, 就能查看未分析的 jsp 和 jhtml 代碼。舉例:
http://www.xxx.com/*.shtml/login.jsp
2. 通過(guò)強(qiáng)制使用 FileServlet 查看未分析的頁(yè)面 :
-----------------------------------------------------------
WebLogic 使用 FileServlet 配置 ConsoleHelp servlet ,在 weblogic.properties 文件的以下內(nèi)容可得知:
# For Console help. Do not modify.
weblogic.httpd.register.ConsoleHelp=
weblogic.servlet.FileServlet
weblogic.httpd.initArgs.ConsoleHelp=\
defaultFilename=/weblogic/admin/help/NoContent.html
weblogic.allow.execute.weblogic.servlet.ConsoleHelp=everyone
因此如果文件路徑以 /ConsoleHelp/ 開(kāi)頭將導(dǎo)致 WebLogic 使用 FileServlet,使未分析或編譯的文件作頁(yè)面顯示出來(lái),舉例:
http://www.xxx.com/ConsoleHelp/login.jsp
解決方案:
不要使用示例中的設(shè)置方法設(shè)置 FileServlet 。這可能會(huì)讓你的 JSP/JHTML 文件的源代碼暴露出來(lái)。請(qǐng)查看在線(xiàn)文檔:
http://www.weblogic.com/docs51/admindocs/http.html#file
示例的 registrations 如下:
weblogic.httpd.register.file=weblogic.servlet.FileServlet
weblogic.httpd.initArgs.file=defaultFilename=index.html
weblogic.httpd.defaultServlet=file
有兩種方法可以避免這個(gè)問(wèn)題:
* 注冊(cè)那些文件 servlet 使用隨機(jī)用戶(hù)名,加大猜測(cè)難度。例如使用象這樣注冊(cè)文件 servlet 為 12foo34:
weblogic.httpd.register.12foo34=weblogic.servlet.FileServlet
weblogic.httpd.initArgs.12foo34=defaultFilename=index.html
weblogic.httpd.defaultServlet=12foo34
* 注冊(cè)文件 servlet 使用 wild cards 聲明你將使用所有這些文件擴(kuò)展名作服務(wù)。舉例注冊(cè)文件 servlet 為 .html 文件服務(wù):
weblogic.httpd.register.*.html=weblogic.servlet.FileServlet
weblogic.httpd.initArgs.*.html=defaultFilename=index.html
weblogic.httpd.defaultServlet=*.html
使用上面的方法重復(fù)加入以下類(lèi)型的文件 *.gif, *.jpg, *.pdf, *.txt, etc.
注意:這些信息是備有證明在 BEA WebLogic Server and Express 說(shuō)明檔的:
http://www.weblogic.com/docs51/admindocs/lockdown.html
另:請(qǐng)留意新版本并升級(jí)吧。