JSP中的原始碼泄漏問題_漏洞研究

來源:互聯網
上載者:User
摘要:在JSP技術得到廣泛應用的同時,由於原始碼泄漏而引起的JSP安全性也受到了廣泛的關注。本文分析了幾種造成原始碼泄漏的因素,並針對每種因素提出了各自的解決方案。 
關鍵詞:JSP  原始碼 泄漏  
引言 
JSP程式設計語言自從推出之日起,由於它的快速、平台無關、可擴充、物件導向等特性得到了越來越廣泛的應用,越來越多的廠家開發出了各種各樣的支援平台如IBM 公司的WebSphere、BEA公司的WebLogic等等,也有越來越多的網站開始將自己的平台架構在JSP 環境中。 
   但是隨之而來的就是一系列的安全問題,如原始碼暴露漏洞、遠程任意命令執行漏洞等等,一些用JSP做的網站,由於存在各種各樣的漏洞,可以被駭客輕鬆的下載程式的原始碼,對網站的安全構成威脅。 
造成JSP原始碼暴露的原因 
伺服器漏洞是安全問題的起源,駭客對網站的攻擊也大多是從尋找對方的漏洞開始的。所以只有瞭解自身的漏洞,網站管理員才能採取相應的對策,阻止外來的攻擊。 
雖然JSP也是一種web程式設計語言,但是它和其它的web程式設計語言如PHP、ASP的工作機制是不一樣的。 
首次調用JSP檔案其實是執行一個編譯為Servlet的過程。試圖下載JSP原始碼的人(比如駭客)往往利用JSP的各種漏洞,讓JSP檔案在編譯前被瀏覽器當作一個文本或其它檔案發送給用戶端,或在JSP裝載的時候不去執行編譯好的Servlet而直接讀JSP的內容並發送給用戶端,從而讓原始碼一覽無餘。 
JSP原始碼泄漏的幾種類型 
原始碼暴露類別主要指的是程式原始碼會以明文的方式返回給訪問者. 
  我們知道不管是JSP還是ASP、PHP等動態程式都是在伺服器端執行的,執行後只會返回給訪問者標準的html 等代碼。這是理論上的東西,實際運行起來由於伺服器內部機制的問題就有可能引起原始碼暴露的漏洞,簡單的例子是只要在程式檔案名稱後加幾個簡單的字元就可能獲得程式碼,如常見微軟ASP 的global.asa+.htr、XXXX.asp%81等等漏洞。 
3.1 添加特殊尾碼引起JSP原始碼暴露 
  在JSP中也存在著和asp這些漏洞類似的問題,如IBM Websphere Application Server 3.0.21、BEA Systems Weblogic 4.5.1、Tomcat3.1等JSP檔案尾碼大寫漏洞;JSP 檔案後加特殊字元如Resin1.2的%82、../漏洞;ServletExec的%2E、+漏洞、%2E、+、%2B、\ 、%5C、%20、%00 等。 
  駭客如果利用該漏洞,將導致泄露指定的JSP檔案的原始碼。例一:使用下面的任意一個URL請求將輸出指定的JSP檔案的原始碼: 
1)http://target/directory/jsp/file.jsp.  
  2)http://target/directory/jsp/file.jsp%2E 
  3)http://target/directory/jsp/file.jsp+  
  4)http://target/directory/jsp/file.jsp%2B 
  5)http://target/directory/jsp/file.jsp\  
  6)http://target/directory/jsp/file.jsp%5C 
  7)http://target/directory/jsp/file.jsp%20  
  8)http://target/directory/jsp/file.jsp%00  
等等。 
  例二,在Tomcat3.1下,在瀏覽器中本來可以正常解釋執行的是http://localhost:8080/inde.jsp,但是如果將inde.jsp改為inde.JSP或者inde.Jsp等等試試看,你會發現瀏覽器會提示你下載這個檔案,下載後原始碼可以看個一乾二淨。 
  原因是JSP是大小寫敏感的,Tomcat只會將小寫JSP尾碼的檔案當作是正常的JSP檔案來執行,如果大寫了就會引起Tomcat將inde.JSP當作是一個可以下載的檔案讓客戶下載。老版本的WebLogic、WebShpere等都存在這個問題,現在這些公司或者發布了新版本或者發布了補丁解決了這問題。 
3.1.1 解決辦法 
解決這種由於添加尾碼引起的原始碼泄漏有兩種方法,一種方法是在伺服器軟體的網站上下載補丁;另外一種方法是在伺服器設定中添加一些映射如.JSP 、.Jsp、.jsp%2E等,將他們映射到一個自己寫的servlet,這個Servlet的唯一功能就是將請求導向一個自訂的類似404 not found的出錯頁面,不同的伺服器設定的地方也不同。 
如果沒有使用任何靜態頁面或映像,可以配置一個預設的 servlet,並將"/"映射到這個預設的 servlet。這樣當收到一個未映射到某個 servlet 的 URL 時,這個預設的servlet 就會被調用。在這種情況下,預設的 servlet 可以僅僅返回"未找到檔案"。如果使用了靜態頁面或映像,仍然可以作這樣的配置,但是需要讓這個預設的servlet 處理對合法的靜態頁面和映像的請求。 
  另一種可能就是將*.jsp+、*.jsp.和*.jsp\等映射到一個 servlet,而該servlet只是返回"未找到檔案"。對於*.jsp%00和*.jsp%20這樣的情況,映射應以未經編碼的形式輸入。例如,對於*.jsp%20的映射應輸入"*.jsp "。注意%20被轉換成一個空白字元。 
