详细介绍如何测试目标地址上运行了哪些应用程序,以及如何通过错误信息提前有用消息的具体方法。
识别应用程序
测试Web应用程序漏洞时,最重要的一步就是要弄清楚Web服务器上托管了哪些应用程序。许多应用程序都有已知的漏洞和攻击方法,籍此可以获得远距控制权或获得机密数据。 此外,许多应用程序经常出现配置错误,或者长期不更新,因为有些人总觉得它们是在“内部”使用的,所以就掉以轻心了。
过去,Web服务器和IP地址的关系通常是一比一的,但是随着虚拟Web服务器的快速增长,许多网站/应用程序都共享同一个IP地址。
作为安全专业人员,有时候为测试一个目标服务器需要处理一组IP地址。问题是,若给定的IP地址实在80端口托管了一个HTTP服务的话,那么当您通过规定IP地址来访问该服务时,它会报告该地址没有配置Web服务器之类的消息。实际上,系统可能“隐藏”了许多Web应用程序,只是它们被赋予了一些无关的符号名称而已。显然,分析的广度受被测应用程序的影响较大,您可能没有注意到它们,或者只注意到了其中的一部分。有时候,需要测试的目标对象很多,如一列IP地址和它们对应的符号名称。虽然如此,这个列表可能仅仅传递了部分信息,即它可能遗漏了一些符号名称——因为即使客户也不知道它们,尤其是对于那些大型组织。
影响审计范围的其他问题是非显式、没有从任何地方引用它们的URL(例如http://www.example.com/some-strange-URL)公布的Web应用程序。这可能是由于错误配置所致,也可能是故意所为,比如,非公开的管理接口。为了解决这个问题,需要进行web应用程序探测。
下面介绍黑盒子测试及实例。Web应用程序探测是一个寻找给定基础设施上的Web应用程序的过程。这些基础设施通常是用一组IP地址来规定的,或者也可以使用一组DNS符号名称给出,或者两者兼而有之。无论是典型的渗透测试或者以应用程序为中心的评估测试,这些信息都需要在实际进行审计之前给出。除非聘用合同另文专述(例如 “仅仅针对地址为http://www.example.com/上的应用程序进行测试”),否则审计应当尽量展开,,那就是说它应该找出通过给定目标可访问的所有的应用程序。在下面的例子中,我们将研究一些可以实现上述目标的技术。
注意:后面介绍的一些技术适用于面向Internet的Web服务器、DNS和基于Web的反向IP解析服务和搜索引擎。在示例中,我们使用私人IP地址(诸如192.168.1.100)表示通用IP地址。
有三个因素影响到与一个给定DNS名称(或者一个IP地址)有关的应用程序的数量:
1. 不同的基URL
对于一个Web应用程序来说,一个显而易见的入口点就是http://www.example.com/,但是并不是强制要求Web应用程序必须从“/”开始,比如,相同的符号名称可以赋给三个不同的Web应用程序:http://www.example.com/url1、http://www.example.com/url2和http://www.example.com/url3。在这个例子中,http://www.example.com/这个URL没有联系到一个具体的应用程序;此外,除非我们明确了解如何找到它们,即我们知道url1、url2、url3,否则这三个应用程序就是“隐身的”。但是,通常情况下我们无需通过这种隐身方式公布Web应用程序,除非您不想以标准方式供人们访问,而是秘密通知您的用户这些应用程序的具体位置。尽管如此,这并不意味着这些应用程序就是隐蔽的的,只不过没有公布它们的位置而已,实际上它们仍然在那里。
2. 非标准的端口
虽然Web应用程序通常位于80端口(http)和443(https),但是Web应用程序可以绑定到任意TCP端口,并通过指定端口号来引用它们,如http[s]://www.example.com:port/。比如,For example, http://www.example.com:20000/。
3. 虚拟主机
DNS允许我们把单个IP地址映射到一个或多个符号名称上,比如,IP地址192.168.1.100可以映射到下列DNS名称:names www.example.com、helpdesk.example.com和 webmail.example.com。虚拟主机通常采用这种一对多的方式提供不同的内容。规定我们正在引用的虚拟主机的信息将被嵌入到HTTP 1.1的Host:头部中。
除非我们知道了helpdesk.example.com和webmail.example.com,否则我们不会怀疑还有其他Web应用程序。