Web滲透——web服務器指紋識別


1、概述

Web服務器指紋識別是滲透測試人員非常重要的一個任務。了解正在運行的web服務器類型和版本能讓測試者更好去測試已知漏洞和大概的利用方法。

目前市場上存在幾種不同的web服務器提供商和軟件版本,了解被測試的web服務器 的類型,將會在滲透測試過程中有很大的幫助,甚至會改變測試的路線。

你可以通過發送web服務器特定的命令並分析輸出結果來得到這些信息,因為不同版本的web服務器軟件可能對這些命令有着不同的響應。通過掌握不同服務器對於不同命令的響應,並把這些信息保存在web服務器的指紋數據庫中,滲透測試人員可以向web服務器發送這些命令,分析響應並與數據庫中的已知簽名相匹配。請注意,由於不同版本的服務器對於同一個請求可能有同樣的響應,所以可能需要多個命令請求才能准確識別web服務器。

2、測試目標

發現正在運行的web服務器的版本和類型,確定其已知漏洞,並選擇合適的漏洞利用代碼,以備在測試期間使用

3、如何測試

黑盒測試

最簡單也是最基本的方法來鑒別web服務器就是查看HTTP響應頭中的"Server"字段。 下面實驗中我們使用Netcat

考慮如下HTTP請求響應:

$ nc 202.41.76.251 80

HEAD / HTTP/1.0

HTTP/1.1 200 OK

Date: Mon, 16 Jun 2003 02:53:29 GMT

Server: Apache/1.3.3 (Unix) (Red Hat/Linux)

Last-Modified: Wed, 07 Oct 1998 11:18:14 GMT

ETag: "1813-49b-361b4df6"

Accept-Ranges: bytes

Content-Length: 1179

Connection: close

Content-Type: text/html 

 

從Server字段,我們可以發現服務器可能是Apache,版本1.3.3,運行在Linux系統上。

下面展示了4個不同的HTTP響應頭示例:

1、Apache 1.3.23 服務器:

HTTP/1.1 200 OK
Date: Sun, 15 Jun 2003 17:10: 49 GMT

Server: Apache/1.3.23

Last-Modified: Thu, 27 Feb 2003 03:48: 19 GMT

ETag: 32417-c4-3e5d8a83

Accept-Ranges: bytes

Content-Length: 196

Connection: close

Content-Type: text/HTML

 

2、Microsoft IIS 5.0 服務器:

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0

Expires: Yours, 17 Jun 2003 01:41: 33 GMT

Date: Mon, 16 Jun 2003 01:41: 33 GMT

Content-Type: text/HTML

Accept-Ranges: bytes

Last-Modified: Wed, 28 May 2003 15:32: 21 GMT 

ETag: b0aac0542e25c31: 89d

Content-Length: 7369

 

3、Netscape Enterprise 4.1 服務器:

HTTP/1.1 200 OK
Server: Netscape-Enterprise/4.1

Date: Mon, 16 Jun 2003 06:19: 04 GMT

Content-type: text/HTML

Last-modified: Wed, 31 Jul 2002 15:37: 56 GMT

Content-length: 57

Accept-ranges: bytes

Connection: close 

 

4、SunONE 6.1 服務器:

HTTP/1.1 200 OK
Server: Sun-ONE-Web-Server/6.1

Date: Tue, 16 Jan 2007 14:53:45 GMT

Content-length: 1186

Content-type: text/html

Date: Tue, 16 Jan 2007 14:50:31 GMT

Last-Modified: Wed, 10 Jan 2007 09:58:26 GMT

Accept-Ranges: bytes

Connection: close

 

但是,這種測試方法並不是很精確。因為存在多種方法可以讓網站模糊或修改服務器旗幟字符串。例如我們可能得到如下結果:

403 HTTP/1.1 Forbidden
Date: Mon, 16 Jun 2003 02:41: 27 GMT

Server: Unknown-Webserver/1.0

Connection: close

Content-Type: text/HTML; charset=iso-8859-1 

 

在這個例子中,Server字段已經被混淆,測試者並不能從中得到服務器的信息。

協議行為

更好的方法是從web服務器的不同特征上入手。下面是一些常見web服務典型響應頭:

1、HTTP頭字段順序

第一個方法通過觀察響應頭的組織順序。每個服務器都有一個內部的HTTP頭排序方法,考慮如下例子:

Apache 1.3.23 響應

$ nc apache.example.com 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK

Date: Sun, 15 Jun 2003 17:10: 49 GMT

Server: Apache/1.3.23

Last-Modified: Thu, 27 Feb 2003 03:48: 19 GMT

ETag: 32417-c4-3e5d8a83

