Effectuer un scan de base de serveur web avec Nikto

Kali LinuxBeginner
Pratiquer maintenant

Introduction

Nikto est un scanner de serveurs web open-source 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. Il vérifie également les éléments de configuration du serveur tels que la présence de plusieurs fichiers d'index et les options du serveur HTTP.

Dans ce laboratoire, vous apprendrez les bases de l'utilisation de Nikto pour effectuer un scan basique. Nous commencerons par configurer un serveur web local simple pour qu'il serve de cible, puis nous utiliserons Nikto pour le scanner et analyser les résultats.

Identifier l'adresse IP ou le nom d'hôte de la cible

Dans cette étape, nous allons identifier et confirmer l'adresse de notre serveur web cible. Avant d'exécuter un scan, vous devez connaître l'adresse IP ou le nom d'hôte de la cible. Pour ce laboratoire, le script de configuration a déjà démarré un serveur web simple fonctionnant sur votre machine locale.

Dans un contexte réseau, votre propre machine peut être désignée par le nom d'hôte localhost ou l'adresse IP 127.0.0.1. Cette adresse spéciale est une adresse de "boucle locale" (loopback), ce qui signifie qu'elle pointe toujours vers la machine locale.

Vérifions que notre serveur web est en cours d'exécution et accessible. Nous pouvons utiliser la commande curl pour envoyer une requête à notre serveur local. Le serveur fonctionne sur le port 8000.

Exécutez la commande suivante dans votre terminal :

curl http://localhost:8000

Vous devriez voir le contenu HTML de notre page web simple, ce qui confirme que le serveur est actif et prêt à être scanné.

<h1>Welcome to the Test Server</h1>

Maintenant que nous avons confirmé notre cible à localhost:8000, nous pouvons passer à l'étape suivante.

Construire la commande de scan basique avec le drapeau -h

Dans cette étape, nous allons apprendre à construire une commande de scan Nikto basique. Nikto possède de nombreuses options, mais la plus fondamentale est de spécifier l'hôte cible.

Le drapeau -h ou -host est utilisé pour indiquer à Nikto quel serveur scanner. Pour vous familiariser avec cette option et d'autres, vous pouvez consulter le menu d'aide de Nikto.

Exécutez la commande suivante pour afficher les informations d'aide :

nikto -Help

La sortie sera assez longue, listant toutes les options disponibles. Faites défiler ou utilisez la fonction de recherche de votre terminal pour trouver l'option -h. Vous verrez une description similaire à celle-ci :

...
-h, -host       Cible hôte/IP/nom SSL
...

Étant donné que notre serveur ne fonctionne pas sur le port HTTP standard (80), nous devons également spécifier le numéro de port. Nous pouvons le faire en utilisant le drapeau -p ou -port.

Sur cette base, la commande pour scanner notre serveur local sur le port 8000 serait nikto -h localhost -p 8000. Nous exécuterons cette commande à l'étape suivante.

Exécuter le scan contre le serveur cible

Dans cette étape, vous allez exécuter le scan Nikto en utilisant la commande que nous avons construite. Cela lancera le processus de scan, où Nikto envoie une série de requêtes au serveur cible pour sonder les problèmes potentiels.

Maintenant, lancez le scan contre votre serveur web local.

nikto -h localhost -p 8000

Une fois que vous exécutez la commande, Nikto commencera le scan. Il affichera d'abord des informations de base sur la cible, puis commencera à exécuter ses tests. Le processus peut prendre quelques instants pour se terminer. Vous verrez les résultats s'afficher en temps réel directement dans votre terminal.

Observer la sortie en temps réel pendant le scan

Dans cette étape, nous allons examiner la sortie générée par le scan Nikto. Pendant que le scan s'exécute, Nikto rapporte ses découvertes. Chaque découverte est généralement précédée d'un signe plus (+).

La sortie de l'étape précédente devrait ressembler à ce qui suit. Notez que les numéros de version et les heures varieront.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         2023-10-27 10:30:00 (GMT0)
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.12
+ L'en-tête anti-clickjacking X-Frame-Options n'est pas présent.
+ L'en-tête X-XSS-Protection n'est pas défini. Cet en-tête peut indiquer à l'agent utilisateur de se protéger contre certaines formes de XSS.
+ L'en-tête X-Content-Type-Options n'est pas défini. Cela pourrait permettre à l'agent utilisateur de rendre le contenu du site d'une manière différente du type MIME.
+ Aucun répertoire CGI trouvé (utilisez '-C all' pour forcer la vérification de tous les répertoires possibles)
+ Méthodes HTTP autorisées : GET, HEAD, OPTIONS
+ OSVDB-3233 : / : La méthode HTTP TRACE est active, suggérant que l'hôte est vulnérable au XST
...
+ 1 hôte(s) testé(s)

Prenez un moment pour lire la sortie. Vous pouvez voir que Nikto identifie le logiciel serveur, vérifie les en-têtes de sécurité importants (comme X-Frame-Options), liste les méthodes HTTP autorisées et signale les vulnérabilités potentielles. Ces informations sont cruciales pour comprendre la posture de sécurité d'un serveur.

Identifier la bannière du serveur et les informations de version

Dans cette étape, nous allons nous concentrer sur l'une des informations les plus importantes fournies par Nikto : la bannière du serveur. Une bannière de serveur est une chaîne de texte envoyée par le serveur web dans ses en-têtes de réponse, qui identifie généralement le logiciel serveur et sa version.

Les attaquants utilisent ces informations pour trouver des vulnérabilités connues associées à une version logicielle spécifique. Dans les résultats de votre scan de l'étape précédente, vous devriez voir une ligne commençant par + Server:.

+ Server: SimpleHTTP/0.6 Python/3.10.12

Cette ligne nous indique que le serveur web est SimpleHTTP/0.6 fonctionnant sur Python/3.10.12.

Pour vous entraîner à isoler des informations spécifiques à partir d'une sortie plus large, vous pouvez relancer le scan et utiliser la commande grep pour filtrer les résultats, en affichant uniquement la ligne contenant "Server".

Exécutez la commande suivante :

nikto -h localhost -p 8000 | grep Server

Cette commande redirige la sortie de Nikto vers grep, qui filtre ensuite et affiche uniquement les lignes contenant le mot "Server". C'est une technique très utile pour analyser de gros fichiers journaux ou des sorties de commandes. Votre sortie devrait être la seule ligne identifiant le serveur.

+ Server: SimpleHTTP/0.6 Python/3.10.12

Résumé

Dans ce laboratoire, vous avez réussi à effectuer un scan de base de serveur web à l'aide de Nikto. Vous avez appris à identifier une cible, à construire une commande de scan de base avec les indicateurs -h et -p, et à l'exécuter. Vous vous êtes également exercé à observer la sortie en temps réel et à isoler des informations spécifiques, telles que la bannière du serveur, à l'aide d'outils comme grep.

Ce n'est que le début de ce que Nikto peut faire. Il dispose d'un large éventail d'options pour des scans plus ciblés et approfondis, y compris des vérifications SSL, des recherches dans la base de données de vulnérabilités et divers formats de sortie. Vous possédez désormais les connaissances fondamentales pour explorer ces fonctionnalités avancées et améliorer vos compétences en matière de tests de sécurité web.