﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-生命源代码-文章分类-网络安全</title><link>http://www.cnitblog.com/Walter/category/7868.html</link><description>在自己设计的操作系统里，用自己发明的编程语言，写自己的生命代码---</description><language>zh-cn</language><lastBuildDate>Tue, 27 Sep 2011 19:31:52 GMT</lastBuildDate><pubDate>Tue, 27 Sep 2011 19:31:52 GMT</pubDate><ttl>60</ttl><item><title>JSP漏洞大观 （转载）</title><link>http://www.cnitblog.com/Walter/articles/59055.html</link><dc:creator>HQ</dc:creator><author>HQ</author><pubDate>Thu, 04 Jun 2009 09:30:00 GMT</pubDate><guid>http://www.cnitblog.com/Walter/articles/59055.html</guid><wfw:comment>http://www.cnitblog.com/Walter/comments/59055.html</wfw:comment><comments>http://www.cnitblog.com/Walter/articles/59055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/Walter/comments/commentRss/59055.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/Walter/services/trackbacks/59055.html</trackback:ping><description><![CDATA[<p><br>作者：包路跃 来源:yesky</p>
<p>综述：服务器漏洞是安全问题的起源，黑客对网站的攻击也大多是从查找对方的漏洞开</p>
<p>始的。所以只有了解自身的漏洞，网站管理人员才能采取相应的对策，阻止外来的攻击</p>
<p>。下面介绍一下一些服务器（包括Web服务器和JSP服务器）的常见漏洞。 </p>
<p>　　Apache泄露重写的任意文件漏洞是怎么回事？ </p>
<p>　　在Apache1.2以及以后的版本中存在一个mod_rewrite模块，它用来指定特殊URLS在</p>
<p>网络服务器文件系统上所映射的绝对路径。如果传送一个包含正确表达参数的重写规则</p>
<p>，攻击者就可以查看目标主机上的任意文件。 </p>
<p>　　下面举例说明重写规则指令（其中第一行只有是包含漏洞的）： </p>
<p>　　RewriteRule /test/(.*) /usr/local/data/test-stuff/<br>　　RewriteRule /more-icons/(.*) /icons/<br>　　RewriteRule /go/(.*) <a href="http://www.apacheweek.com/">http://www.apacheweek.com/</a> </p>
<p>　　受影响的系统： </p>
<p>　　1）Apache 1.3.12<br>　　2）Apache 1.3.11win32<br>　　3）Apache 1.2.x </p>
<p>　　不受影响系统：Apache 1.3.13 </p>
<p>　　怎样解决在HTTP请求中添加特殊字符导致暴露JSP源代码文件？<br>　　Unify eWave ServletExec 是一个 Java/Java Servlet 引擎插件，主要用于 WEB </p>
<p>服务器，例如：Microsoft IIS, Apache, Netscape Enterprise 服务器等等。<br>　　当一个 HTTP 请求中添加下列字符之一，ServletExec 将返回 JSP 源代码文件。<br>. </p>
<p>　　%2E<br>　　+<br>　　%2B<br>　　<br>　　%5C<br>　　%20<br>　　%00&nbsp; </p>
<p>　　成功的利用该漏洞将导致泄露指定的JSP文件的源代码，例如：使用下面的任意一个</p>
<p>URL请求将输出指定的JSP文件的源代码： </p>
<p>　　1）<a href="http://target/directory/jsp/file.jsp">http://target/directory/jsp/file.jsp</a>. <br>　　2）<a href="http://target/directory/jsp/file.jsp%2E">http://target/directory/jsp/file.jsp%2E</a><br>　　3）<a href="http://target/directory/jsp/file.jsp">http://target/directory/jsp/file.jsp</a>+ <br>　　4）<a href="http://target/directory/jsp/file.jsp%2B">http://target/directory/jsp/file.jsp%2B</a><br>　　5）<a href="http://target/directory/jsp/file.jsp">http://target/directory/jsp/file.jsp</a> <br>　　6）<a href="http://target/directory/jsp/file.jsp%5C">http://target/directory/jsp/file.jsp%5C</a><br>　　7）<a href="http://target/directory/jsp/file.jsp%20">http://target/directory/jsp/file.jsp%20</a> <br>　　8）<a href="http://target/directory/jsp/file.jsp%00">http://target/directory/jsp/file.jsp%00</a> </p>
<p>　　受影响的系统： </p>
<p>　　1）Unify eWave ServletExec 3.0c<br>　　2）Sun Solaris 8.0<br>　　3）Microsoft Windows 98<br>　　4）Microsoft Windows NT 4.0<br>　　5）Microsoft Windows NT 2000<br>　　6）Linux kernel 2.3.x<br>　　7）IBM AIX 4.3.2<br>　　8）HP HP-UX 11.4 </p>
<p>　　解决方案： </p>
<p>　　如果没有使用任何静态页面或图像，可以配置一个默认的 servlet，并将"/"映射到</p>
<p>这个默认的 servlet。这样当收到一个未映射到某个 servlet 的 URL 时，这个默认的</p>
<p>servlet 就会被调用。在这种情况下，默认的 servlet 可以仅仅返回"未找到文件"。如</p>
<p>果使用了静态的页面或图像，仍然可以作这样的配置，但是需要让这个默认的servlet </p>
<p>处理对合法的静态页面和图像的请求。<br>　　另一种可能就是将*.jsp+、*.jsp.和*.jsp等映射到一个 servlet，而该servlet只</p>
<p>是返回"未找到文件"。对于*.jsp%00和*.jsp%20这样的情况，映射应以未经编码的形式</p>
<p>输入。例如，对于*.jsp%20的映射应输入"*.jsp "。注意%20被转换成一个空格字符</p>
<p><br>Tomcat有哪些漏洞？</p>
<p>　　Tomcat 3.1 存在暴露网站路径问题 </p>
<p>　　Tomcat 3.1 是在 Apache 软件环境下开发的一个支持 JSP 1.1 和 Servlets 2.2 </p>
<p>的软件。它存在一个安全问题当发送一个不存在的 jsp 请求时会暴露网站上网页的全路</p>
<p>径。 </p>
<p>　　举例：<br>　　<a href="http://narco.guerrilla.sucks.co:8080/anything.jsp">http://narco.guerrilla.sucks.co:8080/anything.jsp</a> </p>
<p>　　结果显示：<br>Error: 404 <br>Location: /anything.jsp <br>JSP file "/appsrv2/jakarta-tomcat/webapps/ROOT/anything.jsp" not found </p>
<p>　　解决方案：升级到新版本 </p>
<p>　　Tomcat 暴露JSP文件内容 </p>
<p>　　Java Server Pages (JSP)类型的文件是以'.jsp'扩展名在Tomcat 上注册，Tomcat </p>
<p>是文件名大小写敏感的，'.jsp'和'.JSP'是不同类型的文件扩展名。如果提交有'.JSP'</p>
<p>的链接给Tomcat,而Tomcat找不到'.JSP'就会以默认的'.text'文件类型来响应请求。因</p>
<p>为在NT系统中大小写文件名是非敏感的，所以被请求的文件会以文本的形式送出。 </p>
<p>　　如果在UNIX服务器上会出现"file not found"的错误信息。 </p>
<p>　　如何在windows下对Tomcat实施代码保护 </p>
<p>　　Tomcat的一些版本有泄露源代码的漏洞，如果在浏览器中调用JSP页面时将该文件的</p>
<p>后缀改成大写，这个JSP文件的源代码将完全输出到浏览器中（也许浏览器窗口中什么都</p>
<p>没有，这时你只需查看HTML源文件就可以发现）。如此一来，网站的源代码是不是都会</p>
<p>暴露在互联网上那？<br>　　不用担心，解决方法很简单，把各种后缀的组合全部写到Tomcat_Homeconf web.xml</p>
<p>里就可以了，这样Tomcat会将不同后缀名的JSP分开对待，就不会泄露代码了。</p>
<p><br>　　　　jsp<br>　　　　*.jsp</p>
<p><br>　　　　jsP<br>　　　　*.jsP</p>
<p><br>　　　?lt;servlet-name&gt;jSp<br>　　　　*.jSp</p>
<p><br>　　　　jSP<br>　　　　*.jSP</p>
<p><br>　　　　Jsp<br>　　　　*.Jsp</p>
<p><br>　　　　JsP<br>　　　　*.JsP</p>
<p><br>　　　　JSp<br>　　　　*.JSp</p>
<p><br>　　　　JSP<br>　　　　*.JSP<br>&nbsp;</p>
<p>　　Allair Jrun漏洞有哪些漏洞？ </p>
<p>　　Allair JRUN 非法读取 WEB-INF 漏洞<br>　　在Allaire 的 JRUN 服务器 2.3版本中存在一个严重的安全漏洞。它允许一个攻击</p>
<p>者在 JRun 3.0 服务器中查看 WEB-INF 目录。<br>　　如果用户在提交 URL 请求时在，通过附加一个"/"使该 URL 成为畸形的 URL，这时 </p>
<p>WEB-INF 下的所有子目录将会暴露出来。攻击者巧妙的利用该漏洞将能够远程获得目标</p>
<p>主机系统中 WEB-INF 目录下的所有文件的读取权限。<br>　　例如使用下面这个 URL 将会暴露 WEB-INF 下的所有文件：<br><a href="http://site.running.jrun:8100//WEB-INF/">http://site.running.jrun:8100//WEB-INF/</a> </p>
<p>　　受影响的系统：Allaire JRun 3.0 </p>
<p>　　解决方案：下载并安装补丁： </p>
<p>Allaire patch jr233p_ASB00_28_29<br><a href="http://download.allaire.com/jrun/jr233p_ASB00_28_29.zip">http://download.allaire.com/jrun/jr233p_ASB00_28_29.zip</a><br>Windows 95/98/NT/2000 and Windows NT Alpha<br>Allaire patch jr233p_ASB00_28_29tar<br><a href="http://download.allaire.com/jrun/jr233p_ASB00_28_29.tar.gz">http://download.allaire.com/jrun/jr233p_ASB00_28_29.tar.gz</a><br>UNIX/Linux patch - GNU gzip/tar&nbsp; </p>
<p>　　Allaire JRUN 2.3 查看任意文件漏洞 </p>
<p>　　Allaire 的 JRUN 服务器 2.3上存在多重显示代码漏洞。该漏洞允许攻击者在 WEB </p>
<p>服务器上查看根目录下的任意文件的源代码。<br>　　JRun 2.3 使用 Java Servlets 解析各种各样类型的页面（例如：HTML, JSP等等）</p>
<p>。基于rules.properties 和 servlets.properties 的文件设置，可能利用URL前</p>
<p>缀"/servlet/"调用任何servlet。<br>　　它可能使用 Jrun 的 SSIFilter servlet 在目标系统上检索任意的文件。下列 2 </p>
<p>个例子显示出能被用来检索任意的文件的 URLs ： </p>
<p><a href="http://jrun:8000/t">http://jrun:8000/servlet/com.livesoftware.jrun.plugins.ssi.SSIFilter/../../t</a> </p>
<p>est.jsp <br><a href="http://jrun:8000/">http://jrun:8000/servlet/com.livesoftware.jrun.plugins.ssi.SSIFilter/../../</a>..</p>
<p>/../../../../boot.ini <br><a href="http://jrun:8000/">http://jrun:8000/servlet/com.livesoftware.jrun.plugins.ssi.SSIFilter/../../</a>. </p>
<p>./../../../../winnt/repair/sam<br><a href="http://jrun:8000/test.jsp">http://jrun:8000/servlet/ssifilter/../../test.jsp</a> <br><a href="http://jrun:8000/boot.ini">http://jrun:8000/servlet/ssifilter/../../../../../../../boot.ini</a> <br><a href="http://jrun:8000/winnt/repair/sam">http://jrun:8000/servlet/ssifilter/../../../../../../../winnt/repair/sam</a>._&nbsp; </p>
<p>　　注意：假设JRun在主机" jrun "上运行，端口8000。 </p>
<p>　　受影响的系统：Allaire JRun 2.3.x </p>
<p>　　解决方案：下载并安装补丁： </p>
<p>Allaire patch jr233p_ASB00_28_29<br><a href="http://download.allaire.com/jrun/jr233p_ASB00_28_29.zip">http://download.allaire.com/jrun/jr233p_ASB00_28_29.zip</a><br>Windows 95/98/NT/2000 and Windows NT Alpha<br>Allaire patch jr233p_ASB00_28_29tar<br><a href="http://download.allaire.com/jrun/jr233p_ASB00_28_29.tar.gz">http://download.allaire.com/jrun/jr233p_ASB00_28_29.tar.gz</a><br>UNIX/Linux patch - GNU gzip/tar </p>
<p>Allaire JRUN 2.3远程执行任意命令漏洞 </p>
<p>　　Allaire 的 JRUN 服务器 2.3上存在一个安全漏洞，允许远程用户把在 WEB 服务器</p>
<p>上的任意文件作为JSP代码编译/执行。 　　如果URL请求的目标文件使用了前</p>
<p>缀"/servlet/"，则JSP解释执行功能被激活。这时在用户请求的目标文件路径中使</p>
<p>用"../"，就有可能访问到 WEB 服务器上根目录以外的文件。在目标主机上利用该漏洞</p>
<p>请求用户输入产生的一个文件，将严重威胁到目标主机系统的安全。 </p>
<p>　　例如： </p>
<p><a href="http://jrun:8000/path/to">http://jrun:8000/servlet/com.livesoftware.jrun.plugins.jsp.JSP/../../path/to</a> </p>
<p>/temp.txt <br><a href="http://jrun:8000/path/to/temp.txt">http://jrun:8000/servlet/jsp/../../path/to/temp.txt</a> </p>
<p>　　受影响的系统：Allaire JRun 2.3.x </p>
<p>　　解决方案：下载并安装补丁： </p>
<p>Allaire patch jr233p_ASB00_28_29<br><a href="http://download.allaire.com/jrun/jr233p_ASB00_28_29.zip">http://download.allaire.com/jrun/jr233p_ASB00_28_29.zip</a><br>Windows 95/98/NT/2000 and Windows NT Alpha<br>Allaire patch jr233p_ASB00_28_29tar<br><a href="http://download.allaire.com/jrun/jr233p_ASB00_28_29.tar.gz">http://download.allaire.com/jrun/jr233p_ASB00_28_29.tar.gz</a><br>UNIX/Linux patch - GNU gzip/tar&nbsp; </p>
<p>　　JRun 2.3.x 范例文件暴露站点安全信息 </p>
<p>　　JRun 2.3.x 在 JRUN_HOME/servlets 目录下有一些 servlet 范例文件，这个目录</p>
<p>是 JRun 2.3.x 用于加载和执行 servlets 文件。所有扩展名为 ".Java" 或 "class" </p>
<p>的文件必须被删除，这是因为这些文件会暴露站点的安全信息。例如：<br><a href="http://www.xxx.xxx/servlet/SessionServlet">http://www.xxx.xxx/servlet/SessionServlet</a> 会暴露当前服务器保持的HTTP连接信息</p>
<p>。JRUN_HOME/jsm-default/services/jws/htdocs 目录下的内容也应被删除掉。这个目</p>
<p>录保存有演示服务器功能的 '.jsp' 文件，其中一些文件牵涉到访问服务器文件系统和</p>
<p>暴露服务器设置的问题。例如对文件 "viewsource.jsp" 的路径检查是默认关闭的，它</p>
<p>可被用于访问服务器文件系统。 </p>
<p>　　解决方案： </p>
<p>　　1）安装 2.3.3 service pack<br>　　2）从服务器上删除所有的说明文档、演示编码、范例和教材，包括安装 JRun 　　</p>
<p>2.3.x 时存放于 JRUN_HOME/servlets 目录和JRUN_HOME/jsm-</p>
<p>default/services/jws/htdocs 目录里的文档。 <br>　　相关站点：<a href="http://www.allaire.com/">http://www.allaire.com/</a> </p>
<p>　　IBM WebSphere Application Server有哪些漏洞？ </p>
<p>　　1、IBM WebSphere Application Server 3.0.2 存在暴露源代码漏洞<br>IBM WebSphere Application Server 允许攻击者查看 Web server 根目录以上的所有文</p>
<p>件。IBM WebSphere 使用 Java Servlets 处理多种页面类型的分析(如 HTML, JSP, </p>
<p>JHTML, 等等)。In addition 不同的 servlets 对不同的页面进行处理，如果一个请求</p>
<p>的文件是未进行注册管理的，WebSphere 会使用一个默认的 servlet 作调用。如果文件</p>
<p>路径以"/servlet/file/"作开头这个默认的 servlet 会被调用这个请求的文件会未被分</p>
<p>析或编译就显示出来。 </p>
<p>　　受影响系统：IBM WebSphere 3.0.2 的所有版本 </p>
<p>　　举例： </p>
<p>　　如果一个请求文件的 URL 为 "login.jsp":：　　</p>
<p><a href="http://site.running.websphere/login.jsp">http://site.running.websphere/login.jsp</a>那么访问　　</p>
<p><a href="http://site.running.websphere/servlet/file/login.jsp">http://site.running.websphere/servlet/file/login.jsp</a>将看到这个文件的源代码。 <br>　　解决方案：下载并安装补丁<br><a href="http://www-4.ibm.com/software/webservers/appserv/efix.html">http://www-4.ibm.com/software/webservers/appserv/efix.html</a> <br>　　相关站点：<a href="http://www-4.ibm.com/software/webservers/appserv/">http://www-4.ibm.com/software/webservers/appserv/</a><br>　　IBM WebSphere Application Server 暴露JSP文件内容<br>　　Java Server Pages (JSP)类型的文件是以'.jsp'扩展名在WebSphere Application </p>
<p>Serve 上注册，WebSphere 是文件名大小写敏感的，'.jsp'和'.JSP'是不同类型的文件</p>
<p>扩展名。如果提交有'.JSP'的链接给WebSphere,而WebSphere找不到'.JSP'就会以默认的</p>
<p>'.text'文件类型来响应请求。因为在NT系统中大小写文件名是非敏感的，所以被请求的</p>
<p>文件会以文本的形式送出。</p>
<p>　　如果在UNIX服务器上会出现"file not found"的错误信息。 </p>
<p>　　解决方案：点击此处下载补丁 <br>　　相关站点：<a href="http://www-4.ibm.com/software/webservers/appserv/efix.html">http://www-4.ibm.com/software/webservers/appserv/efix.html</a> <br>　　BEA WebLogic有哪些暴露源代码漏洞？ </p>
<p>　　受影响版本： </p>
<p>　　所有系统上的 </p>
<p>　　BEA WebLogic Enterprise 5.1.x <br>　　BEA WebLogic Server and Express 5.1.x <br>　　BEA WebLogic Server and Express 4.5.x <br>　　BEA WebLogic Server and Express 4.0.x <br>　　BEA WebLogic Server and Express 3.1.8&nbsp; </p>
<p>　　这个漏洞使攻击者能读取 Web 目录下所有文件的源代码。 </p>
<p>　　WebLogic 依赖四个主要 Java Servlets to 服务不同类型的文件。这些 servlets </p>
<p>是： </p>
<p>　　1）FileServlet - for 简单 HTML 页面 <br>　　2）SSIServlet - for Server Side Includes 页面 <br>　　3）PageCompileServlet - for JHTML 页面 <br>　　4）JSPServlet - for Java Server 页面 </p>
<p>　　看着weblogic.properties 文件, 这儿是各个 servlets 的注册值： </p>
<p>　　1）weblogic.httpd.register.file=weblogic.servlet.FileServlet <br>　　2）</p>
<p>weblogic.httpd.register.*.shtml=weblogic.servlet.ServerSideIncludeServlet <br>　　3）</p>
<p>weblogic.httpd.register.*.jhtml=weblogic.servlet.jhtmlc.PageCompileServlet <br>　　4）weblogic.httpd.register.*.jsp=weblogic.servlet.JSPServlet <br>更多的 weblogic.properties 文件, 如果一个请求文件是没有注册管理的，那么就会调</p>
<p>用一个默认的 servlet 。以下是展示默认的 servlet 是如何注册的。 </p>
<p>　　# Default servlet registration <br>　　# ------------------------------------------------ <br>　　# Virtual name of the default servlet if no matching servlet <br>　　# is found weblogic.httpd.defaultServlet=file&nbsp; </p>
<p>　　因此如果 URL 中的文件路径开头为 "/file/" , 将会引致 WebLogic 调用默认的 </p>
<p>servlet, 那将会使网页未加分析和编译而直接显示。 </p>
<p>　　论证： </p>
<p>　　只要在想看的文件原来的 URL 路径之前加入 "/file/" 就会让文件未经分析和编译</p>
<p>，直接暴露源代码。如：<a href="http://site.running.weblogic/login.jsp">http://site.running.weblogic/login.jsp</a> ，那么只要访问 </p>
<p><a href="http://site.running.weblogic/file/login.jsp">http://site.running.weblogic/file/login.jsp</a> 就会在 WEB 浏览器里看到文件的内容</p>
<p>。 </p>
<p>　　以下是使用方法: </p>
<p>　　1. 通过强制使用 SSIServlet 查看未分析的页面 :<br>　　服务器站点通过 WebLogic 中的 SSIServlet 处理页面，它在weblogic.properties </p>
<p>文件中注册以下信息：weblogic.httpd.register.*.shtml= </p>
<p>weblogic.servlet.ServerSideIncludeServlet </p>
<p>　　通过 URL 使用 SSIServlet 自动处理通配符 （*） 。因此 如果文件路径开头为 </p>
<p>/*.shtml/，将强制文件由 SSIServlet 处理。如果使用其它文件类型如 .jsp 和 </p>
<p>.jhtml, 就能查看未分析的 jsp 和 jhtml 代码。举例：</p>
<p><a href="http://www.xxx.com/*.shtml/login.jsp">http://www.xxx.com/*.shtml/login.jsp</a> </p>
<p>　　2. 通过强制使用 FileServlet 查看未分析的页面 :<br>　　WebLogic 使用 FileServlet 配置 ConsoleHelp servlet ，在</p>
<p>weblogic.properties 文件的以下内容可得知: </p>
<p># For Console help. Do not modify. <br>weblogic.httpd.register.ConsoleHelp= weblogic.servlet.FileServlet <br>weblogic.httpd.initArgs.ConsoleHelp=defaultFilename=/weblogic/admin/help/NoCo</p>
<p>ntent.html<br>weblogic.allow.execute.weblogic.servlet.ConsoleHelp=everyone&nbsp; </p>
<p>　　因此如果文件路径以 /ConsoleHelp/ 开头将导致 WebLogic 使用 FileServlet，使</p>
<p>未分析或编译的文件作页面显示出来，举例：</p>
<p><a href="http://www.xxx.com/ConsoleHelp/login.jsp">http://www.xxx.com/ConsoleHelp/login.jsp</a> </p>
<p>　　解决方案：<br>　　不要使用示例中的设置方法设置 FileServlet 。这可能会让你的 JSP/JHTML 文件</p>
<p>的源代码暴露出来。请查看在线文档: <br>　　<a href="http://www.weblogic.com/docs51/admindocs/http.html#file">http://www.weblogic.com/docs51/admindocs/http.html#file</a> </p>
<p>　　示例的 registrations 如下：<br>　　weblogic.httpd.register.file=weblogic.servlet.FileServlet <br>　　weblogic.httpd.initArgs.file=defaultFilename=index.html <br>　　weblogic.httpd.defaultServlet=file </p>
<p>　　有两种方法可以避免这个问题： </p>
<p>　　（1）注册那些文件 servlet 使用随机用户名，加大猜测难度。例如使用象这样注</p>
<p>册文件 servlet 为 12foo34：<br>　　weblogic.httpd.register.12foo34=weblogic.servlet.FileServlet <br>　　weblogic.httpd.initArgs.12foo34=defaultFilename=index.html <br>　　weblogic.httpd.defaultServlet=12foo34 </p>
<p>　　（2）注册文件 servlet 使用 wild cards 声明你将使用所有这些文件扩展名作服</p>
<p>务。举例注册文件 servlet 为 .html 文件服务：<br>　　weblogic.httpd.register.*.html=weblogic.servlet.FileServlet <br>　　weblogic.httpd.initArgs.*.html=defaultFilename=index.html <br>　　weblogic.httpd.defaultServlet=*.html </p>
<p>　　使用上面的方法重复加入以下类型的文件 *.gif, *.jpg, *.pdf, *.txt, etc. <br>　　注意：这些信息是备有证明在 BEA WebLogic Server and Express 说明档的：</p>
<p><a href="http://www.weblogic.com/docs51/admindocs/lockdown.html">http://www.weblogic.com/docs51/admindocs/lockdown.html</a> <br>　　另：请留意新版本并升级吧。 <br></p>
<img src ="http://www.cnitblog.com/Walter/aggbug/59055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/Walter/" target="_blank">HQ</a> 2009-06-04 17:30 <a href="http://www.cnitblog.com/Walter/articles/59055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp安全问题及其解决建议 （转载）</title><link>http://www.cnitblog.com/Walter/articles/59054.html</link><dc:creator>HQ</dc:creator><author>HQ</author><pubDate>Thu, 04 Jun 2009 09:17:00 GMT</pubDate><guid>http://www.cnitblog.com/Walter/articles/59054.html</guid><wfw:comment>http://www.cnitblog.com/Walter/comments/59054.html</wfw:comment><comments>http://www.cnitblog.com/Walter/articles/59054.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/Walter/comments/commentRss/59054.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/Walter/services/trackbacks/59054.html</trackback:ping><description><![CDATA[<p>作者：清风 来源:yesky</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsp编程语言自从推出之日起，由于它的快速、平台无关、可扩展、面向对象等特性得到了越来越广泛的应用，越来越多的厂家开发出了各种各样的支持平台如IBM 公司的WebSphere、BEA公司的WebLogic等等，也有越来越多的网站开始将自己的平台架构在jsp 环境中。</p>
<p>　　但是随之而来的就是一系列的安全漏洞问题，如源代码暴露漏洞、远程任意命令执行漏洞等等，更为头疼的是，随着jsp 的越来越广泛的应用，安全问题也越来越多了。截止到这篇文章为止，Internet上公开的关于jsp 的漏洞问题就多达二、三十条(还不包括未公开的)。(统计数据来源于<a href="http://www.securityfocus.com/">http://www.securityfocus.com</a>)</p>
<p>　　不要轻视这些问题，想象一下，你辛辛苦苦开发出来的jsp 代码就被别人这样轻而易举的获得了，更为重要的是，你公司网站的代码被人下载后，别有用意的人就会看你的代码，从中找到一些漏洞来攻击你的公司网站，所以这些问题不容忽视。作者在sohu 上搜索了一些用jsp做的国内网站，结果发现有一些网站确实存在各种各样的漏洞，可以轻松的下载jsp源代码。</p>
<p>　　本篇文章重点在于对jsp安全问题进行分类阐述和提出解决的建议，所以每种类型的安全问题只采用了一个例子，对于其它各种漏洞的具体细节如涉及到何种软件版本何种操作系统等就不一一进行阐述了，有兴趣的读者可以到我的网站jsp 爱好者(<a href="http://jspbbs.yeah.net/">http://jspbbs.yeah.net</a>)或者国外的安全站点(<a href="http://www.securityfocus.com/">http://www.securityfocus.com</a>)进行查看和参考。</p>
<p>根据目前已经发现的jsp安全问题，我们不妨将它们分为以下几类，源代码暴露类、远程程序执行类和其他类别, 下面来看看具体的东西吧。</p>
<p>一、源代码暴露类</p>
<p>　　源代码暴露类别主要指的是程序源代码会以明文的方式返回给访问者.</p>
<p>　　我们知道不管是jsp还是asp、php等动态程序都是在服务器端执行的，执行后只会返回给访问者标准的html 等代码。这是理论上的东西，实际运行起来由于服务器内部机制的问题就有可能引起源代码暴露的漏洞，简单的例子只要在程序文件名后加几个简单的字符就可能获得程序代码，如常见微软asp 的global.asa+.htr、XXXX.asp%81等等漏洞。</p>
<p>　　1、添加特殊后缀引起jsp源代码暴露</p>
<p>　　在jsp中也存在着和asp这些漏洞类似的问题，如IBM Websphere Application Server 3.0.21、BEA Systems Weblogic 4.5.1、Tomcat3.1等jsp文件后缀大写漏洞;jsp 文件后加特殊字符如Resin1.2的%82、../漏洞；ServletExec的%2E、+漏洞等等。</p>
<p>　　例子：举个老一点的JSP大写例子，Tomcat3.1下在浏览器中本来是<a href="http://localhost:8080/inde.jsp">http://localhost:8080/inde.jsp</a>，可以正常解释执行，但是如果将inde.jsp改为inde.JSP或者inde.Jsp等等试试看，你会发现浏览器会提示你下载这个文件，下载后源代码可以看个一干二净。</p>
<p>　　原因：jsp是大小写敏感的，Tomcat只会将小写的jsp后缀的文件当作是正常的jsp文件来执行，如果大写了就会引起Tomcat将inde.JSP当作是一个可以下载的文件让客户下载。老版本的WebLogic、WebShpere等都存在这个问题，现在这些公司或者发布了新版本或者发布了补丁解决了这问题。</p>
<p>　　解决办法：一是在服务器软件的网站上下载补丁；因为笔者以前用过asp 一段时间，接触了很多IIS的漏洞，它的有效解决方法是去掉不必要的映射如htr、htx等，在jsp 中我们同样可以参考IIS的解决方法，不同的是不是去掉而是添加映射，方法为在服务器设置中添加一些映射如.JSP 、.Jsp、.jsp%2E等，将他们映射到一个自己写的servlet，这个Servlet的唯一功能就是将请求导向一个自定义的类似404 not found的出错页面，不同的服务器设置的地方也不同，请参考相应的文档。第二种解决方法可以在没有补丁的时候采用。</p>
<p>　　2、插入特殊字符串引起jsp源代码暴露</p>
<p>　　还有一种是插入特殊字符串引起的漏洞，BEA WebLogic Enterprise 5.1.<br>文件路径开头为 "/file/" 的漏洞、IBM WebSphere 3.0.2的"/servlet/file/"文件开头漏洞等等。</p>
<p>　　例子：如IBM WebSphere 3.0.2中，如果一个请求文件的 URL 为"login.jsp":http://site.running.websphere/login.jsp，那么访问<a href="http://site.running.websphere/servlet/file/login.jsp">http://site.running.websphere/servlet/file/login.jsp</a>将看到这个文件的源代码。 </p>
<p>　　原因：因为IBM WebSphere 3.0.2是调用不同的 servlets 对不同的页面进行处理，如果一个请求的文件是未进行注册管理的，WebSphere 会使用一个默认的 servlet 调用。如果文件路径以"/servlet/file/"作开头这个默认的 servlet 会被调用这个请求的文件会未被分析或编译就显示出来。</p>
<p>　　解决方法：在服务器软件的网站下载最新的补丁。</p>
<p>　　3、路径权限引起的文件jsp源代码暴露</p>
<p>　　这种漏洞在正常的jsp漏洞中没有反映出来，但是笔者在写jsp程序中曾经碰到过，头疼了一阵子，最后总算解决了。我们知道，大部分的jsp应用程序在当前目录下都会有一个WEB-INF目录，这个目录通常存放的是JavaBeans编译后的class 文件，如果不给这个目录设置正常的权限，所有的class就会曝光。</p>
<p>　　例子：笔者当时采用的是Apache1.3.12加上第三方jsp软件形式的WEB服务器，因为Apache1.3.12默认的设置是可以读取目录的，如果程序在<a href="http://site.running.websphere/login.jsp">http://site.running.websphere/login.jsp</a>，只要修改一下<a href="http://site.running.websphere/WEB-INF/">http://site.running.websphere/WEB-INF/</a>所有这个目录下以及这个目录下的子目录中的class文件可以看个一干二净的，还可以下载到本机上。</p>
<p>　　也许你会说class是经过编译的，就算被人下载也没有什么关系，但是现在class 反编译为java代码的软件也很多，笔者当时采用JAD软件对下载的class文件反编译了一下，居然和原始的java文件几乎一模一样，变量名都没有变，更惊奇的是还可以重新编译为class文件正常使用。</p>
<p>　　安全问题更大的就是，笔者开始把数据库的用户名密码都写在了java代码中，现在一反编译谁都能看到数据库的重要信息。通过数据库的远程连接功能，可以轻松的进入到你的数据库中，所有信息全部在他手中。附带说一句，如果用户能获得SQL Server的用户名口令(sa 的)，进入数据库中可以执行任意的dos命令如查看c:文件、建立和删除目录等，那样整个Windows系统都不安全了(此种方法危害性更大，恕作者不公布出来)。</p>
<p>　　作者曾经偶然在网上看到过国内某个大型网站有同样的问题，而且密码也是和笔者一样写在JavaBean中的，极不安全。</p>
<p>　　解决方法：IIS以前一个有效地解决asp的漏洞就是将asp程序单独放置一个目录，目录设置上用户权限只能执行不能读取。在jsp环境下同样可以通过设置服务器的环境来解决这个问题，简单的说就是将一些比较重要的目录如WEB-INF、classes等设置上访问的权限，不允许读而取只允许执行。以apache 下解决为例，可以在httpd.conf文件中添加一目录WEB-INF并设置Deny from all等属性。</p>
<p>　　另一种比较笨的解决方法就是在每个重要目录下添加一个默认起始页面如inde.htm等，这样读取目录就会返回给访问者这个文件而不是其它了。建议采用的一种方法。</p>
<p>　　更为重要的是密码的保存问题，笔者以前在asp 开发中是采用密码文件保存在系统目录如WINNT 下的，然后写了一个com来读取这个文件，这样就算看到了asp源代码也不知道数据库信息了。在jsp中我们也可以写一个property文件，放置在WINNT系统目录下，然后用Bean来读取数据库信息，这样通过源代码知道了数据库信息存在WINNT中的.property文件里面，但也很难访问它，这样就算源代码被人知道起码数据库是安全的。</p>
<p>　　4、文件不存在引起的绝对路径暴露问题</p>
<p>　　这个问题相信大家都比较熟悉了，因为微软IIS 中也有比较多的类似问题如微软IIS5.0中的*.idc暴露绝对路径漏洞。同样的这些问题现在也转到了jsp环境中，这个漏洞暴露了web程序的绝对硬盘地址，和其他漏洞结合就具有比较大的危害了，因为这个漏洞目前还没有在国外安全网站上看到，而站长也没有一一测试过所有的jsp服务器程序，所以没有办法告诉大家那些有这个漏洞了，大家可以在自己的web服务器上测试看看。</p>
<p>　　例子：在特定的服务器软件下，访问一个不存在的jsp文件如 <a href="http://localhost:8080/fdasfas.jsp">http://localhost:8080/fdasfas.jsp</a>，就会返回java.servlet.ServletEception: java.io.FileNotFoundEception: c:webappfadssad.jsp (???????????)这样的错误，这样就可以知道你网站在c:webapp目录下，也许一般人不太在意，但是对于一个黑客来说就是很有帮助了。</p>
<p>　　原因：负责jsp 执行的相关Servlet中处理异常的时候没有过滤掉这种情况。</p>
<p>　　解决方法：一是下载最新的补丁；由于笔者当时的web 服务器软件没有这个补丁，经过一段时间的痛苦煎熬后，总算找到了另外一种方法，就是找到服务器软件的jsp 执行映射Servlet文件(当然是class 后缀的)，将它用JAD软件反编译，在反编译后的源代码中找到处理Eception的方法，然后将方法中的处理部分全部注释掉，并将请求导向到一个自定义的出错页面中，这样问题就解决了。</p>
<p>二、远程程序执行类</p>
<p>　　这类漏洞的特点就是可以通过url 地址在浏览器中执行任意服务器上的命令和程序，从而引起安全问题。如Allaire JRUN 2.3 远程执行任意命令漏洞、iPlanet Web Server 4.x存在一个缓冲区溢出漏洞等等。</p>
<p>　　例子：Allaire 的 JRUN 服务器 2.3上输入下面的url地址<a href="http://jrun:8000/path/sample.txt">http://jrun:8000/servlet/jsp/../../path/sample.txt</a>，可以访问到WEB目录以外的文件，如果是exe文件，还有可能会引起执行。</p>
<p>　　原因：如果URL请求的目标文件使用了前缀"/servlet/"，则JSP 解释执行功能被激活。这时在用户请求的目标文件路径中使用"../"，就有可能访问到 WEB 服务器上根目录以外的文件。目标主机上利用该漏洞请求用户输入产生的一个文件，将严重威胁到目标主机系统的安全。</p>
<p>　　解决方法：安装最新的补丁。</p>
<p>三、其他类别</p>
<p>　　这些类别的范围就有点大了，可以包括数据库如SQL Server、Oracle 、DB2等的漏洞，也可以包括操作系统如WindowsNT/2000、Linu等的漏洞。这些东西的漏洞可以说都是致命的，如利用Linu的某些漏洞可以轻易的Su为管理员来远程控制服务器，获得系统的完全控制权限，这样要获得jsp源代码或者摧毁服务器比踩死一只蚂蚁还要轻松的多。</p>
<p>四、全文总结</p>
<p>　　通过上面内容我们可以看出jsp同asp一样还是存在着很多安全上的问题的，客观的说，服务器软件的开发商在内部测试中不可能将系统中的所有bug 找出来，即使发布了软件后，被发现的漏洞也只会是其中的很小一部分，将来还会不断的有新的安全问题出现，所以我们必须时刻提高警惕，并注意自己网站的安全。</p>
<p>　　一个好的建议就是多看安全文章，这些安全文章一般都会有详细的信息如软件的版本号、漏洞原因等等，最重要的是还附带了解决办法或者是补丁的下载链接，推荐的安全站点是国内的安全站点<a href="http://www.cnns.net/">www.cnns.net</a>或者国外的<a href="http://www.securityfocus.com/">www.securityfocus.com</a>站点；另外一个好的建议就是多装补丁程序，访问自己所使用的软件公司主页，从那上面获得最新的补丁程序，做得比较好的就是微软的站点，安全公告和补丁都特别及时。</p>
<p>　　最后想用一句话作为全文的结尾：一个优秀的黑客不一定是个好的jsp 程序员，一个优秀的jsp程序员一定要是个好的准黑客。<br></p>
<img src ="http://www.cnitblog.com/Walter/aggbug/59054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/Walter/" target="_blank">HQ</a> 2009-06-04 17:17 <a href="http://www.cnitblog.com/Walter/articles/59054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>