作者:
shine
·
2013/05/24 18:14
0x00 相關背景介紹
通常一些web應用我們會使用多個web伺服器搭配使用,解決其中的一個web伺服器的效能缺陷以及做均衡負載的優點和完成一些分層結構的安全策略等!
例如:Nginx+ Tomcat的分層結構(在下文中,我們也使用此例說明相關問題)
Nginx是一個高效能的 HTTP 和 反向代理 伺服器 。
通常,我們是透過它來解決一些靜態資源(如:圖片、js及css等型別檔案)訪問處理。
Nginx詳細介紹:http://baike.baidu.com/view/926025.htm
Tomcat伺服器是一個免費的開放原始碼的j2ee Web 應用伺服器。
其中,它有一個比較明顯的效能缺陷,那就是在處理靜態資源特別是圖片型別的檔案特別吃力。從而能與Nginx(Ningx在處理靜態資源方面效能特別優秀) 成為好基友!
Tomcat詳細介紹:http://baike.baidu.com/view/10166.htm
0x01 成因
但正是由於這種處理方式或分層架構設計,如果對靜態資源的目錄或檔案的對映配置不當,可能會引發一些的安全問題(特別是在j2ee應用中表現更為嚴重)!
例如:Tomcat的WEB-INF目錄,每個j2ee的web應用部署檔案預設包含這個目錄。
WEB-INF介紹:http://baike.baidu.com/view/1745468.htm
通常情況我們是無法透過Tomcat去訪問它的,Tomcat的安全規範略中,它是一個受保護的目錄。
為什麼受保護了?我們來看看,它裡面有什麼:
classes目錄(包含該應用核心的java類編譯後的class檔案及部分配置檔案)
lib目錄(所用框架、外掛或元件的架包)
web.xml(重要的配置檔案,它是開啟攻擊的一把鑰匙,後面會講到它)
以及其他自定義目錄之檔案
所以,它是j2ee應用一個非常重要的目錄!
如果Nginx在對映靜態檔案時,把WEB-INF目錄對映進去,而又沒有做Nginx的相關安全配置(或Nginx自身一些缺陷影響)。從而導致透過Nginx訪問到Tomcat的WEB-INF目錄(請注意這裡,是透過Nginx,而不是Tomcat訪問到的,因為上面已經說到,Tomcat是禁止訪問這個目錄的。)。
造成這一情況的一般原因:是由於Nginx訪問(這裡可以說是均衡負載訪問配置問題)配置不當造成的。通常,我們只會讓Nginx把這些訪問字尾的URL交給Tomcat,而這些字尾與j2ee及開發框架(或自定義框架)有關,如下:
.jsp
.do
.action
.....等(或自定義字尾)
而其他大部分字尾型別的訪問URL直接交給了Nginx處理的(包括:WEB-INF目錄中一些比較重要的.xml和.class型別等,所以這裡,如果你對映了整個根目錄,還是可以透過Nginx的一些字尾訪問配置,做些安全策略處理的!)
簡單缺陷配置的兩例,如圖:
或
訪問效果,如圖:
0x02 攻擊方式及危害
這種情況相信大家早已碰到過,但可能沒有深入去關注過它,而且該問題還比較普遍存在一些大型站點應用中。由於j2ee應用一些自身特點,導致發生此情況時,它很容易受到攻擊,如:
web.xml配置檔案,它是j2ee配置部署應用的起點配置檔案,如果能夠先訪問到它,我們可以再結合j2ee的xml路徑配置特點,如圖:
根據web.xml配置檔案路徑或通常開發時常用框架命名習慣,找到其他配置檔案或類檔案路徑。
反編譯類後,再根據關聯類檔案路徑,找到其他類檔案。
如此下來,我們就可以獲得整個應用幾乎的所有核心程式碼及應用架構的相關資訊等。
然後,我們再根據j2ee應用分層結構的流程或路線,很容易查詢到應用中的一些邏輯、sql注射、XSS等相關漏洞,如圖(圖可能畫得有點問題,但主要是說明問題):
而這個問題簡單描述是:一個規範的私處如何在另一個規範中得到有效保護?所以這裡並不是只有j2ee才會有此等危害,而是j2ee一些自身特點在此場景中的危害表現更為突出或明顯!
0x03 實際案例
1、查詢其他相關安全問題,輕鬆滲透:
去哪兒任意檔案讀取(基本可重構該系統原工程)
WooYun: 去哪兒任意檔案讀取(基本可重構該系統原工程)
j2ee分層架構安全(註冊烏雲1週年慶祝集錦) -- 點我吧
WooYun: j2ee分層架構安全(註冊烏雲1週年慶祝集錦) -- 點我吧
2、遍歷一些大型站點的應用架構:
百度某應用beidou(北斗)架構遍歷!
WooYun: 百度某應用beidou(北斗)架構遍歷! (" WooYun: 百度某應用beidou(北斗)架構遍歷! ")
這裡,還有其他情況也可能造成這一類似的安全問題,但同樣可以根據上面的思路去很容易攻擊它:
1、開啟了目錄瀏覽,如: WooYun: 樂視網眾多web容器配置失誤,導致核心應用架構及敏感資訊暴露
2、 外層web容器的一些解析漏洞,在此處可利用,如:http://sebug.net/vuldb/ssvid-60439
0x04 修復方案
最好不要對映非靜態檔案目錄或敏感目錄。
或透過Nginx配置禁止訪問一些敏感目錄,如:j2ee應用的WEB-INF目錄
location ~ ^/WEB-INF/* { deny all; }
或者至少禁止Nginx接收訪問一些j2ee常用字尾檔案的URL以減少危害,如:
.xml
.class
等檔案型別
注意一些外層web伺服器的相關配置!
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!