User Tools

Site Tools


hack:testing_for_web_server_fingerprint

testing_guide

Résumé

La prise d'empreintes d'un serveur Web est une tâche critique pour le testeur. La connaissance de la version et le type d'un serveur web permet aux testeurs de déterminer les vulnérabilités connues et les exploits qu'il convient d'utiliser pendant le test.

Description

Il existe différents fournisseurs et des versions de serveurs Web sur le marché aujourd'hui. Connaître le type de serveur Web que vous testez aide significativement dans le processus de test. Cette information peut être obtenue en envoyant des commandes spécifiques au serveur Web et en analysant la réponse, étant donné que chaque version logiciel de serveur Web peut réagir différemment à ces commandes. En sachant comment chaque type de serveur Web répond à ces commandes spécifiques et en enregistrant cette information dans une base de données d'empreintes des serveurs web, un testeur peut envoyer ces commandes sur le serveur Web, analyser la réponse, et la comparer à la base de données de signatures connues. Notez que cela nécessite habituellement plusieurs commandes différentes pour identifier avec précision le serveur web, car des versions différentes peuvent réagir de manière similaire à la même commande. Rarement, toutefois, les versions différentes réagissent de la même façon à toutes les commandes HTTP. Donc, en envoyant plusieurs commandes différentes, vous augmentez la précision de votre estimation.

Test boîte noire

Analyse de l'en-tête de réponse HTTP

La forme la plus simple et la plus fondamentale de l'identification d'un serveur Web est de regarder le champ Serveur dans l'en-tête de réponse HTTP. Pour nos exemple nous utilisons netcat.

$ 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

Dans le champ Serveur, nous notons que le serveur est susceptible d'être un Apache, version 1.3.3, en tournant sur un système d'exploitation Linux.

Quatre exemples d'entête de réponse HTTP sont présentés ci-dessous.

À partir d'un serveur 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 

A partir d'un serveur 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 

A partir d'un serveur Netscape Enterprise Server 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 

À partir d'un serveur Sun ONE 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

Cependant, cette méthode d'essai n'est pas très fiable. Il existe plusieurs techniques qui permettent à un site Web de masquer ou modifier la chaîne présentée dans la bannière du serveur. Par exemple nous aurions pu obtenir la réponse suivante:

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 

Dans ce cas, le champ Serveur de cette réponse est masqué: on ne peut pas savoir quel type de serveur Web est en cours d'exécution.

Analyse du comportement du protocole :

Techniques plus raffinées qui prend en considération les différentes caractéristiques des plusieurs serveurs web disponibles sur le marché. Nous allons énumérer quelques méthodes qui nous permettent de déduire le type de serveur Web en cours d'utilisation.

La première méthode consiste à observer l'ordre de plusieurs en-têtes. Chaque serveur Web a un ordre interne de l'en-tête. Considérons les réponses suivantes à titre d'exemple:

Réponse de 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 

Réponse de 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 

Réponse de 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 

Réponse de 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

On peut remarquer que l'ordre du champ Date et du champ Serveur diffère entre Apache, Netscape Enterprise et IIS.

Test de demandes mal formées

Un autre test très utile consiste à envoyer des requêtes mal formées ou des demandes de pages inexistantes sur le serveur.

Examinez les réponses HTTP suivants.

Réponse de 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 

Réponse de 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 

Réponse de 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 

Réponse de 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

Tests de protocoles inexistants

Nous remarquons que chaque serveur répond d'une manière différente. La réponse diffère également dans la version du serveur. Des observations similaires peuvent être faites en utilisant un protocole inexistant.

Examinez les réponses suivantes:

Réponse de 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 

Réponse de 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 

Réponse de 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>

Réponse de 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>

Test Automatisé

Les tests à effectuer afin de bien prendre les empreintes d'un serveur web peuvent être nombreux. Heureusement, il existe des outils qui permettent d'automatiser ces tests. “Httprint” est l'un de ces outils. httprint a un dictionnaire signature qui permet de reconnaître le type et la version du serveur Web en cours d'utilisation. Un exemple d'exécution httprint est indiqué ci-dessous:

Test en ligne

Un exemple d'outil en ligne qui offre souvent un grand nombre d'informations sur le serveur Web cible, est Netcraft. Avec cet outil, nous pouvons récupérer des informations sur le système d'exploitation, le serveur Web utilisé, le serveur Uptime, le netblock Propriétaire, l'histoire du changement lié au serveur Web et à l'OS

Un exemple est montré ci-dessous:

Test Boîte grise

Références

Livres blancs

Outils

hack/testing_for_web_server_fingerprint.txt · Last modified: 2019/02/13 13:10 by 127.0.0.1