通常一些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
但正是由于這種處理方式或分層架構設計,如果對靜態資源的目錄或文件的映射配置不當,可能會引發一些的安全問題(特別是在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的一些后綴訪問配置,做些安全策略處理的!)
簡單缺陷配置的兩例,如圖:
或
訪問效果,如圖:
?
這種情況相信大家早已碰到過,但可能沒有深入去關注過它,而且該問題還比較普遍存在一些大型站點應用中。由于j2ee應用一些自身特點,導致發生此情況時,它很容易受到攻擊,如:
web.xml配置文件,它是j2ee配置部署應用的起點配置文件,如果能夠先訪問到它,我們可以再結合j2ee的xml路徑配置特點,如圖:
根據web.xml配置文件路徑或通常開發時常用框架命名習慣,找到其他配置文件或類文件路徑。
反編譯類后,再根據關聯類文件路徑,找到其他類文件。
如此下來,我們就可以獲得整個應用幾乎的所有核心代碼及應用架構的相關信息等。
然后,我們再根據j2ee應用分層結構的流程或路線,很容易查找到應用中的一些邏輯、sql注射、XSS等相關漏洞,如圖(圖可能畫得有點問題,但主要是說明問題):
而這個問題簡單描述是:一個規范的私處如何在另一個規范中得到有效保護?所以這里并不是只有j2ee才會有此等危害,而是j2ee一些自身特點在此場景中的危害表現更為突出或明顯!
去哪兒任意文件讀取(基本可重構該系統原工程)
WooYun: 去哪兒任意文件讀取(基本可重構該系統原工程)
j2ee分層架構安全(注冊烏云1周年慶祝集錦) -- 點我吧
WooYun: j2ee分層架構安全(注冊烏云1周年慶祝集錦) -- 點我吧
百度某應用beidou(北斗)架構遍歷!
WooYun: 百度某應用beidou(北斗)架構遍歷! (" WooYun: 百度某應用beidou(北斗)架構遍歷! ")
這里,還有其他情況也可能造成這一類似的安全問題,但同樣可以根據上面的思路去很容易攻擊它:
1、開啟了目錄瀏覽,如: WooYun: 樂視網眾多web容器配置失誤,導致核心應用架構及敏感信息暴露
2、?外層web容器的一些解析漏洞,在此處可利用,如:http://sebug.net/vuldb/ssvid-60439
最好不要映射非靜態文件目錄或敏感目錄。
或通過Nginx配置禁止訪問一些敏感目錄,如:j2ee應用的WEB-INF目錄
location ~ ^/WEB-INF/* { deny all; }
或者至少禁止Nginx接收訪問一些j2ee常用后綴文件的URL以減少危害,如:
.xml
.class
等文件類型
注意一些外層web服務器的相關配置!?