Introduction
Nikto est un scanner de serveurs web open-source populaire qui effectue des tests complets sur les serveurs web pour plusieurs éléments, notamment plus de 6700 fichiers/programmes potentiellement dangereux, des vérifications de versions obsolètes pour plus de 1250 serveurs, et des problèmes spécifiques à la version sur plus de 270 serveurs.
Une configuration courante de serveur web est l'hébergement virtuel (virtual hosting), où un seul serveur avec une adresse IP unique héberge plusieurs sites web (par exemple, site1.example.com et site2.example.com). Lorsque vous scannez directement l'adresse IP du serveur, un scanner comme Nikto pourrait uniquement tester le site web par défaut configuré sur le serveur, manquant ainsi complètement les autres sites.
Dans ce laboratoire, vous apprendrez à utiliser l'option -vhost de Nikto pour cibler spécifiquement l'un des hôtes virtuels sur le serveur, garantissant ainsi que votre scan est précis et ciblé.
Identifier un serveur hébergeant plusieurs sites web sur une seule IP
Dans cette étape, vous allez vérifier que le serveur web de notre environnement héberge deux sites web différents sur la même adresse IP (127.0.0.1). Nous pouvons le faire en envoyant des requêtes HTTP avec différents en-têtes Host en utilisant la commande curl. L'en-tête Host indique au serveur web quel site web le client souhaite consulter.
Tout d'abord, envoyons une requête à site1.labex.io. L'option --header "Host: site1.labex.io" indique à curl d'envoyer l'en-tête d'hôte spécifié.
curl --header "Host: site1.labex.io" http://127.0.0.1
Vous devriez voir le contenu HTML du premier site :
<html><body><h1>Welcome to Site 1</h1></body></html>
Ensuite, envoyons une requête à site2.labex.io en modifiant l'en-tête Host.
curl --header "Host: site2.labex.io" http://127.0.0.1
Cette fois, vous verrez le contenu du deuxième site :
<html><body><h1>This is Site 2</h1><p>This site has a test.txt file.</p></body></html>
Cela confirme que notre serveur à l'adresse 127.0.0.1 sert un contenu différent en fonction du nom d'hôte, ce qui correspond à la définition de l'hébergement virtuel (virtual hosting).
Trouver le nom d'hôte de l'hôte virtuel cible spécifique
Dans cette étape, nous allons confirmer les noms d'hôtes configurés pour notre serveur local. Dans un scénario réel, vous utiliseriez des techniques de reconnaissance comme l'énumération DNS ou l'analyse de certificats SSL pour trouver des hôtes virtuels. Pour ce laboratoire, les noms d'hôtes ont été pré-configurés dans le fichier /etc/hosts. Ce fichier est utilisé par le système d'exploitation pour mapper les noms d'hôtes aux adresses IP.
Examinons le contenu du fichier /etc/hosts en utilisant la commande cat pour voir les correspondances.
cat /etc/hosts
La sortie affichera les correspondances standard pour localhost, ainsi que les deux entrées personnalisées que nous avons ajoutées pour nos hôtes virtuels :
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 site1.labex.io
127.0.0.1 site2.labex.io
À partir de cette sortie, nous pouvons confirmer que site1.labex.io et site2.labex.io sont les noms d'hôtes que nous pouvons utiliser pour notre scan ciblé. Nous ciblerons site2.labex.io dans les étapes suivantes.
Utiliser l'option -vhost pour spécifier le nom d'hôte cible
Dans cette étape, vous découvrirez l'option Nikto utilisée pour scanner un hôte virtuel spécifique. Par défaut, nikto -h 127.0.0.1 scannerait le premier hôte virtuel configuré (site1.labex.io). Pour indiquer à Nikto de scanner un hôte virtuel différent, nous devons utiliser l'option -vhost (ou -host+).
Cette option demande à Nikto d'utiliser le nom d'hôte fourni dans l'en-tête Host de toutes ses requêtes HTTP, garantissant ainsi que le serveur web achemine les requêtes vers le bon site web.
La syntaxe est : nikto -h <ADRESSE_IP> -vhost <NOM_HOTE>
Effectuons un test rapide sans lancer de scan complet. Nous pouvons utiliser l'option -Display V pour afficher la sortie détaillée, qui nous montrera la configuration effective du scan. Nous ciblerons site2.labex.io.
nikto -h 127.0.0.1 -vhost site2.labex.io -Display V
La sortie affichera des détails sur la configuration du scan. Recherchez la valeur de l'en-tête Host pour confirmer qu'elle est correctement définie.
...
---------------------------------------------------------------------------
- Nikto 2.x
---------------------------------------------------------------------------
...
- Scan Options:
...
Host -> 127.0.0.1
...
VHost -> site2.labex.io
...
- Headers:
...
Host: site2.labex.io
...
---------------------------------------------------------------------------
+ 1 hôte(s) à tester
La sortie montre clairement que Nikto utilisera Host: site2.labex.io dans ses requêtes, ce qui est exactement ce que nous voulons.
Exécuter le scan contre l'IP du serveur avec le drapeau vhost
Maintenant que vous comprenez le fonctionnement de l'option -vhost, il est temps d'exécuter le scan complet contre notre hôte virtuel cible, site2.labex.io.
Exécutez la commande suivante dans votre terminal. Le scan prendra quelques instants pour se terminer, car Nikto effectue ses différents tests.
nikto -h 127.0.0.1 -vhost site2.labex.io
Après le démarrage du scan, vous verrez une sortie similaire à celle ci-dessous. Notez que la sortie indique que l'Target Host est site2.labex.io, confirmant que nous scannons le bon hôte virtuel.
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: site2.labex.io
+ Target Port: 80
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ No CGI directories found (use '-C all' to force check all possible dirs)
+ /test.txt: A text file was found.
+ 7 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time: ...
+ 1 host(s) tested
Remarquez la ligne + /test.txt: A text file was found.. Ce fichier n'existe que sur site2.labex.io, ce qui confirme davantage que notre scan a été correctement ciblé.
Confirmer que les résultats sont spécifiques à l'hôte virtuel ciblé
Dans cette dernière étape, nous allons effectuer un autre scan, mais cette fois sans l'option -vhost, pour démontrer la différence dans les résultats. Cela prouvera que l'option -vhost est essentielle pour scanner avec précision un site spécifique dans un environnement d'hébergement virtuel.
Exécutez un scan Nikto standard contre l'adresse IP du serveur :
nikto -h 127.0.0.1
Observez la sortie de ce nouveau scan.
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 80
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
...
(autres découvertes)
...
+ End Time: ...
+ 1 host(s) tested
Comparez cette sortie au scan de l'étape précédente. Vous remarquerez deux différences clés :
- Le
Target Hostnameest maintenantlocalhost(ou127.0.0.1), qui est celui par défaut du serveur. - La découverte
+ /test.txt: A text file was found.est manquante. C'est parce quetest.txtn'existe pas sur le site par défaut (site1.labex.io), et ce scan n'a pas ciblésite2.labex.io.
Cette comparaison montre clairement que sans -vhost, vous auriez manqué des vulnérabilités et des informations spécifiques à site2.labex.io.
Résumé
Dans ce laboratoire, vous avez appris une technique essentielle pour le scan de vulnérabilités des serveurs web. Vous comprenez maintenant ce qu'est l'hébergement virtuel et pourquoi il nécessite une gestion particulière lors d'une évaluation de sécurité.
Vous avez pratiqué :
- L'utilisation de
curlavec un en-têteHostpersonnalisé pour inspecter manuellement différents sites web sur la même IP. - L'identification de l'objectif de l'option
-vhostde Nikto. - L'exécution d'un scan ciblé contre un hôte virtuel spécifique en utilisant
nikto -h <IP> -vhost <HOSTNAME>. - La comparaison des résultats d'un scan ciblé et d'un scan par défaut pour comprendre l'importance de cette technique.
Cette compétence est essentielle pour tout testeur d'intrusion ou analyste de sécurité afin de s'assurer que toutes les applications web sur un serveur sont testées de manière approfondie, et pas seulement celle par défaut.


