Tester les failles de sécurité de votre serveur web avec Nikto

Nikto est un scanner de sécurité pour tester les serveurs web.
C'est un programme écrit en langage PERL. Il permet de tester votre serveur web. Il recherche des failles diverses, de tester plus de 6000 vulnérabilités, de vérifier l'obsolescence du serveur et de ses logiciels.

Pré-requis

Il faut disposer une connexion à internet configurée et activée.
Les lignes de commandes ci-dessous sont à entrer dans un terminal ayant les droits de super-administrateur (root).
Ce tutoriel a été testé sur Debian 8 et 9.

Difficulté
Facile

Merci d'utiliser Nikto sur vos serveurs web seulement

Installation

Nikto est présent dans les dépôts de Debian. Vous pouvez l'installer avec aptitude:

aptitude install nikto

ou apt-get:

apt-get install nikto

Et voilà, le paquet Nikto est installé sur votre Debian.

Configuration

Le fichier de configuration de nikto se trouve dans le répertoire /etc/nikto , c'est le fichier config.txt. Il n'y a aucune modification a apporter à ce fichier. Sauf, si vous êtes derrière un serveur proxy. Cette configuration est expliquée plus loin.

Utilisation

Pour lancer un scan de vulnérabilité, le paramètre -h suivi de l'adresse IP ou du nom de domaine.

nikto -h http://www.monsite.com

Si nous voulons effectuer le scan de vulnérabilités sur le port 443 (https), nous ajoutons le paramètre -p.

nikto -h http://www.monsite.com -p 443

Nous allons corsé un peu les choses et faire une recherche multi-ports. Nous utilisons toujours le paramètre -p, mais nous précisons l'adresse des différents ports avec une virgule :

nikto -h http://www.monsite.com -p 21,80,443

Et voici comment obtenir un fichier nommé scan.txt et contenant les résultats du scan de vulnérabilité. La paramètre -o sert à préciser le nom du fichier et le paramètre -F permet de préciser que le format de sortie doit être au format txt.

nikto -h http://www.monsite.com -p 443 -F txt -o scan.txt

Utilisation d'un proxy

Si vous êtes derrière un serveur proxy, il faut modifier le fichier /etc/nikto/config.txt avec votre éditeur de texte. Il faut décommenter et renseigner les lignes suivantes :

# Proxy settings -- still must be enabled by -useproxy
PROXYHOST=proxy.domaine.tld
PROXYPORT=8080
PROXYUSER=user-proxy
PROXYPASS=pass-proxy
  • PROXYHOST : l’URL ou l’IP du serveur proxy
  • PROXYPORT : le port du serveur proxy
  • PROXYUSER : le nom d'utilisateur du serveur proxy (laissez commenter si l'authentification n'est pas nécessaire)
  • PROXYPASS : le mot de passe de l’utilisateur (laissez commenter si l'authentification n'est pas nécessaire)

Pour préciser à nikto qu'il faut utiliser le serveur proxy, on ajoute le paramètre -useproxy.

nikto -h http://www.monsite.com -p 443 -useproxy

