JSP漏洞大观(三)__教程 |
|
日期:2007-5-20 1:20:58 人气:76 [大 中 小] |
|
|
|
WebLogic 依赖四个主要 Java Servlets to 服务不同类型的文件。这些 servlets 是:
1)FileServlet - for 简单 HTML 页面 2)SSIServlet - for Server Side Includes 页面 3)PageCompileServlet - for JHTML 页面 4)JSPServlet - for Java Server 页面
看着weblogic.properties 文件, 这儿是各个 servlets 的注册值:
1)weblogic.httpd.register.file=weblogic.servlet.FileServlet 2)weblogic.httpd.register.*.shtml=weblogic.servlet.ServerSideIncludeServlet 3)weblogic.httpd.register.*.jhtml=weblogic.servlet.jhtmlc.PageCompileServlet 4)weblogic.httpd.register.*.jsp=weblogic.servlet.JSPServlet 更多的 weblogic.properties 文件, 如果一个请求文件是没有注册管理的,那么就会调用一个默认的 servlet 。以下是展示默认的 servlet 是如何注册的。
# Default servlet registration # ------------------------------------------------ # Virtual name of the default servlet if no matching servlet # is found weblogic.httpd.defaultServlet=file
因此如果 URL 中的文件路径开头为 "/file/" , 将会引致 WebLogic 调用默认的 servlet, 那将会使网页未加分析和编译而直接显示。
论证:
只要在想看的文件原来的 URL 路径之前加入 "/file/" 就会让文件未经分析和编译,直接暴露源代码。如:http://site.running.weblogic/login.jsp ,那么只要访问 http://site.running.weblogic/file/login.jsp 就会在 WEB 浏览器里看到文件的内容。
以下是使用方法:
1. 通过强制使用 SSIServlet 查看未分析的页面 : 服务器站点通过 WebLogic 中的 SSIServlet 处理页面,它在weblogic.properties 文件中注册以下信息:weblogic.httpd.register.*.shtml= weblogic.servlet.ServerSideIncludeServlet
通过 URL 使用 SSIServlet 自动处理通配符 (*) 。因此 如果文件路径开头为 /*.shtml/,将强制文件由 SSIServlet 处理。如果使用其它文件类型如 .jsp 和 .jhtml, 就能查看未分析的 jsp 和 jhtml 代码。举例:http://www.xxx.com/*.shtml/login.jsp
2. 通过强制使用 FileServlet 查看未分析的页面 : WebLogic 使用 FileServlet 配置 ConsoleHelp servlet ,在weblogic.properties 文件的以下内容可得知:
# For Console help. Do not modify. weblogic.httpd.register.ConsoleHelp= weblogic.servlet.FileServlet weblogic.httpd.initArgs.ConsoleHelp=defaultFilename=/weblogic/admin/help/NoContent.html weblogic.allow.execute.weblogic.servlet.ConsoleHelp=everyone
因此如果文件路径以 /ConsoleHelp/ 开头将导致 WebLogic 使用 FileServlet,使未分析或编译的文件作页面显示出来,举例:http://www.xxx.com/ConsoleHelp/login.jsp
解决方案: 不要使用示例中的设置方法设置 FileServlet 。这可能会让你的 JSP/JHTML 文件的源代码暴露出来。请查看在线文档: http://www.weblogic.com/docs51/admindocs/http.html#file
示例的 registrations 如下: weblogic.httpd.register.file=weblogic.servlet.FileServlet weblogic.httpd.initArgs.file=defaultFilename=index.html weblogic.httpd.defaultServlet=file
有两种方法可以避免这个问题:
(1)注册那些文件 servlet 使用随机用户名,加大猜测难度。例如使用象这样注册文件 servlet 为 12foo34: weblogic.httpd.register.12foo34=weblogic.servlet.FileServlet weblogic.httpd.initArgs.12foo34=defaultFilename=index.html weblogic.httpd.defaultServlet=12foo34
(2)注册文件 servlet 使用 wild cards 声明你将使用所有这些文件扩展名作服务。举例注册文件 servlet 为 .html 文件服务: weblogic.httpd.register.*.html=weblogic.servlet.FileServlet weblogic.httpd.initArgs.*.html=defaultFilename=index.html weblogic.httpd.defaultServlet=*.html |
|
出处:本站原创 作者:佚名 |
|
|