2.1.3 高级HTTP指纹识别

过去,知道了Web服务器的类型和型号通常足以提交到Google或Bugtraq,看看是否有相关的利用手段(我们将在第3章更深入地讨论这一过程)。但是,随着安全意识的增强,新产品和新技术现在已经能够阻止服务器信息的显示或者报告虚假的信息以摆脱攻击者。

唉,信息安全是一个永不休止的军备竞赛,更高级的标志获取技术已经出现,能够确定真正运行的Web服务器。我们喜欢将针对HTTP的标志获取称为Web服务器指纹识别(Fingerprinting),因为它不再只是简单地关注首部值,而且观察各种服务器中每个Web服务器的总体表现及其响应的独特性。例如,IIS服务器对无效的HTTP请求的响应可能不同于Apache Web服务器。这是确定实际运行的Web服务器类型和型号的好方法,也是学习Web服务器之间细微差别的重要之处。有许多对Web服务器进行指纹识别的方法,实际上指纹识别本身是一种艺术。我们接下来将讨论一些基本的指纹识别技术。

意外的HTTP方法

Web服务器之间最显著的不同之一是对不同类型的HTTP请求的响应方式。而且,越不寻常的请求,Web服务器软件越有可能做出不同的响应。在下面的示例中,我们发送一个PUT请求来代替典型的GET或者HEAD,这里仍然使用netcat。PUT请求没有数据。注意,即使我们发送相同的无效请求,每个服务器的反应也不同。这使我们能够确定实际使用哪个Web服务器,即使系统管理员改变了服务器返回的标志。不同的区域在示例中以粗体标出:

服务器首部异常

仔细观察不同服务器响应中的HTTP首部,你可以确定细微的不同。例如,有时候这些首部的排序不同,或者一种服务器比另一种服务器有更多的首部。

这些变化能够指出Web服务器的类型和型号。例如,在Apache 2.x中,Date:首部在最前面,在Server:首部之上,如下面的粗体文本所示:


HTTP/1.1 200 OK
Date: Mon, 22 Aug 2005 20:22:16 GMT
Server: Apache/2.0.54
Last-Modified: Wed, 10 Aug 2005 04:05:47 GMT
ETag: "20095-2de2-3fdf365353cc0"
Accept-Ranges: bytes
Content-Length: 11746
Cache-Control: max-age=86400
Expires: Tue, 23 Aug 2005 20:22:16 GMT
Connection: close
Content-Type: text/html; charset=ISO-8859-1

在IIS 5.1中,Server:首部在最前面,Date:首部之上,这与Apache 2.0相反:


HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Mon, 22 Aug 2005 20:24:07 GMT
X-Powered-By: ASP.NET
Connection: Keep-Alive
Content-Length: 6278
Content-Type: text/html
Cache-control: private

在Sun One上,Server:和Date:首部的顺序与IIS 5.1相同,但是请注意,Content-length:首部中,“length”是小写。Content-type:也一样,而IIS 5.1中,这些首部都以大写开头:


HTTP/1.1 200 OK
Server: Sun-ONE-Web-Server/6.1
Date: Mon, 22 Aug 2005 20:23:36 GMT
Content-length: 2628
Content-type: text/html
Last-modified: Tue, 01 Apr 2003 20:47:57 GMT
Accept-ranges: bytes
Connection: close

在IIS 6.0上,Server:和Date:首部的顺序与Apache 2.0相同,但是在它们前面还有Connection:首部:


HTTP/1.1 200 OK
Connection: close
Date: Mon, 22 Aug 2005 20:39:23 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 23756

Httprint工具

我们已经介绍了多种HTTP服务器指纹识别技术,与其手工实施这些技术,不如使用Net-Square的Httprint工具(链接参见本章结尾处的“参考与延伸阅读”)。Httprint实施大部分这些技术(例如检查HTTP首部顺序),以便避开大部分混淆技术。它还带有一个可定制的Web服务器特征码数据库。图2-1中显示了Httprint对一些Web服务器进行指纹识别。

图2-1 Httprint工具和结果

SHODAN

SHODAN是一个搜索引擎,搜索的对象是能够对信息安全产生影响的计算机(路由、服务器等)。它从2009年12月开始启用,组合了一个HTTP端口扫描程序和一个HTTP响应的搜索引擎索引,使查找特定的Web服务器变得很容易。这样,SHODAN通过使简单的标志获取自动化并且可搜索而大大提高了有效性。互联网的大部分区域都已经为SHODAN索引,建立了与安全有关的一些有趣的场景。例如,你可以简单地识别:

·.gov域中的所有IIS服务器

·瑞士的所有Apache服务器

·所有具有特定Web服务器平台已知漏洞的系统的IP地址

图2-2展示了SHODAN的潜力。希望这些示例也能展现SHODAN可能的后果。如果说总是有理由避免显示Web服务器敏感信息的标志,那么这就是理由!

图2-2 SHODAN查找美国所有运行Windows 2000的服务器