Les options et paramètres en détails

  • -Cgidirs : Scan des répertoires CGI. Les mots spéciaux "none" ou "all" peuvent être utilisés pour scanner tous les répertoires CGI ou aucun. Une valeur littérale pour un répertoire CGI tel que "/ cgi-test /" peut être spécifiée (doit inclure barre oblique). Si cette option n'est pas spécifiée, tous les répertoires CGI listés dans config.txt seront testés.
  • -config : Permet de préciser un autre fichier de configuration à utiliser à la place du fichier config.txt situé dans le répertoire d'installation.
  • -dbcheck : Vérifie les bases de données du scanner pour détecter d'éventuelles erreurs.
  • -Display : Contrôle le mode de sortie que Nikto montre. Utilisez le numéro de référence ou lettre pour spécifier le type, plusieurs références peuvent être utilisé:
    • 1 - Affiche les redirections
    • 2 - Affiche les cookies reçus
    • 3 - Affiche toutes les réponses 200 / OK
    • 4 - Affiche les URL nécessitant une authentification
    • D - Mode debug
    • V - Sortie détaillée
  • -evasion : Précise la technique d'évasion LibWhisker IDS à utiliser.tilisez le numéro de référence pour spécifier le type, plusieurs peuvent être utilisés:
    • 1 - Codage URI aléatoire(sauf UTF8)
    • 2 - Répertoire auto-référence (/./)
    • 3 - Fin de l'URL prématurée
    • 4 - Ajouter une longue chaîne aléatoire
    • 5 - Faux paramètres
    • 6 - Utilisation de TAB comme espace
    • 7 - Changer le cas de l'URL
    • 8 - Utiliser le séparateur de répertoire Windows (\)
  • -findonly : Ne découvrir que les ports HTTP(S), n'effectue pas d'analyse de sécurité. Cela va tenter de se connecter avec HTTP ou HTTPS et signalez l'en-tête du serveur.
  • -Format : Précise le format de fichier de sortie spécifié avec l'option -o (-output). Si ce paramètre n'est pas spécifié, la valeur par défaut sera pris à partir de l'extension de fichier spécifiée dans l'option -output. Les formats valides sont:
    • csv - Format CSV
    • htm - Rapport au format HTML
    • txt - Rapport au format texte
    • xml - Rapport au format XML
  • -host : Hôte(s) à cibler. Peut être une adresse IP, un nom d'hôte ou un fichier texte d'hôtes.
  • -Help : Affiche l'aide de Nikto
  • -id : ID et mot de passe pour l'authentification HTTP basic. Le format est "id:mot-de-passe".
  • -list-plugins : Liste tous les plugins que Nikto peut exécuter par rapport aux cibles, puis quitte sans effectuer d'analyse. Celles-ci peut être réglé pour une session en utilisant l'option -plugins.
  • -mutate : Spécifie la technique de mutation. Une mutation fera que Nikto combinera des tests ou tentera de deviner des valeurs. Ces techniques peuvent provoquer une quantité énorme de tests à lancer contre la cible. Utilisez le numéro de référence pour spécifier le type, plusieurs peuvent être utilisés:
    • 1 - Tester tous les fichiers avec tous les répertoires racine
    • 2 - Deviner les noms de fichiers de mot de passe
    • 3 - Énumérer les noms d'utilisateur via Apache (/ ~ requêtes de type utilisateur)
    • 4 - Énumérer les noms d'utilisateur via cgiwrap (/ cgi-bin / cgiwrap / ~ requêtes de type utilisateur)
    • 5 - Tenter d'utiliser des noms de sous-domaine force brute, supposer que le nom d'hôte est le domaine parent
    • 6 - Essayez de deviner les noms de répertoire à partir du fichier de dictionnaire fourni
  • -mutate-options : Fournir des informations supplémentaires sur les mutations, par ex. un fichier de dictionnaire
  • -nolookup : Ne pas effectuer de recherche de noms sur les adresses IP
  • -nossl : Ne pas utiliser SSL pour vous connecter au serveur.
  • -no404 : Désactive la vérification 404 (fichier non trouvé). Cela réduira le nombre total de requêtes effectuées sur le serveur Web et cela peut être préférable si vous avez une liaison lente ou un périphérique intégré.
  • -output : Ecrit la sortie dans le fichier spécifié. Le format utilisé sera défini par l'extension du fichier ou indiqué par l'option -format. Si le fichier existe, les nouvelles informations seront ajoutées.
  • -plugins : Indique les plugins à exécuter sur les cibles spécifiées. Une liste séparée par des virgules doit être fournie. Cette liste répertorie les noms des plugins. Les noms peuvent être trouvés en utilisant -list-plugins. Il y a deux entrées spéciales: ALL, qui spécifie que tous les plugins doivent être exécutés et NONE, qui spécifie qu'aucun plugin ne doit être exécuté. La valeur par défaut est ALL.
  • -port : Défini le ou les port(s) TCP à cibler. Pour tester plus d'un port sur le même hôte, spécifiez la liste des ports dans l'option -p (-port). Les ports peuvent être spécifiés en tant que plage (c'est-à-dire 80-90) ou en tant que liste délimitée par des virgules (c'est-à-dire, 80, 88, 90). S'il n'est pas spécifié, le port 80 est utilisé.
  • -Pause : Délais entre chaque test.
  • -root : Ajoute la valeur spécifiée au début de chaque requête. Ceci est utile pour tester les applications ou les serveurs Web qui ont tous leurs fichiers sous un certain répertoire.
  • -ssl : Teste uniquement SSL sur les ports spécifiés. L'utilisation de cette option accélérera considérablement les requêtes vers les ports HTTPS, sinon la requête HTTP passe en premier.
  • -Single : Effectue une seule requête sur le serveur cible. Nikto vous demandera toutes les options qui peuvent être spécifiées, puis signalera la sortie détaillée.
  • -timeout : Secondes à attendre avant de stopper une requête. Le délai d'attente par défaut est de 10 secondes.
  • -Tuning : Les options de réglage contrôleront le test que Nikto utilisera contre la cible. Par défaut, si des options sont spécifiées, seuls ces tests seront effectués. Si l'option "x" est utilisée, elle inverse la logique et exclut uniquement ces tests. Utilisez le numéro de référence ou la lettre pour spécifier le type, plusieurs options peuvent être utilisées:
    • 0 - Téléchargement de fichiers
    • 1 - Fichier intéressant / Vu dans les journaux
    • 2 - Mauvaise configuration / fichier par défaut
    • 3 - Divulgation d'information
    • 4 - Injection (XSS/Script/HTML)
    • 5 - Extraction de fichiers à distance, à l'intérieur de la racine Web
    • 6 - Déni de service
    • 7 - Extraction de fichiers à distance, à l'échelle du serveur
    • 8 - Exécution de commande / Shell à distance
    • 9 - Injection SQL
    • a - Contournement d'authentification
    • b - Identification du logiciel
    • c - Inclusion de sources distantes
    • x - Options de réglage inversé (c.-à-d., Inclure tous sauf ceux spécifiés)

La chaîne donnée sera analysée de gauche à droite, tous les caractères x s'appliqueront à tous les caractères à la droite des caractères.

  • -useproxy : Utilise le proxy HTTP défini dans le fichier de configuration.

Notes de version

  • [21/07/2018] : Création de l'article

Auteurs et sources