`
wushipan_easy
  • 浏览: 3754 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

一个优秀的黑客不一定是个好的jsp 程序员,一个优秀的jsp程序员一定要是个好的准黑客。

阅读更多

原文地址:http://blog.csdn.net/ywentao/article/details/2127166


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

  但是随之而来的就是一系列的安全漏洞问题,如源代码暴露漏洞、远程任意命令执行漏洞等等,更为头疼的是,随着jsp 的越来越广泛的应用,安全问题也越来越多了。截止到这篇文章为止,Internet上公开的关于jsp 的漏洞问题就多达二、三十条(还不包括未公开的)。

  不要轻视这些问题,想象一下,你辛辛苦苦开发出来的jsp 代码就被别人这样轻而易举的获得了,更为重要的是,你公司网站的代码被人下载后,别有用意的人就会看你的代码,从中找到一些漏洞来攻击你的公司网站,所以这些问题不容忽视。作者在sohu 上搜索了一些用jsp做的国内网站,结果发现有一些网站确实存在各种各样的漏洞,可以轻松的下载jsp源代码。

  本篇文章重点在于对jsp安全问题进行分类阐述和提出解决的建议,所以每种类型的安全问题只采用了一个例子,对于其它各种漏洞的具体细节如涉及到何种软件版本何种操作系统等就不一一进行阐述了。

根据目前已经发现的jsp安全问题,我们不妨将它们分为以下几类,源代码暴露类、远程程序执行类和其他类别, 下面来看看具体的东西吧。

一、源代码暴露类

  源代码暴露类别主要指的是程序源代码会以明文的方式返回给访问者.

  我们知道不管是jsp还是asp、php等动态程序都是在服务器端执行的,执行后只会返回给访问者标准的html 等代码。这是理论上的东西,实际运行起来由于服务器内部机制的问题就有可能引起源代码暴露的漏洞,简单的例子只要在程序文件名后加几个简单的字符就可能获得程序代码,如常见微软asp 的global.asa+.htr、XXXX.asp%81等等漏洞。

  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将inde.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漏洞中没有反映出来,但是笔者在写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的用户名口令(sa 的),进入数据库中可以执行任意的dos命令如查看c:/文件、建立和删除目录等,那样整个Windows系统都不安全了(此种方法危害性更大,恕作者不公布出来)。

  作者曾经偶然在网上看到过国内某个大型网站有同样的问题,而且密码也是和笔者一样写在JavaBean中的,极不安全。

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

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

  更为重要的是密码的保存问题,笔者以前在asp 开发中是采用密码文件保存在系统目录如WINNT 下的,然后写了一个com来读取这个文件,这样就算看到了asp源代码也不知道数据库信息了。在jsp中我们也可以写一个property文件,放置在WINNT系统目录下,然后用Bean来读取数据库信息,这样通过源代码知道了数据库信息存在WINNT中的.property文件里面,但也很难访问它,这样就算源代码被人知道起码数据库是安全的。

4、文件不存在引起的绝对路径暴露问题

  这个问题相信大家都比较熟悉了,因为微软IIS 中也有比较多的类似问题如微软IIS5.0中的*.idc暴露绝对路径漏洞。同样的这些问题现在也转到了jsp环境中,这个漏洞暴露了web程序的绝对硬盘地址,和其他漏洞结合就具有比较大的危害了,因为这个漏洞目前还没有在国外安全网站上看到,而站长也没有一一测试过所有的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软件反编译,在反编译后的源代码中找到处理Eception的方法,然后将方法中的处理部分全部注释掉,并将请求导向到一个自定义的出错页面中,这样问题就解决了。

jsp安全问题及其解决建议(2)二、远程程序执行类

  这类漏洞的特点就是可以通过url 地址在浏览器中执行任意服务器上的命令和程序,从而引起安全问题。如Allaire JRUN 2.3 远程执行任意命令漏洞、iPlanet Web Server4.x存在一个缓冲区溢出漏洞等等。

  例子:Allaire 的 JRUN 服务器 2.3上输入下面的url地址http://jrun:8000/servlet/jsp/../../path/sample.txt,可以访问到WEB目录以外的文件,如果是exe文件,还有可能会引起执行。

  原因:如果URL请求的目标文件使用了前缀"/servlet/",则JSP 解释执行功能被激活。这时在用户请求的目标文件路径中使用"../",就有可能访问到 WEB 服务器上根目录以外的文件。目标主机上利用该漏洞请求用户输入产生的一个文件,将严重威胁到目标主机系统的安全。

  解决方法:安装最新的补丁。

三、其他类别

  这些类别的范围就有点大了,可以包括数据库如SQL Server、Oracle 、DB2等的漏洞,也可以包括操作系统如WindowsNT/2000、Linu等的漏洞。这些东西的漏洞可以说都是致命的,如利用Linu的某些漏洞可以轻易的Su为管理员来远程控制服务器,获得系统的完全控制权限,这样要获得jsp源代码或者摧毁服务器比踩死一只蚂蚁还要轻松的多。

四、全文总结

  通过上面内容我们可以看出jsp同asp一样还是存在着很多安全上的问题的,客观的说,服务器软件的开发商在内部测试中不可能将系统中的所有bug 找出来,即使发布了软件后,被发现的漏洞也只会是其中的很小一部分,将来还会不断的有新的安全问题出现,所以我们必须时刻提高警惕,并注意自己网站的安全。

  一个好的建议就是多看安全文章,这些安全文章一般都会有详细的信息如软件的版本号、漏洞原因等等,最重要的是还附带了解决办法或者是补丁的下载链接,推荐的安全站点是国内的安全站点www.cnns.net或者国外的www.securityfocus.com站点;另外一个好的建议就是多装补丁程序,访问自己所使用的软件公司主页,从那上面获得最新的补丁程序,做得比较好的就是微软的站点,安全公告和补丁都特别及时。

分享到:
评论

相关推荐

    程序员个性壁纸

    【程序员个性壁纸】是一种专为程序员群体设计的个性化桌面背景,它们通常包含了各种与编程、科技、极客文化相关的元素,旨在展现程序员独特的审美和兴趣。这类壁纸在设计上注重清晰度和大尺寸,以确保在高分辨率...

    程序大战 黑客 虚拟机

    在IT领域,程序大战、黑客和虚拟机是三个至关重要的概念,它们紧密相连,共同构成了一个充满挑战与创新的技术世界。 首先,让我们深入了解"程序大战"。程序大战,也被称为编程竞赛或代码战斗,是一种竞技活动,参与...

    程序员的心里-王垠

    2. **文化氛围**:某些团队中可能存在一种推崇“黑客精神”的文化,鼓励通过创新方式解决问题,但这也可能导致对现有设计的不尊重。 3. **技术崇拜**:过分强调技术本身的重要性,忽略了用户体验、设计美感等其他...

    程序员必读书籍

    书中提出了著名的"人月神话"概念,即更多的人力并不一定能更快完成项目,强调了项目管理和团队协作的重要性。同时,书中还讨论了模块化设计、系统架构、软件开发过程等方面的知识,对于软件项目经理和开发者来说具有...

    编程人员必备的记事本(你一定用得着)

    “黑客记事本”可能是指一款特别适合黑客或安全专家使用的记事本,它可能包含了一些特殊功能,如支持多种编程语言、便于分析日志或查看二进制数据等。 在压缩包子文件的文件名称列表中,“阿康记事本”很可能是我们...

    敏捷需求分析.doc

    用户故事的书写遵循一定的原则,一般包括三部分:“作为(系统的一个涉众),我想要(做一件事),从而(达到一个商业价值)”。用户故事的作用有两个,一个是作为进度跟踪的依据,一个是作为与人交谈的备忘录。用户...

    自己动手写操作系统(含源代码).part2

    进而我想到,一定不只是我一个人对编写自己的操作系统怀有兴趣,也一定不只是我一个人在实践时遇到困难。或许我应该把自己的经历写下来,从而可以帮助跟我相似的后来者,就这样,我编写了本书的第一版,也就是...

    自己动手写操作系统(含源代码).part1

    进而我想到,一定不只是我一个人对编写自己的操作系统怀有兴趣,也一定不只是我一个人在实践时遇到困难。或许我应该把自己的经历写下来,从而可以帮助跟我相似的后来者,就这样,我编写了本书的第一版,也就是...

    FluentPython英文正式版(非提前版)

    Luciano Ramalho不仅是一位资深的Python开发者,他还是一名Python软件基金会的成员,与他人共同创立了巴西的Python专业培训机构Python.pro.br,并且是巴西第一个黑客空间Garoa Hacker Clube的联合创始人。...

    网络安全重要性.doc

    但必须看到,紧随信息技术的发展而带来的网络安全问题日渐突出,如果不很 好的解决这个问题,必将阻碍计算机网络发展的进程。 二、网络安全 (一) 网络安全的定义 网络安全从本质上来讲就是网络上的信息安全,就是...

    屏幕保护程序-数字雨

    "数字雨"是一款独特的屏幕保护程序,它模仿了黑客电影中常见的数字滚动效果,营造出一种科技感十足的视觉体验。这款屏幕保护程序在用户未与计算机交互一段时间后,会在屏幕上模拟出随机数字和字符连续下落的效果,...

    C#微软培训资料

    一个一 一个可 可个可 可 以互相交换组件的地方 以互相交换组件的地方以互相交换组件的地方 以互相交换组件的地方 比尔 比尔比尔 比尔.盖茨 盖茨盖茨 盖茨 在本章中你将了解 Microsoft.NET ...

    x-scan-v3.3-cn

    扫描器不一定非要是可执行的exe文件,其他例如perl、CGI脚本语言也可以编写扫描器,因此没有可执行文件的扫描器也许是运行在网络服务器上的,这种扫描器可以被植入到网络上的其它系统中,不需要使用者上网就能够24...

    gitPro pdf版本

    Git是现代软件开发中的一个核心工具,它是一种分布式版本控制系统,最初由Linux之父Linus Torvalds于2005年为了更好地管理Linux内核开发而创建。在当今的IT行业中,掌握Git几乎成为了程序员的必备技能之一。Scott ...

    2021-2022计算机二级等级考试试题及答案No.3662.docx

    11. 表达式`2*x, x+=2`的值取决于具体的计算顺序,这取决于语言的规则,不一定是6。 12. 浏览网页本身并不会导致计算机中毒,但访问恶意网站或点击不安全的链接可能会导致病毒感染。 13. `Enabled`属性用于设置...

    小加壳程序

    尽管它可能无法抵御专业黑客的深度分析,但对于大多数非专业攻击者来说,已经足以构成一定的障碍。随着编程技能的提高,开发者还可以探索更高级的加壳技术和反逆向工程策略,以进一步增强程序的安全性。

    易语言135傻瓜批量溢出器v1.0版

    在网络安全领域,溢出攻击是一种常见的利用程序漏洞进行非法入侵的技术,而这款工具则简化了这一过程,使得非专业人员也能进行一定程度的测试与学习。 首先,我们要理解什么是溢出。在计算机编程中,溢出是指当一个...

    C/C++txt隐藏入BMP源码

    这个技术允许程序员在不改变BMP文件外观的情况下存储额外的数据,比如隐藏文本信息。 描述中提到的"相关文章请在csdn IT1995 C/C++ HackerCode专栏有教程",暗示了这个压缩包可能包含一个教程或者示例代码,用于...

    C++编程从入门到精通

    《C++编程从入门到精通》是一套全面深入学习C++编程语言的资源集合,旨在帮助初学者逐步掌握C++的精髓,同时也适用于有一定基础的程序员进行深化学习。本资源包涵盖C++的基础语法、高级特性以及实际应用,旨在帮助...

Global site tag (gtag.js) - Google Analytics