Scanner un site web activé pour SSL ou TLS avec Nikto

Kali LinuxBeginner
Pratiquer maintenant

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.

Bien que Nikto puisse facilement scanner les sites web HTTP standard, le scan des sites utilisant SSL/TLS (HTTPS) nécessite une option spécifique. Dans ce laboratoire, vous apprendrez comment utiliser Nikto pour scanner un site web activé pour SSL/TLS. Nous utiliserons un serveur web sécurisé hébergé localement à des fins de test. Vous apprendrez comment initier un scan SSL, le diriger vers un port spécifique, et interpréter les informations relatives au SSL dans les résultats du scan.

Identifier un site web cible utilisant HTTPS

Dans cette étape, nous allons confirmer que notre serveur web sécurisé cible est en cours d'exécution et accessible. Le script de configuration de ce laboratoire a déjà démarré un serveur web Python simple qui utilise SSL/TLS. Il écoute sur localhost au port 4433.

Pour vérifier que le serveur est en cours d'exécution, nous pouvons utiliser la commande curl. Étant donné que notre serveur utilise un certificat auto-signé (qui n'est pas approuvé par une autorité de certification), nous devons utiliser l'option -k ou --insecure avec curl pour lui indiquer de continuer malgré le certificat non fiable.

Exécutez la commande suivante dans votre terminal :

curl -k https://localhost:4433

Vous devriez voir le contenu HTML de la page principale du serveur, ce qui confirme que le serveur est actif et sert du contenu via HTTPS.

<html><body><h1>Welcome to the Secure Test Server!</h1></body></html>

Maintenant que nous avons confirmé que notre cible est opérationnelle, nous pouvons procéder à son scan.

Utiliser le drapeau -ssl pour activer le mode SSL

Dans cette étape, nous allons comprendre pourquoi le drapeau -ssl est essentiel pour scanner les sites HTTPS. Par défaut, Nikto tente de scanner les cibles via HTTP standard sur le port 80. Si vous le dirigez vers un port qui attend une connexion SSL/TLS sans spécifier d'utiliser SSL, le scan échouera car la poignée de main initiale de la communication est incorrecte.

Essayons d'exécuter Nikto contre notre serveur sécurisé sur le port 4433 sans le drapeau -ssl pour observer ce comportement.

nikto -h localhost -p 4433

Vous verrez une sortie indiquant qu'aucun serveur web n'a été trouvé, ou vous pourriez voir un message d'erreur. C'est parce que Nikto essaie de communiquer en HTTP avec un port qui écoute en HTTPS.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        4433
---------------------------------------------------------------------------
+ Start Time:         ...
---------------------------------------------------------------------------
+ ERROR: No web server found on localhost:4433
---------------------------------------------------------------------------
+ 0 host(s) tested

Cela démontre la nécessité du drapeau -ssl. Ce drapeau indique explicitement à Nikto d'encapsuler ses requêtes web dans une couche SSL/TLS, lui permettant de communiquer avec des serveurs sécurisés. Dans l'étape suivante, nous utiliserons ce drapeau pour effectuer un scan approprié.

Exécuter le scan contre la cible HTTPS

Dans cette étape, vous allez effectuer un scan de vulnérabilité approprié contre notre serveur web sécurisé en utilisant le drapeau -ssl. En combinant les drapeaux -h (host), -p (port) et -ssl, nous pouvons indiquer à Nikto de se connecter à l'hôte et au port corrects, et d'utiliser une connexion SSL/TLS.

Exécutez la commande suivante dans votre terminal pour lancer le scan :

nikto -h localhost -p 4433 -ssl

Nikto va maintenant démarrer le scan. Comme notre serveur utilise un certificat auto-signé, Nikto affichera probablement un avertissement concernant l'émetteur du certificat non approuvé, ce qui est attendu dans ce cas. Le scan se poursuivra ensuite.

La sortie ressemblera à ceci :

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        4433
+ SSL Info:           Self-signed certificate.
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server:             SimpleHTTP/0.6 Python/3.10.12
+ 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
...
+ 1 host(s) tested

