Nikto est l'un des scanners de serveurs web les plus anciens et les plus utilisés : gratuit, open source, léger, il repère en quelques minutes des fichiers dangereux, des versions obsolètes et des erreurs de configuration. Il ne remplace ni un test d'intrusion complet ni un scanner applicatif moderne, mais c'est un excellent outil de première reconnaissance et de contrôle rapide de la surface exposée. Ce guide explique comment l'installer, le lancer, régler ses options, lire ses résultats et, côté défense, comment le détecter et corriger ce qu'il trouve.
Règle absolue : ne scannez que des systèmes dont vous êtes propriétaire ou pour lesquels vous avez une autorisation écrite. Un scan non autorisé peut constituer un accès frauduleux au sens de l'article 323-1 du Code pénal. Pour cadrer une mission, voir notre article sur la préparation d'un pentest.
Qu'est-ce que Nikto ?
Nikto est un scanner de serveurs web écrit en Perl, publié sous licence GPL sur GitHub. Il envoie un grand nombre de requêtes HTTP prédéfinies et compare les réponses à une base de signatures pour détecter :
- des fichiers et répertoires dangereux ou sensibles (sauvegardes, fichiers de configuration, pages d'administration) ;
- des versions de serveurs et de logiciels obsolètes ;
- des erreurs de configuration (listing de répertoires, en-têtes de sécurité absents, méthodes HTTP superflues) ;
- des fichiers par défaut laissés après installation.
Il gère HTTPS, les proxies, l'authentification et plusieurs formats de rapport. Ce qu'il ne fait pas : il n'exploite pas les failles, il les signale. Sa détection repose sur des signatures, ce qui explique à la fois sa rapidité et ses faux positifs.
Installation
Sous Kali Linux, Nikto est déjà installé (page Kali). Sur Debian ou Ubuntu :
sudo apt update && sudo apt install nikto
nikto -Version
Depuis les sources, avec Perl :
git clone https://github.com/sullo/nikto
cd nikto/program
./nikto.pl -h http://www.example.com
Avec Docker, sans rien installer sur l'hôte :
docker pull hackllc/nikto:latest
docker run --rm hackllc/nikto -h http://www.example.com
Ces méthodes sont celles indiquées dans le README du projet. Remplacez www.example.com par votre propre cible.
Où s'entraîner légalement
Pour apprendre sans risque, scannez un environnement que vous contrôlez : une machine virtuelle locale, un conteneur ou une application volontairement vulnérable, par exemple OWASP Juice Shop lancée en local (voir notre article sur l'OWASP). Vous obtiendrez des résultats réalistes sans enfreindre la loi.
Votre premier scan
La commande de base utilise -h (ou -host) pour désigner la cible :
nikto -h http://127.0.0.1:3000
Nikto commence par identifier le serveur, puis teste des milliers de chemins et de configurations. Sur une cible réelle, un scan complet peut durer de quelques minutes à plusieurs dizaines de minutes.
Cibler précisément
| Option | Rôle |
|---|---|
-h |
Cible : nom, adresse IP ou URL |
-p 80,443,8080 |
Ports à scanner (plusieurs possibles) |
-ssl |
Forcer TLS sur un port HTTPS |
-root /app/ |
Ajouter un préfixe de chemin à toutes les requêtes |
-vhost dev.exemple.fr |
Définir l'en-tête Host (hôte virtuel) |
-maxtime 5m |
Limiter la durée du scan |
-useproxy http://127.0.0.1:8080 |
Faire passer le trafic par un proxy (par exemple pour l'observer) |
Des exemples d'utilisation de ces options figurent dans le guide de HackerDNA et dans la page de manuel du projet.
Le tuning : réduire le bruit
Par défaut, Nikto lance tous ses tests. L'option -Tuning permet de ne lancer que certaines catégories, ce qui accélère le scan et limite le bruit. Les codes sont documentés dans le wiki du projet :
| Code | Catégorie |
|---|---|
| 0 | Envoi de fichiers |
| 1 | Fichiers intéressants ou vus dans les journaux |
| 2 | Mauvaise configuration, fichiers par défaut |
| 3 | Divulgation d'informations |
| 4 | Injection (XSS, script, HTML) |
| 5 | Récupération de fichiers, à l'intérieur de la racine web |
| 6 | Déni de service |
| 7 | Récupération de fichiers, sur tout le serveur |
| 8 | Exécution de commandes, shell distant |
| 9 | Injection SQL |
| a | Contournement d'authentification |
| b | Identification de logiciels |
| c | Inclusion de sources distantes |
| d | Points d'accès de services web |
| e | Consoles d'administration |
| f | Injection XML |
| x | Inverse : exclut les catégories indiquées |
Exemples :
# Reconnaissance : fichiers intéressants, mauvaises configurations, divulgation, identification
nikto -h http://cible -Tuning 123b
# Tests 5 et 8 uniquement, sans la catégorie b
nikto -h http://cible -Tuning 58xb
Évitez les catégories intrusives ou risquées (déni de service, exécution de commandes) sur un système de production, même autorisé, sans accord explicite sur ces tests.
Enregistrer les résultats
L'option -o désigne le fichier, -Format le format : txt, csv, json, xml, htm (HTML), ou des formats SQL.
nikto -h http://cible -o rapport.html -Format htm
nikto -h http://cible -o scan.json -Format json
Le JSON se prête à l'automatisation (import dans un outil de suivi), le HTML à la lecture et au partage.
Lire les résultats sans se tromper
La sortie ressemble à une liste de lignes commençant par un chemin ou un identifiant, suivies d'une description. Exemple illustratif :
+ Server: Apache/2.4.41 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present.
+ /admin/: Directory indexing found.
+ /.env: Configuration file found.
Ne prenez jamais une ligne pour une preuve. Triez en trois catégories, comme le propose le guide de HackerDNA :
- Résultats confirmés : par exemple un fichier
.envréellement accessible. Vérifiez à la main, puis corrigez en priorité. - Pistes : un répertoire d'administration, une page par défaut. À examiner : sont-ils accessibles, protégés, utiles ?
- Bruit : en-têtes de sécurité manquants, alertes de version basées sur la simple bannière. À traiter avec un niveau de priorité plus bas, ou à écarter si la version est déjà corrigée par le fournisseur.
Vérifier chaque constat
- Reproduisez la requête avec un navigateur ou
curl. - Contrôlez la version réelle : une bannière peut annoncer une version ancienne alors que les correctifs de sécurité ont été appliqués.
- Évaluez la criticité avec une méthode cohérente comme le score CVSS (voir notre article sur le score CVSS).
- Documentez : URL, date, capture, impact, correctif proposé.
Pour inspecter un certificat ou des en-têtes HTTP, l'analyseur de certificat et en-têtes HTTP de ForenShield est un complément pratique.
Nikto dans une démarche de reconnaissance
Nikto s'insère dans une chaîne d'outils :
- Découverte des hôtes et des ports (par exemple avec Nmap).
- Nikto sur chaque service web identifié, avec un tuning adapté.
- Vérification manuelle des constats, avec un proxy d'interception ou un scanner applicatif comme ZAP.
- Analyse du trafic si nécessaire (voir notre guide sur Wireshark).
- Rapport avec priorisation.
Les limites de Nikto
- Bruyant et détectable : il envoie beaucoup de requêtes rapidement ; il sera détecté par un IDS, un pare-feu applicatif (WAF) ou un simple contrôle des journaux.
- Détection par signatures : il trouve ce qui est connu, pas les failles de logique métier ni les vulnérabilités propres à votre application.
- Faux positifs fréquents : notamment sur les versions annoncées et les en-têtes.
- Peu adapté aux applications modernes : les applications à page unique, les API et les parcours authentifiés complexes demandent d'autres outils.
- Pas d'exploitation : il indique une piste, pas la preuve qu'elle est exploitable.
Côté défense : détecter Nikto et corriger
Repérer un scan
- Pic de requêtes vers des chemins inexistants (nombreux codes 404 en peu de temps).
- User-Agent : par défaut, Nikto s'identifie dans cet en-tête, mais cette valeur est modifiable et ne doit pas être votre seul indice.
- Requêtes sur des fichiers typiques : sauvegardes,
.env, consoles d'administration. - Règles de WAF, limitation de débit et alertes SIEM pour bloquer et signaler ces comportements.
Corriger ce que Nikto trouve
- Supprimez les fichiers inutiles ou sensibles du serveur web (sauvegardes, fichiers de configuration).
- Désactivez le listing de répertoires.
- Ajoutez les en-têtes de sécurité adaptés (protection contre le clickjacking, type de contenu, politique de contenu).
- Masquez les bannières de version quand c'est possible et mettez à jour les composants.
- Restreignez l'accès aux consoles d'administration (réseau interne, authentification forte).
- Relancez le scan après correction pour vérifier.
Checklist
- Autorisation écrite obtenue, périmètre défini.
- Scan réalisé hors des périodes critiques, avec limite de durée.
- Tuning adapté pour limiter le bruit et les risques.
- Résultats exportés (HTML ou JSON) et triés en trois catégories.
- Chaque constat vérifié manuellement avant d'être rapporté.
- Correctifs appliqués, puis nouveau scan de contrôle.
En résumé
Nikto est un scanner simple et rapide pour dresser un premier état des lieux d'un serveur web : nikto -h, un tuning adapté, un rapport HTML ou JSON, puis un tri rigoureux des résultats. Sa force est la couverture des erreurs classiques ; ses limites sont le bruit, les faux positifs et l'absence d'analyse applicative approfondie. Utilisé avec autorisation et complété par des vérifications manuelles et d'autres outils, il reste un excellent réflexe d'audit.