JSP漏洞大觀
來源:互聯網
上載者:User
js 一、源代碼暴露類
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、+漏洞等等。
例子:舉個老一點的JSP大寫例子,Tomcat3.1下在瀏覽器中本來是http://localhost:8080/inde.jsp,可以正常解釋執行,但是如果將 inde.jsp改爲inde.JSP或者inde.Jsp等等試試看,你會發現瀏覽器會提示你下載這個檔案,下載後源代碼可以看個一乾二淨。
原因:jsp是大小寫敏感的,Tomcat只會將小寫的jsp尾碼的檔案當作是正常的jsp檔案來執行,如果大寫了就會引起Tomcat將 index.JSP當作是一個可以下載的檔案讓客戶下載。老版本的WebLogic、WebShpere等都存在這個問題,現在這些公司或者發佈了新版本或者發佈了補丁解決了這問題。
解決辦法:一是在伺服器軟體的網站上下載補丁;因爲作者以前用過asp 一段時間,接觸了很多IIS的漏洞,它的有效解決方法是去掉不必要的映射如htr、htx等,在jsp 中我們同樣可以參考IIS的解決方法,不同的是不是去掉而是添加映射,方法爲在伺服器設置中添加一些映射如.JSP 、.Jsp、.jsp%2E等,將他們映射到一個自己寫的servlet,這個Servlet的唯一功能就是將請求導向一個自定義的類似404 not found的出錯頁面,不同的伺服器設置的地方也不同,請參考相應的文檔。第二種解決方法可以在沒有補丁的時候採用。
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.路徑許可權引起的檔案jsp源代碼暴露
我們知道,大部分的jsp應用程式在當前目錄下都會有一個WEB-INF目錄,這個目錄通常存放的是JavaBeans編譯後的class 檔案,如果不給這個目錄設置正常的許可權,所有的class就會曝光。
例子:如果採用的是Apache1.3.12加上第三方jsp軟體形式的WEB伺服器,因爲Apache1.3.12默認的設置是可以讀取目錄的,如果程式在http://site.running.websphere/login.jsp,只要修改一下http: //site.running.websphere/WEB-INF/所有這個目錄下以及這個目錄下的子目錄中的class檔案可以看個一乾二淨的,還可以下載到本機上。
也許有人會說class是經過編譯的,就算被人下載也沒有什麽關係,但是現在class 反編譯爲Java代碼的軟體也很多,有人曾經採用JAD軟體對下載的class檔案反編譯了一下,居然和原始的Java檔案幾乎一模一樣,變數名都沒有變,更驚奇的是還可以重新編譯爲class檔案正常使用。
安全問題更大的就是,網頁製作者開始把資料庫的用戶名密碼都寫在了Java代碼中,現在一反編譯誰都能看到資料庫的重要資訊。通過資料庫的遠端連接功能,可以輕鬆的進入到你的資料庫中,所有資訊全部在他手中。附帶說一句,如果用戶能獲得 SQL Server的用戶名口令,進入資料庫中可以執行任意的dos命令如查看c:\檔案、建立和刪除目錄等,那樣整個Windows系統都不安全了。
解決方法:IIS以前一個有效地解決asp漏洞的方法,就是將asp程式單獨放置一個目錄,目錄設置上用戶許可權只能執行不能讀取。在jsp環境下同樣可以通過設置伺服器的環境來解決這個問題,簡單的說,就是將一些比較重要的目錄如WEB-INF、classes等設置上訪問的許可權,不允許讀而取只允許執行。以apache 下解決爲例,可以在httpd.conf檔案中添加一目錄WEB-INF並設置Deny from all等屬性。
另一種比較笨的解決方法就是在每個重要目錄下添加一個默認起始頁面如index.htm等,這樣讀取目錄就會返回給訪問者這個檔案而不是其他了。建議採用的一種方法。
更爲重要的是密碼的儲存問題。在jsp中可以寫一個property檔案,放置在WINNT系統目錄下,然後用Bean來讀取資料庫資訊,這樣通過源代碼知道了資料庫資訊存在WINNT中的.property檔案?堶情A但也很難訪問它,這樣就算源代碼被人知道起碼資料庫是安全的。
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中處理異常的時候沒有過濾掉這種情況。
解決方法:一是下載最新的補丁;如果當時的web 伺服器軟體沒有這個補丁,可以找到伺服器軟體的jsp 執行映射Servlet檔案(當然是class 尾碼的),將它用JAD軟體反編譯,在反編譯後的源代碼中找到處理Exception的方法,然後將方法中的處理部分全部注釋掉,並將請求導向到一個自定義的出錯頁面中,這樣問題就解決了。
二、遠端程式執行類
這類漏洞的特點就是可以通過url 地址在瀏覽器中執行任意伺服器上的命令和程式,從而引起安全問題。如Allaire JRUN 2.3 遠端執行任意命令漏洞、iPlanet Web Server 4.x存在一個緩衝區溢出漏洞等等。
例子:Allaire 的 JRUN 伺服器 2.3上輸入下面的url位址http://jrun:8000/servlet/jsp/../../path/sample.txt,可以訪問到WEB目錄以外的檔案,如果是exe檔案,還有可能會引起執行。
原因:如果URL請求的目標檔案使用了字首"/servlet/",則JSP 解釋執行功能被啟動。這時在用戶請求的目標檔案路徑中使用"../",就有可能訪問到 WEB 伺服器上根目錄以外的檔案。目標主機上利用該漏洞請求用戶輸入産生的一個檔案,將嚴重威脅到目標主機系統的安全。
解決方法:安裝最新的補丁。
把這個老文章翻出來的原因,是據說Tomcat 5.0.19 Windows又出現大寫暴露源代碼的問題了,有興趣的朋友可是試看看,如果是真的,那tomcat那幫傢夥又在老地方摔了一交。