Vous avez maintenant réussi à scanner un site web activé pour SSL avec Nikto.

Observer les vérifications spécifiques au SSL dans la sortie

Dans cette étape, nous allons analyser la sortie du scan précédent pour identifier les informations spécifiques aux connexions SSL/TLS. Lorsque le drapeau -ssl est utilisé, Nikto ne se contente pas de scanner les vulnérabilités web générales, mais fournit également des détails sur le certificat et la configuration SSL/TLS du serveur.

Si vous remontez dans la sortie de la commande de l'étape précédente, vous trouverez des informations relatives au certificat SSL. Pour isoler ces informations, vous pouvez relancer le scan et utiliser grep pour filtrer la sortie. Recherchons la ligne "Subject" du certificat.

nikto -h localhost -p 4433 -ssl | grep "Subject"

Cette commande relancera le scan, mais n'affichera que les lignes contenant le mot "Subject".

+ Subject: C=US, ST=California, L=MountainView, O=LabEx, OU=IT, CN=localhost

Cette ligne montre les détails intégrés dans le certificat SSL du serveur, tels que le pays (C), l'état (ST) et le nom commun (CN). Ces informations peuvent être utiles pour vérifier l'identité d'un serveur lors d'une évaluation de sécurité. Nikto vérifie également les informations sur les chiffrements et d'autres vulnérabilités liées au SSL, offrant ainsi une image plus complète de la configuration du serveur sécurisé.

Forcer le mode SSL sur un port non standard

Dans cette étape, nous allons explorer comment "forcer" Nikto à utiliser SSL sur n'importe quel port, même ceux qui gèrent généralement le trafic non chiffré. Ceci est utile pour identifier les services mal configurés qui pourraient exécuter HTTPS sur un port inhabituel, comme 8080.

Tout d'abord, nous devons arrêter le serveur existant et en démarrer un nouveau sur le port 8080.

## Stop the previous server
pkill -f "python3 /home/labex/project/https_server/server.py"

## Create a new server configuration for port 8080
cat << EOF > /home/labex/project/https_server/server_8080.py
import http.server
import ssl
import os
os.chdir(os.path.dirname(os.path.abspath(__file__)))
server_address = ('0.0.0.0', 8080)
httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket,
                               server_side=True,
                               certfile='cert.pem',
                               keyfile='key.pem',
                               ssl_version=ssl.PROTOCOL_TLS)
httpd.serve_forever()
EOF

## Start the new server in the background and wait a moment
python3 /home/labex/project/https_server/server_8080.py &> /dev/null &
sleep 3

Maintenant, notre serveur sécurisé est en cours d'exécution sur le port 8080. Sans le drapeau -ssl, Nikto supposerait qu'il s'agit d'un port HTTP standard. En incluant -ssl, nous le forçons à initier une négociation TLS (TLS handshake).

Exécutez le scan sur le port 8080 :

nikto -h localhost -p 8080 -ssl

La sortie sera similaire aux scans précédents, confirmant que Nikto s'est connecté avec succès en utilisant SSL/TLS sur un port non standard et a effectué ses tests.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8080
+ SSL Info:           Self-signed certificate.
...

Ceci confirme votre capacité à utiliser Nikto pour scanner les services SSL/TLS sur n'importe quel port arbitraire.

Résumé

Dans ce laboratoire, vous avez appris le processus fondamental de scan des sites web activés pour SSL/TLS à l'aide de Nikto. Vous avez commencé par identifier et vérifier un serveur HTTPS cible. Vous avez ensuite constaté par vous-même pourquoi pointer simplement Nikto vers un port HTTPS échoue et appris que le drapeau -ssl est requis pour activer la communication SSL/TLS.

Vous avez exécuté avec succès un scan sur un serveur sécurisé, analysé la sortie pour des informations spécifiques au SSL telles que les détails du certificat, et enfin, appris à forcer le mode SSL sur un port non standard. Cette compétence est cruciale pour mener des évaluations de sécurité approfondies sur les applications web modernes qui s'appuient sur HTTPS pour la sécurité.