3.2  插入特殊字元串引起JSP原始碼暴露 
插入特殊字元串引起的漏洞有很多,例如BEA  WebLogic Enterprise 5.1中,檔案路徑開頭為 "/file/" 的漏洞、IBM WebSphere 3.0.2中"/servlet/file/"檔案開頭漏洞等等。 
  如果在IBM WebSphere 3.0.2中的一個請求檔案的 URL 為"login.jsp":http://site.running.websphere/login.jsp,那麼,使用者在訪問http://site.running.websphere/servlet/file/login.jsp  時將看到這個檔案的原始碼。  
   原因是由於IBM WebSphere 3.0.2是調用不同的 servlets 對不同的頁面進行處理,如果一個請求的檔案是未進行註冊管理的,WebSphere 會使用一個預設的 servlet 調用。如果檔案路徑以"/servlet/file/"作開頭這個預設的 servlet 會被調用這個請求的檔案會未被分析或編譯就顯示出來。 
3.2.1  解決方案 
在伺服器軟體的網站下載最新的補丁。 
3. 3  路徑許可權引起的檔案JSP原始碼暴露 
這種漏洞在正常的JSP漏洞中沒有反映出來,但是我們知道,大部分的JSP應用程式在目前的目錄下都會有一個WEB-INF目錄,這個目錄通常存放的是JavaBeans編譯後的class 檔案,如果不給這個目錄設定正常的許可權,所有的class就會曝光。 
  也許有人認為class是經過編譯的,就算被下載也沒有什麼關係,但是現在class 反編譯為java代碼的軟體也很多,採用反編譯軟體對下載的class檔案反編譯後,和原始的java檔案幾乎一模一樣,連變數名都沒有變,還可以正常使用。 
  更大的安全問題是,有的軟體開發人員把資料庫的使用者名稱密碼都寫在了java代碼中,現在一反編譯誰都能看到資料庫的重要訊息。通過資料庫的遠端連線功能,可以輕鬆的進入到資料庫中,所有資訊將全部被別人掌握。 
3.3.1 解決方案 
有一個方法可以有效地解決由於路徑許可權引起的代碼泄漏問題,就是將ASP程式單獨放置一個目錄,設定該目錄上的使用者權限只能執行不能讀取。在JSP環境下同樣可以通過設定伺服器的環境來解決這個問題:將一些比較重要的目錄如WEB-INF、classes等設定上訪問的許可權,不允許讀而取只允許執行。以Apache 下解決為例,可以在httpd.conf檔案中添加一目錄WEB-INF並設定Deny from all等屬性。 
  另一種解決方案就是在每個重要目錄下添加一個預設起始頁面如index.htm等,這樣讀取目錄就會返回給訪問者這個檔案而不是其它了。 
相比較而言,建議採用第一種方法。 
  更為重要的是密碼的儲存問題,在ASP 開發中,可以將密碼檔案儲存在系統目錄如WINNT 下,然後用一個com來讀取這個檔案,這樣就算看到了ASP原始碼也不知道資料庫資訊了。在JSP中我們也可以寫一個property檔案,放置在WINNT系統目錄下,然後用Bean來讀取資料庫資訊,這樣通過原始碼知道了資料庫資訊存在WINNT中的.property檔案裡面,但也很難訪問它,這樣就算原始碼被人知道起碼資料庫是安全的。 
3. 4  檔案不存在引起的絕對路徑暴露問題 
這個問題現在已經出現了很多,因為微軟IIS 中也有比較多的類似問題,如微軟IIS5.0中的*.idc暴露絕對路徑漏洞。同樣的這些問題現在出現在JSP環境中,這個漏洞暴露了web程式的絕對硬碟地址,和其他漏洞結合就具有比較大的危害了。 
  例如:在特定的伺服器軟體下,訪問一個不存在的JSP檔案如 <http://localhost:8080/fdasfas.jsp>,就會返回java.servlet.ServletEception: java.io.FileNotFoundEception: c:\web\app\fadssad.jsp (???????????)這樣的錯誤,這樣就可以知道你網站在c:\web\app目錄下,也許一般人不太在意,但是對於一個駭客來說足夠了。 
  原因是由於負責JSP 執行的相關Servlet中處理異常的時候沒有過濾掉這種情況。 
3.4.1  解決方案 
對於因為檔案不存在引起的絕對路徑暴露問題,有兩種解決方案。一種方法是下載最新的補丁。另一種方法是找到伺服器軟體的JSP 執行映射Servlet檔案(當然是class 尾碼的),將它用軟體反編譯,在反編譯後的原始碼中找到處理Eception的方法,然後將方法中的處理部分全部注釋掉,並將請求導向到一個自訂的出錯頁面中,這樣問題就解決了。 
結束語 
通過上面內容我們可以看出,JSP還是存在著很多安全上的問題的,客觀的說,伺服器軟體的開發商在自我裝載中不可能將系統中的所有BUG找出來,即使發布了軟體後,被發現的漏洞也只會是其中的很小一部分,將來還會不斷的有新的安全問題出現,所以我們必須時刻提高警惕,並注意自己網站的安全。 


參考文獻 
Bergsten 著,《JSP設計》,中國電力出版社 
http://www.99net.net 
http://www.mhdn.net 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.