jsp安全帽:jsp安全问题及其解决建议

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

  但是随的而来就是系列安全漏洞问题如源代码暴露漏洞、远程任意命令执行漏洞等等更为头疼随着jsp 越来越广泛应用安全问题也越来越多了截止到这篇文章为止Internet上公开有关jsp 漏洞问题就多达 2、 3十条(还不包括未公开)(统计数据来源于http://www.securityfocus.com)

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

  本篇文章重点在于对jsp安全问题进行分类阐述和提出解决建议所以每种类型安全问题只采用了个例子对于其它各种漏洞具体细节如涉及到何种软件Software版本何种操作系统等就不进行阐述了有兴趣读者可以到我网站WebSitejsp 爱好者(http://jspbbs.yeah.net)或者国外安全站点(http://www.securityfocus.com)进行查看和参考

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

、源代码暴露类

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

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

  1、添加特殊后缀引起jsp源代码暴露

  在jsp中也存在着和asp这些漏洞类似问题如IBM Websphere Application Server 3.0.21、BEA s 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等等试试看你会发现浏览器会提示你下载这个文件下载后源代码可以看个干 2净

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

  解决办法:是在服务器软件Software网站WebSite上下载补丁;笔者以前用过asp 段时间接触了很多IIS漏洞有效解决思路方法是去掉不必要映射如htr、htx等在jsp 中我们同样可以参考IIS解决思路方法区别是不是去掉而是添加映射思路方法为在服务器设置中添加些映射如.JSP 、.Jsp、.jsp%2E等将他们映射到个自己写servlet这个Servlet功能就是将请求导向个自定义类似404 not found出错页面区别服务器设置地方也区别请参考相应文档第 2种解决思路方法可以在没有补丁时候采用

  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 会被这个请求文件会未被分析或编译就显示出来

  解决思路方法:在服务器软件Software网站WebSite下载最新补丁

  3、路径权限引起文件jsp源代码暴露

  这种漏洞在正常jsp漏洞中没有反映出来但是笔者在写jsp中曾经碰到过头疼了阵子最后总算解决了我们知道大部分jsp应用在当前目录下都会有个WEB-INF目录这个目录通常存放是JavaBeans编译后 文件如果不给这个目录设置正常权限所有就会曝光

  例子:笔者当时采用是Apache1.3.12加上第 3方jsp软件Software形式WEB服务器Apache1.3.12默认设置是可以读取目录如果在http://site.running.websphere/login.jsp只要修改下http://site.running.websphere/WEB-INF/所有这个目录下以及这个目录下子目录中文件可以看个干 2净还可以下载到本机上

  也许你会说是经过编译就算被人下载也没有什么关系但是现在 反编译为java代码软件Software也很多笔者当时采用JAD软件Software对下载文件反编译了居然和原始java文件几乎变量名都没有变更惊奇是还可以重新编译为文件正常使用

  安全问题更大就是笔者开始把数据库用户名密码都写在了java代码中现在反编译谁都能看到数据库重要信息通过数据库远程连接功能可以轻松进入到你数据库中所有信息全部在他手中附带说如果用户能获得SQL Server用户名口令(sa )进入数据库中可以执行任意dos命令如查看c:\文件、建立和删除目录等那样整个Windows系统都不安全了(此种思路方法危害性更大恕作者不公布出来)

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

  解决思路方法:IIS以前个有效地解决asp漏洞就是将asp单独放置个目录目录设置上用户权限只能执行不能读取在jsp环境下同样可以通过设置服务器环境来解决这个问题简单说就是将些比较重要目录如WEB-INF、es等设置上访问权限不允许读而取只允许执行以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绝对硬盘地址和其他漏洞结合就具有比较大危害了这个漏洞目前还没有在国外安全网站WebSite上看到而站长也没有测试过所有jsp服务器所以没有办法告诉大家那些有这个漏洞了大家可以在自己web服务器上测试看看

  例子:在特定服务器软件Software下访问个不存在jsp文件如 http://localhost:8080/fdasfas.jsp就会返回java.servlet.ServletEception: java.io.FileNotFoundEception: c:\web\app\fadssad.jsp (???????????)这样这样就可以知道你网站WebSite在c:\web\app目录下也许般人不太在意但是对于个黑客来说就是很有帮助了

  原因:负责jsp 执行相关Servlet中处理异常时候没有过滤掉这种情况

  解决思路方法:是下载最新补丁;由于笔者当时web 服务器软件Software没有这个补丁经过段时间痛苦煎熬后总算找到了另外种思路方法就是找到服务器软件Softwarejsp 执行映射Servlet文件(当然是 后缀)将它用JAD软件Software反编译在反编译后源代码中找到处理Eception思路方法然后将思路方法中处理部分全部注释掉并将请求导向到个自定义出错页面中这样问题就解决了


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

  这类漏洞特点就是可以通过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 服务器上根目录以外文件目标主机上利用该漏洞请求用户输入产生个文件将严重威胁到目标主机系统安全

  解决思路方法:安装最新补丁

3、其他类别

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

4、全文整理总结

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

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

  最后想用句话作为全文结尾:个优秀黑客不定是个好jsp 个优秀jsp定要是个好准黑客



  • 篇文章: 基于ICMP木马编写

  • 篇文章: 获取Windows 系统内核变量
  • Tags:  jsp线程安全 jsp乱码解决 jsp安全 jsp安全帽

    延伸阅读

    最新评论

    发表评论