当前位置:首页 >> 网络通讯 >> 网络安全 >> 内容

关于JSP源码泄漏问题的总结分析

时间:2013/4/19 12:09:00 作者:平凡之路 来源:xuhantao.com 浏览:

:09年的一篇老文章了

JSP编程语言自从推出之日起,由于它的快速、平台无关、可扩展、面向对象等特性得到了越来越广泛的应用,越来越多的厂家开发出了各种各样的支持平台如IBM 公司的WebSphere、BEA公司的WebLogic等等,也有越来越多的网站开始将自己的平台架构在JSP 环境中。

但是随之而来的就是一系列的安全问题,如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等等漏洞。

一、添加特殊后缀引起JSP源码泄露

在JSP中也存在着和asp这些漏洞类似的问题,如IBM Websphere Application Server 3.0.21、BEA Systems Weblogic 4.5.1、Tomcat一等JSP文件后缀大写漏洞;JSP 文件后加特殊字符如Resin1.2的%82、../漏洞;ServletExec的%2E、+漏洞、%2E、+、%2B、 、%5C、%20、%00 等。

黑客如果利用该漏洞,将导致泄露指定的JSP文件的源代码。例一:使用下面的任意一个URL请求将输出指定的JSP文件的源代码:

1)

2)%2E

3)

4)%2B

5)

6)%5C

7)%20

等等。

例二,在Tomcat一下,在浏览器中本来可以正常解释执行的是:8080/inde.jsp,但是如果将inde.jsp改为inde.JSP或者inde.Jsp等等试试看,你会发现浏览器会提示你下载这个文件,下载后源代码可以看个一干二净。

原因是JSP是大小写敏感的,Tomcat只会将小写的JSP后缀的文件当作是正常的JSP文件来执行,如果大写了就会引起Tomcat将inde.JSP当作是一个可以下载的文件让客户下载。老版本的WebLogic、WebShpere等都存在这个问题,现在这些公司或者发布了新版本或者发布了补丁解决了这问题。

解决办法

解决这种由于添加后缀引起的源代码泄漏有两种方法,一种方法是在服务器软件的网站上下载补丁;另外一种方法是在服务器设置中添加一些映射如.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被转换成一个空格字符。

二、插入特殊字符串引起JSP源码泄露

插入特殊字符串引起的漏洞有很多,例如BEA  WebLogic Enterprise 5.1中,文件路径开头为 "/file/" 的漏洞、IBM WebSphere 3.0.2中"/servlet/file/"文件开头漏洞等等。

如果在IBM WebSphere 3.0.2中的一个请求文件的 URL 为"login.jsp":,那么,用户在访问  时将看到这个文件的源代码。

原因是由于IBM WebSphere 3.0.2是调用不同的 servlets 对不同的页面进行处理,如果一个请求的文件是未进行注册管理的,WebSphere 会使用一个默认的 servlet 调用。如果文件路径以"/servlet/file/"作开头这个默认的 servlet 会被调用这个请求的文件会未被分析或编译就显示出来。

解决方法

在服务器软件的网站下载最新的补丁。

三、路径权限引起的文件JSP源码泄露

这种漏洞在正常的JSP漏洞中没有反映出来,但是我们知道,大部分的JSP应用程序在当前目录下都会有一个WEB-INF目录,这个目录通常存放的是JavaBeans编译后的class 文件,涛涛电脑知识网,如果不给这个目录设置正常的权限,所有的class就会曝光。

也许有人认为class是经过编译的,就算被下载也没有什么关系,但是现在class 反编译为java代码的软件也很多,采用反编译软件对下载的class文件反编译后,和原始的java文件几乎一模一样,连变量名都没有变,还可以正常使用。

更大的安全问题是,有的软件开发人员把数据库的用户名密码都写在了java代码中,现在一反编译谁都能看到数据库的重要信息。通过数据库的远程连接功能,可以轻松的进入到数据库中,所有信息将全部被别人掌握。

解决方法

有一个方法可以有效地解决由于路径权限引起的代码泄漏问题,就是将ASP程序单独放置一个目录,设置该目录上的用户权限只能执行不能读取。在JSP环境下同样可以通过设置服务器的环境来解决这个问题:将一些比较重要的目录如WEB-INF、classes等设置上访问的权限,不允许读而取只允许执行。以Apache 下解决为例,可以在httpd.conf文件中添加一目录WEB-INF并设置Deny from all等属性。

另一种解决方法就是在每个重要目录下添加一个默认起始页面如index.htm等,这样读取目录就会返回给访问者这个文件而不是其它了。

相比较而言,建议采用第一种方法。

相关文章
  • 没有相关文章
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1