渗透测试步骤

运行Nikto时可以参考以下几点。

(1)如果认为服务器将Nikto检查的内容保存在一个非标准位置(如/cgi/cgi-bin而非/cgi-bin),可以使用-root/cgi/选项指定这个位置。在使用CGI目录的特殊情况下,还可通过-Cgidirs选项指定保存位置。

(2)如果站点使用不返回HTTP404状态码的file not found定制页面,可以指定一个特殊字符串,使用-404选项标识这个页面。

(3)注意,Nikto并不对潜在的问题执行任何智能核实。因此,它往往会做出错误诊断。请手动核实由Nikto返回的任何结果。

需要注意,在使用Nikto之类的工具时,可以使用域名或IP地址来指定目标应用程序。如果某工具使用IP地址来访问一个页面,则此工具会将该页面上使用域名的链接视为属于不同的域,因而不会访问这些链接。这样做是有道理的,因为一些应用程序属于虚拟托管应用程序,有多个域名共享同一个IP地址。因此,在配置相关工具时,请记住上述事实。

4.1.4 应用程序页面与功能路径

迄今为止,我们讨论的枚举技巧实际上由如何概念化和分类Web应用程序内容这种特殊的动机暗中推动。这种动机源自于Web应用程序出现之前的万维网时代,当时的Web服务器是静态信息仓库,人们使用实际为文件名的URL获取这类信息。要公布Web内容,只需简单生成一批HTML文件并将其复制到Web服务器上的相应目录即可。当用户单击超链接时,他们浏览由公布者创建的文件,通过服务器上目录树中的文件名请求每个文件。

虽然Web应用程序的急速演变从根本上改变了用户与Web交互的体验,但上述动机仍然适用于绝大多数的Web应用程序内容和功能。各种功能一般通过不同的URL访问,后者通常是执行该项功能的服务器端脚本的名称。请求参数(位于URL查询字符串或POST请求主体中)并不告知应用程序执行何种功能,而是告知应用程序在执行功能时使用哪些信息。有鉴于此,建立基于URL的解析方法可对应用程序的功能进行有效分类。

在使用REST风格的URL的应用程序中,URL文件路径的某些部分包含实际上用做参数值的字符串。在这种情况下,通过解析URL,爬虫能够解析应用程序功能和这些功能的已知参数值列表。

但是,在某些应用程序中,基于应用程序“页面”的动机并不适用。尽管从理论上说,我们可以将任何应用程序结构强制插入这种形式的表述中。但是,在许多情况下,另外一种基于功能路径的动机可以更加有效地分类其内容与功能。以仅使用以下请求访问的应用程序为例:

img90

这里的每个请求对应唯一一个URL。请求参数指定Java servlet和需要调用的方法,告诉应用程序执行何种功能。其他参数提供执行该项功能所需的信息。在基于应用程序页面的动机中,应用程序明显只有一种功能,且基于URL的解析不会解释它的功能。但是,如果我们根据功能路径解析应用程序,就能更加清楚地了解应用程序的有用功能。图4-10是应用程序功能路径图的一部分。

img91

图4-10 Web应用程序功能路径图

即使在应用基于应用程序页面的常规图不存在任何问题的情况下,以这种方式描述应用程序的功能通常更加有用。在URL使用的目录结构中,不同功能之间的逻辑与依赖关系无法一一对应起来。但是,无论是对于了解应用程序的核心功能,还是制订可能的攻击方案,这些逻辑关系对攻击者而言都非常有用。确定这些逻辑关系后,攻击者就能够全面了解应用程序开发人员在执行功能时的期待和假设,并设法找到违背这些假设、在应用程序中造成无法预料的行为的方法。

在使用请求参数而非URL确定功能的应用程序中,这种方法对于枚举应用程序的功能会有所帮助。在前面的示例中,使用前面讨论的内容查找技巧目前还不可能发现任何隐藏的内容。那些技巧需要根据应用程序访问功能时实际使用的机制修改。