Accept-Ranges: bytes

Content-Length: 196

Connection: close

Content-Type: text/HTML 

 

2、IIS 5.0 響應

$ nc iis.example.com 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK

Server: Microsoft-IIS/5.0

Content-Location: http://iis.example.com/Default.htm

Date: Fri, 01 Jan 1999 20:13: 52 GMT

Content-Type: text/HTML

Accept-Ranges: bytes

Last-Modified: Fri, 01 Jan 1999 20:13: 52 GMT

ETag: W/e0d362a4c335be1: ae1

Content-Length: 133 

 

3、Netscape Enterprise 4.1 響應

$ nc netscape.example.com 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK

Server: Netscape-Enterprise/4.1

Date: Mon, 16 Jun 2003 06:01: 40 GMT

Content-type: text/HTML

Last-modified: Wed, 31 Jul 2002 15:37: 56 GMT

Content-length: 57

Accept-ranges: bytes

Connection: close 

 

4、SunONE 6.1 響應

$ nc sunone.example.com 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK

Server: Sun-ONE-Web-Server/6.1

Date: Tue, 16 Jan 2007 15:23:37 GMT

Content-length: 0

Content-type: text/html

Date: Tue, 16 Jan 2007 15:20:26 GMT

Last-Modified: Wed, 10 Jan 2007 09:58:26 GMT

Connection: close

 

我們注意到Date和Server字段在Apache、Netscape Enterprise和IIS中是有所區別的。

畸形的請求測試

另一個有用測試是發送畸形的請求或者不存在的頁面請求,考慮如下HTTP響應:

1、Apache 1.3.23

$ nc apache.example.com 80
GET / HTTP/3.0

HTTP/1.1 400 Bad Request

Date: Sun, 15 Jun 2003 17:12: 37 GMT

Server: Apache/1.3.23

Connection: close

Transfer: chunked

Content-Type: text/HTML; charset=iso-8859-1

 

2、IIS 5.0

$ nc iis.example.com 80
GET / HTTP/3.0

HTTP/1.1 200 OK

Server: Microsoft-IIS/5.0

Content-Location: http://iis.example.com/Default.htm

Date: Fri, 01 Jan 1999 20:14: 02 GMT

Content-Type: text/HTML

Accept-Ranges: bytes

Last-Modified: Fri, 01 Jan 1999 20:14: 02 GMT

ETag: W/e0d362a4c335be1: ae1

Content-Length: 133 

 

3、Netscape Enterprise 4.1

$ nc netscape.example.com 80
GET / HTTP/3.0

HTTP/1.1 505 HTTP Version Not Supported

Server: Netscape-Enterprise/4.1

Date: Mon, 16 Jun 2003 06:04: 04 GMT

Content-length: 140

Content-type: text/HTML

Connection: close

 

4、SunONE 6.1

$ nc sunone.example.com 80
GET / HTTP/3.0

HTTP/1.1 400 Bad request

Server: Sun-ONE-Web-Server/6.1

Date: Tue, 16 Jan 2007 15:25:00 GMT

Content-length: 0

Content-type: text/html

Connection: close

 

我們發現每個服務器都有不同的方式響應請求,而且不同版本也有所不同響應。類似的結果也能通過構造不存在的HTTP方法/謂詞來獲得。考慮如下例子:

1、Apache 1.3.23

$ nc apache.example.com 80
GET / JUNK/1.0

HTTP/1.1 200 OK

Date: Sun, 15 Jun 2003 17:17: 47 GMT

Server: Apache/1.3.23

Last-Modified: Thu, 27 Feb 2003 03:48: 19 GMT

ETag: 32417-c4-3e5d8a83

Accept-Ranges: bytes

Content-Length: 196

Connection: close

Content-Type: text/HTML

2、IIS 5.0

$ nc iis.example.com 80
GET / JUNK/1.0

HTTP/1.1 400 Bad Request

Server: Microsoft-IIS/5.0

Date: Fri, 01 Jan 1999 20:14: 34 GMT

Content-Type: text/HTML

Content-Length: 87

 

3、Netscape Enterprise 4.1

$ nc netscape.example.com 80
GET / JUNK/1.0

<HTML><HEAD><TITLE>Bad request</TITLE></HEAD>

<BODY><H1>Bad request</H1>

Your browser sent to query this server could not understand.

</BODY></HTML> 

 

4、SunONE 6.1

$ nc sunone.example.com 80
GET / JUNK/1.0

<HTML><HEAD><TITLE>Bad request</TITLE></HEAD>

<BODY><H1>Bad request</H1>

Your browser sent a query this server could not understand.

</BODY></HTML>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM