| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 309 人关注过本帖
标题:java文章精选
只看楼主 加入收藏
guoyncn
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-7-13
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
java文章精选
JSP漏洞大觀
一、源代碼暴露類

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: 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那幫傢夥又在老地方摔了一交。
作者Blog:http://blog.


eclipse的jdk问题
一般安装JDK的时候,会同时在系统目录下也安装一个JRE环境。开始我把安装在系统目录下的JRE环境卸载了,在环境变量中添加一个变量JAVA_HOME,并设定值为“F:/j2sdk”(JDK的安装目录),在Path变量中添加“%JAVA_HOME%/bin;”。
   启动eclipse,可以发现一切正常,点击菜单“窗口”->首选项->Java->已安装的JRE,可以发现存在一个名称为“j2sdk”的JRE。
 
   首先把 JDK的安装目录名“F:/j2sdk”改为“F:/noj2sdk”(随便一个文件名都可以,或者去掉Path变量中的“%JAVA_HOME%/bin;”),再启动eclipse,可以发现eclipse无法启动,并出现如下提示:
 

主要是说没有找到 Java 运行期环境(JRE)。
 
由于eclipse目录中没有jre目录,同时在Path变量中找不到正确的javaw执行路径。所以eclipse无法启动。
 
 
解决问题的3个方法:
 
   1.在Ms-Dos窗口中,切换到eclipse目录,执行 eclipse -vm F:/noj2sdk/bin/javaw,可以启动eclipse(eclipse -vm dir-location 参数可以用到指定其他的 JRE。)。
   2.复制 F:/noj2sdk目录下的 jre目录到eclipse目录中, 可以启动eclipse。
   3.把“F:/noj2sdk”目录名重新改为“F:/j2sdk”,可以启动eclipse。
   
   以上3个方法可以分别执行,如果同时执行,默认情况下,Eclipse 首先执行 -vm 参数;如果没有-vm参数,则查找 eclipse/jre 子目录;如果没有找到,Eclipse 将查找在系统中注册的 Java 运行期环境一般安装JDK的时候,会同时在系统目录下也安装一个JRE环境。开始我把安装在系统目录下的JRE环境卸载了,在环境变量中添加一个变量JAVA_HOME,并设定值为“F:/j2sdk”(JDK的安装目录),在Path变量中添加“%JAVA_HOME%/bin;”。
   启动eclipse,可以发现一切正常,点击菜单“窗口”->首选项->Java->已安装的JRE,可以发现存在一个名称为“j2sdk”的JRE。
 
   首先把 JDK的安装目录名“F:/j2sdk”改为“F:/noj2sdk”(随便一个文件名都可以,或者去掉Path变量中的“%JAVA_HOME%/bin;”),再启动eclipse,可以发现eclipse无法启动,并出现如下提示:
 


主要是说没有找到 Java 运行期环境(JRE)。
 
由于eclipse目录中没有jre目录,同时在Path变量中找不到正确的javaw执行路径。所以eclipse无法启动。
 
 
解决问题的3个方法:
 
   1.在Ms-Dos窗口中,切换到eclipse目录,执行 eclipse -vm F:/noj2sdk/bin/javaw,可以启动eclipse(eclipse -vm dir-location 参数可以用到指定其他的 JRE。)。
   2.复制 F:/noj2sdk目录下的 jre目录到eclipse目录中, 可以启动eclipse。
   3.把“F:/noj2sdk”目录名重新改为“F:/j2sdk”,可以启动eclipse。
   
   以上3个方法可以分别执行,如果同时执行,默认情况下,Eclipse 首先执行 -vm 参数;如果没有-vm参数,则查找 eclipse/jre 子目录;如果没有找到,Eclipse 将查找在系统中注册的 Java 运行期环境
搜索更多相关主题的帖子: java 文章 localhost 
2011-07-14 21:15
快速回复:java文章精选
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062392 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved