SOC managé - surveillance continue  ·  veille cyber : CERT-FR / CISA / NVD  ·  réponse à incident : dispositif sous contrat
Tous les contenus Terrain

Durcissement · Guide pratique

Nmap et Nikto : le guide pour auditer son réseau et ses services web

Validation Rejeu réussi confirmé par Kenawek le 24 octobre 2026.Environnement du rejeu Versions exactes non précisées dans cette publication.À revoir Après évolution des versions, des configurations ou du périmètre.

Atelier réécrit le 24 octobre 2026. Lina reçoit un site avant livraison. Une fausse sauvegarde est accessible dans la racine web. Nous allons créer cette erreur, observer les ports et les réponses HTTP, déplacer le fichier puis rejouer les mêmes mesures.

Le rejeu de cet atelier a été confirmé avec succès par Kenawek le 24 octobre 2026. Les sorties présentées restent illustratives ; elles ne sont pas des captures du rejeu. Adaptez les commandes à votre environnement et consignez les écarts.

En résumé

  • Le scénario crée un site de laboratoire sur 127.0.0.1:8088 avec une fausse sauvegarde exposée.
  • Nmap identifie les ports et le service avant les contrôles web sélectionnés.
  • Nikto fournit des observations ; curl confirme directement la présence du fichier factice.
  • La correction déplace la sauvegarde hors de la racine tout en conservant l’accueil accessible.
  • Les mêmes mesures sont rejouées avant l’arrêt du serveur et la rédaction du bilan.
Architecture du scénario fictif
  1. VM LinuxBash, Nmap, Nikto, curl
  2. Boucle locale127.0.0.1:8088
  3. Serveur Pythonpublic/ contient une sauvegarde fictive

1. Préparer la cible factice

Dans une VM Debian/Ubuntu, créez un dossier neuf. Le secret ci-dessous est volontairement sans valeur.

sudo apt update
sudo apt install nmap nikto python3 curl
nmap --version
nikto -Version
umask 077
mkdir labo-web
cd labo-web
mkdir -p public/backup prive rapports
printf '<title>Portail de test</title><h1>Portail de test</h1>
' > public/index.html
printf 'TOKEN=FAUX-SECRET-SANS-VALEUR
' > public/backup/config.txt
printf 'User-agent: *
Disallow: /backup/
' > public/robots.txt
find public -type f

robots.txt n’est pas un contrôle d’accès. Le dossier prive est hors racine et servira à la correction.

2. Servir et examiner

Terminal A : laissez le serveur au premier plan. Terminal B : restez dans le même dossier pour les étapes suivantes.

python3 -m http.server 8088 --bind 127.0.0.1 --directory public

Ce serveur Python est réservé au laboratoire. Il peut lister les dossiers sans index ; ne l’exposez pas en production.

3. Établir la preuve HTTP

Dans le terminal B, comparez une ressource réelle à un chemin inexistant.

curl -i http://127.0.0.1:8088/
curl -i http://127.0.0.1:8088/backup/
curl -i http://127.0.0.1:8088/backup/config.txt
curl -i http://127.0.0.1:8088/fichier-inexistant

Attendez 200 pour la fausse configuration et 404 pour le chemin absent. Un statut seul ne suffit pas : lisez aussi le contenu.

4. Cartographier avec Nmap

Limitez la première mesure à deux ports, puis demandez la version du service découvert.

nmap -sT -n -p 8088,8089 --reason -oA rapports/ports-avant 127.0.0.1
nmap -sT -sV --version-light -n -p 8088 -oA rapports/service-avant 127.0.0.1
nmap --script-help http-title,http-headers
nmap -sT -sV -n -p 8088 --script http-title,http-headers -oA rapports/http-avant 127.0.0.1

-sT utilise les connexions TCP, -n évite le DNS inverse et -oA produit trois formats. 8088 doit être ouvert ; 8089 fermé si aucun autre programme ne l’utilise. Une bannière Python ne prouve pas une CVE.

5. Compléter avec Nikto

Nous sélectionnons les catégories 1 et 2 de la version documentée : fichiers intéressants et défauts de configuration.

nikto -Help
nikto -h http://127.0.0.1:8088 -Tuning 12 -output rapports/nikto-avant.htm -Format htm
curl -sS -D rapports/backup-avant.headers -o rapports/backup-avant.txt http://127.0.0.1:8088/backup/config.txt
cat rapports/backup-avant.headers
cat rapports/backup-avant.txt

-Tuning limite les catégories, -output fixe la sortie et -Format htm demande du HTML. Nikto peut ne pas reconnaître notre fichier : la preuve d’exposition vient de la réponse contenant la donnée factice. Ne fabriquez pas une alerte absente.

6. Corriger puis rejouer

Le fichier doit sortir du répertoire servi. Retirer seulement sa mention dans robots.txt ne corrigerait rien.

mv public/backup/config.txt prive/config.txt
rmdir public/backup
printf 'User-agent: *
' > public/robots.txt
curl -sS -o rapports/backup-apres.txt -w 'HTTP %{http_code}
' http://127.0.0.1:8088/backup/config.txt
curl -sS -o rapports/accueil-apres.html -w 'HTTP %{http_code}
' http://127.0.0.1:8088/
nmap -sT -n -p 8088,8089 --reason -oA rapports/ports-apres 127.0.0.1
nikto -h http://127.0.0.1:8088 -Tuning 12 -output rapports/nikto-apres.htm -Format htm
diff -u rapports/ports-avant.nmap rapports/ports-apres.nmap

Attendez 404 pour la sauvegarde et 200 pour l’accueil. Le port reste ouvert : couper le service ne serait pas une correction fonctionnelle. Les horodatages de rapports changent naturellement. Un vrai secret exposé devrait aussi être remplacé.

7. Arrêter et livrer

Arrêtez le serveur avec Ctrl+C dans le terminal A, puis vérifiez son arrêt.

nmap -sT -n -p 8088 --reason 127.0.0.1

Un port fermé est attendu si aucun autre service n’écoute. Le rapport conserve les preuves avant/après et les versions. Ce scénario vérifie un défaut précis, pas l’ensemble de la sécurité du site.

Approfondir : mécanismes, limites, FAQ et sources

1. Nmap et Nikto : deux rôles complémentaires

OutilQuestion principaleLimites à conserver en tête
NmapQuels hôtes, ports et services sont accessibles depuis ce point du réseau ?La visibilité dépend des filtres, des sondes et de la position du scanner.
NiktoQuelles réponses d’un serveur web correspondent à des contrôles ou signatures connus ?Les résultats demandent confirmation ; l’outil ne comprend pas toute la logique métier.
Audit humainPourquoi cette exposition existe-t-elle et quel risque crée-t-elle ?Il nécessite le contexte applicatif, les propriétaires et des preuves complémentaires.

Nmap sert à l’exploration réseau et à l’audit de sécurité. Nikto se concentre sur les serveurs web. Une séquence logique consiste à repérer un service HTTP ou HTTPS, à confirmer le site réellement présenté, puis à choisir les contrôles web pertinents.

Un scan de ports ne constitue pas un pentest complet. Un scanner web ne prouve pas l’absence de faille d’autorisation dans une API. Les tests d’accès entre comptes, de logique métier, de session et de transactions nécessitent une méthode complémentaire. L’article pentest, audit et red team explique ces différences de périmètre.

2. Cadrer la cible avant de choisir des options

Établissez une liste d’adresses, de noms de domaine, de ports autorisés et d’exclusions. Identifiez les propriétaires, les plages de test, les seuils de charge et le contact capable de demander un arrêt. Précisez si les contrôles passent par le pare-feu de production, un VPN, une zone interne ou une plateforme de préproduction.

Un domaine peut résoudre vers un CDN ou un hébergement partagé. L’autorisation d’auditer votre application ne s’étend pas automatiquement aux autres services de cette infrastructure. Évitez d’élargir une cible à tout un sous-réseau parce qu’un nom DNS pointe vers l’une de ses adresses. Contrôlez également les destinations des redirections.

Préparez la surveillance des erreurs HTTP, de la latence et de la consommation de ressources pendant l’exercice. Définissez un seuil d’arrêt avec l’exploitant. Un scanner peut provoquer des alertes, des journaux volumineux ou une charge significative même lorsqu’aucune exploitation n’est recherchée.

3. Architecture et prérequis du laboratoire

Une mesure technique utile comporte une boucle de vérification
  1. PérimètreDeux machines de test identifiées
  2. NmapPorts et services observés
  3. NiktoContrôles sur le service web confirmé
  4. QualificationPreuves, contexte et correction
  5. Contre-testMême cible et conditions documentées

L’exemple utilise un poste Linux d’audit et un serveur de laboratoire à l’adresse 192.168.56.20. Le service web de test écoute sur 8080. Préparez ce service et un contenu factice avant les commandes. L’adresse privée n’est pas une garantie d’isolement : vérifiez le routage et l’absence de chevauchement avec vos réseaux habituels.

Installez Nmap et Nikto depuis leurs sources officielles ou les paquets de confiance de votre distribution. Les commandes ci-dessous supposent les lanceurs nmap et nikto. Une installation Nikto depuis les sources peut nécessiter perl nikto.pl depuis le bon répertoire. Sous Windows, les modes réseau disponibles dépendent aussi de Npcap et des privilèges.

nmap --version
nikto -Version
nikto -Help

Notez la version du logiciel, celle des bases de tests lorsqu’elle est disponible, le système et le point réseau utilisé. Avant chaque commande, relisez la cible. Les exemples créent des fichiers de rapport dans le répertoire courant ; utilisez un dossier dédié et accessible uniquement aux personnes concernées.

4. Découvrir un hôte sans confondre silence et absence

La découverte d’hôtes Nmap cherche à déterminer quels systèmes répondent avant les scans de ports. -sn demande une découverte sans scan de ports. -n évite la résolution DNS inverse. Sur un réseau local, les mécanismes utilisés peuvent notamment inclure ARP ; le comportement dépend du contexte et des privilèges.

nmap -sn -n 192.168.56.20

Si la machine ne répond pas, vérifiez d’abord son état, l’adresse, les routes et les filtres. Un pare-feu peut bloquer une sonde tout en autorisant HTTPS. L’option -Pn saute la phase qui décide si l’hôte est actif et demande de traiter la cible comme disponible. Elle ne contourne pas un pare-feu et peut considérablement allonger un scan sur de nombreuses adresses.

Dans un inventaire, enregistrez les hôtes injoignables avec leur niveau d’incertitude. Ne les supprimez pas automatiquement du périmètre : vous risqueriez de produire une carte rassurante précisément là où votre point d’observation est incomplet.

5. Lire les ports et leurs états correctement

État NmapLecture correcteConclusion à éviter
openUn service accepte des connexions ou des paquets sur ce port.Le service est nécessairement vulnérable.
closedLa cible répond, mais aucun service n’écoute sur le port testé.Le système est sécurisé dans son ensemble.
filteredLe scanner ne peut pas déterminer l’ouverture, à cause d’un filtrage ou obstacle.Le service n’existe pas.
unfilteredLe port répond, sans que ce type de scan tranche son ouverture.Le port est forcément ouvert.
open|filteredLes réponses ne permettent pas de distinguer ouverture et filtrage.Le service UDP est confirmé.
closed|filteredLa technique ne distingue pas fermeture et filtrage.La politique réseau est correctement appliquée partout.

Ces états sont décrits dans le guide des états de ports. Ils qualifient une observation depuis un emplacement et à un instant donnés. Le même service peut être accessible depuis le réseau d’administration et filtré depuis le réseau des postes utilisateurs : c’est parfois exactement le résultat souhaité.

Un scan Nmap standard ne teste pas tous les ports : sa sélection habituelle porte sur les 1 000 ports TCP les plus courants. Un rapport doit annoncer les ports réellement examinés. L’option -p- élargit la sélection aux ports 1 à 65535 du protocole scanné ; elle ne rajoute pas à elle seule UDP.

6. TCP, UDP et identification des services

Le scan TCP connect, demandé avec -sT, utilise les connexions du système. Le scan SYN -sS travaille à un niveau plus bas et nécessite des capacités adaptées. Aucun ne garantit la discrétion : les équipements et les agents peuvent enregistrer les tentatives.

nmap -sT -n -p 22,80,443,8080 --reason -oA labo-tcp 192.168.56.20

Cette sélection vérifie quatre ports connus, affiche la raison de l’état et produit des rapports. Elle ne mesure pas toute l’exposition du serveur. Pour approfondir un service web déjà identifié, on peut ensuite demander une détection de version limitée :

nmap -sT -sV --version-light -n -p 8080 -oA labo-web 192.168.56.20

La détection de version envoie des sondes applicatives. Le nom de service déduit d’un numéro de port et le produit reconnu après sondage ne sont pas la même information. Un logiciel peut écouter sur un port inhabituel ; un proxy peut répondre à la place du serveur d’origine.

UDP mérite un lot distinct, sur des services attendus et une cible connue. Le silence peut rester ambigu et les limitations de débit des réponses compliquent l’analyse. Dans un laboratoire Linux disposant des privilèges requis, une vérification ciblée peut s’écrire :

sudo nmap -sU -n -p 53,123 --reason -oA labo-udp 192.168.56.20

Les ports retenus correspondent ici à DNS et NTP habituels, sans prouver qu’ils sont présents. Si ces services ne font pas partie du laboratoire, ce test n’apporte pas grand-chose. Choisissez les ports à partir de l’inventaire et des hypothèses de l’audit.

7. NSE : sélectionner les scripts, pas une promesse de sécurité

Le Nmap Scripting Engine ajoute des contrôles applicatifs. L’option -sC sélectionne les scripts par défaut ; -A active plusieurs fonctions, dont des scripts. Ces raccourcis ne conviennent pas automatiquement à un périmètre sensible.

Consultez l’aide de chaque script avant d’autoriser son exécution. Les catégories telles que safe ou vuln ne remplacent pas une analyse de ses actions, paramètres et destinations. Les scripts ne sont pas exécutés dans un bac à sable ; une source tierce non vérifiée constitue aussi un risque pour le poste d’audit.

nmap --script-help http-title,http-headers

Cette commande affiche l’aide sans lancer de scan de cible. Pour un examen réel, choisissez une liste précise après revue, puis fixez les hôtes et les ports. Un script qui obtient le titre d’une page renseigne sur le contenu reçu ; il ne valide ni l’authentification ni l’absence de vulnérabilité.

Les fonctions de détection du système d’exploitation, de traceroute ou de mesure TLS peuvent être utiles dans une mission, mais leur ajout doit répondre à une question. Accumuler les options rend plus difficile l’attribution d’un effet et la reproduction d’un résultat.

8. Passer du port ouvert au bon site web

Une adresse IP peut héberger plusieurs sites. Le nom envoyé dans la requête HTTP et, pour TLS, le nom transmis lors de la négociation peuvent déterminer la réponse. Scanner uniquement l’adresse peut afficher un site par défaut et manquer l’application recherchée.

Établissez donc une correspondance entre nom, adresse, port, protocole et chemin applicatif. Vérifiez le certificat et la destination après redirection. Un CDN ou un reverse proxy peut masquer les caractéristiques de l’origine, ce qui est une limite d’observation à noter, pas une invitation à chercher une origine hors périmètre.

IPv4 et IPv6 doivent être inventoriés séparément. Une application peut être filtrée correctement sur l’un et exposée différemment sur l’autre. Nmap propose -6 pour IPv6, mais seules les adresses explicitement autorisées doivent être ajoutées. Une vérification IPv4 réussie n’atteste pas le comportement IPv6.

9. Nikto : choisir un contrôle web et comprendre sa portée

Le guide de prise en main Nikto accepte notamment une URL complète comme cible. Pour notre service HTTP de laboratoire, un contrôle ciblé sur la catégorie de configuration peut être préparé ainsi :

nikto -h http://192.168.56.20:8080 -Tuning 2 -output labo-nikto.htm -Format htm

Dans la documentation du réglage des tests, 2 correspond aux erreurs de configuration et fichiers par défaut. Ce choix réduit le champ des contrôles : il ne représente pas un scan complet et ne garantit pas l’absence d’effet sur le service. Le rapport est au format HTML et le format demandé à Nikto est htm ; vérifiez les formats disponibles dans l’aide de votre version.

Les familles de tests couvrent des sujets différents, dont certains sont plus intrusifs. Définissez une liste adaptée à la mission plutôt qu’un lancement systématique de toutes les catégories. Évaluez d’abord la charge sur une seule instance de test, puis déterminez la cadence avec l’exploitant.

Une réponse HTTP inhabituelle, un chemin sensible apparent ou une bannière ancienne est un point de départ. Conservez l’URL, le statut, la réponse utile et les conditions du test. N’enregistrez pas des pages entières contenant des données personnelles si un extrait expurgé suffit à démontrer le constat.

10. Authentification, TLS, API : les angles morts

Une page de connexion peut donner la même réponse à tous les chemins demandés. Un WAF peut renvoyer un blocage générique. Une application peut répondre 200 à un fichier inexistant avec sa page d’accueil. Dans ces cas, le scanner risque de confondre une réponse standard avec une ressource réelle.

Les applications avec authentification fédérée, jetons courts, MFA ou parcours JavaScript complexes demandent une préparation supplémentaire. Une option d’authentification basique ne reproduit pas automatiquement une session utilisateur moderne. Ne placez pas de secrets dans des commandes copiées dans un rapport ; utilisez un compte de test et vérifiez ce que la session voit effectivement.

L’examen TLS exige de distinguer certificat, protocoles autorisés et configuration du frontal. La découverte d’un port 443 ouvert n’atteste aucun de ces points. De même, une API peut présenter peu de pages tout en autorisant des actions sensibles. Les droits sur les objets, les rôles et les quotas se testent avec des scénarios applicatifs dédiés.

La couverture doit donc expliciter les comptes utilisés, les pages accessibles, les tests exclus et les obstacles rencontrés. « Aucun résultat » peut signifier « rien de détecté dans les réponses accessibles », pas « application sans faille ».

11. Qualifier les faux positifs et les priorités

Observation illustrativeVérification complémentaireDécision possible
Version annoncée ancienneVérifier paquet, correctifs rétroportés et avis éditeur.Corriger si vulnérabilité applicable, sans se fonder uniquement sur la bannière.
Chemin de sauvegarde signaléComparer avec un chemin inexistant et confirmer le contenu sans extraction excessive.Retirer l’exposition si une sauvegarde réelle est accessible.
En-tête absentExaminer type de page, besoin applicatif et configuration du frontal.Appliquer une politique compatible et tester les parcours.
Port d’administration accessibleComparer source autorisée et source non autorisée avec le propriétaire.Restreindre le flux si l’exposition ne correspond pas au besoin.
Aucun port observéRevoir routage, découverte, filtrage et point de mesure.Classer la couverture comme incomplète si la cible reste non vérifiée.

Ces exemples sont des scénarios pédagogiques, pas des constats de mission. Pour chaque résultat, distinguez une information, une faiblesse confirmée et une vulnérabilité exploitable dans le contexte. Un identifiant CVE associé à une version ne remplace pas l’analyse d’applicabilité.

La priorité combine l’exposition, les privilèges nécessaires, les actifs concernés et les conséquences. Une interface d’administration accessible sans nécessité peut mériter une correction rapide même sans CVE. Le guide KEV, EPSS et CVSS v4 explique comment compléter cette appréciation pour les vulnérabilités connues.

12. Rapports, automatisation et contre-tests

Nmap propose plusieurs sorties. -oA crée les formats normal, XML et grepable avec un même préfixe. Pour une intégration logicielle, privilégiez le XML et un parseur adapté plutôt qu’une extraction fragile de colonnes à l’écran.

Une automatisation utile conserve l’horodatage, les versions, la cible, le point d’observation, les options et le statut de fin. Un traitement interrompu n’est pas un rapport vide réussi. Protégez les exports : l’inventaire des services peut lui-même être sensible. Fixez une rétention et des droits d’accès.

Comparez des campagnes comparables. Si la liste de ports ou les scripts changent, une nouvelle alerte peut refléter une nouvelle couverture plutôt qu’une régression du système. Une base de signatures actualisée peut aussi produire de nouveaux constats sans modification de l’application.

Après correction, rejouez le contrôle ciblé depuis le même emplacement, puis vérifiez un parcours utilisateur légitime. Conservez les preuves avant et après. Si un filtre a été modifié, testez aussi la source autorisée : un résultat « tout est fermé » peut simplement signifier que vous avez interrompu le service.

13. Questions fréquentes et checklist de fin

Nmap ou Nikto : lequel choisir ?

Commencez par la question. Pour savoir quels services sont accessibles, Nmap convient. Pour examiner des réponses web avec des contrôles connus, Nikto complète l’analyse. Un audit peut avoir besoin des deux et d’autres méthodes.

Peut-on automatiser un scan régulier ?

Oui, avec un périmètre stable, une cadence validée, des contrôles de charge et un traitement des erreurs. Les résultats doivent être attribués à un responsable et comparés à une référence. Accumuler des rapports sans suivi n’améliore pas la sécurité.

Une bannière suffit-elle pour annoncer une CVE ?

Non. Un frontal peut modifier la réponse et un éditeur peut rétroporter un correctif sans changer la version majeure affichée. Confirmez le logiciel réellement installé et l’avis applicable.

Qu’apporte Impacket en complément ?

Dans un audit Windows autorisé, Impacket aide à examiner des interactions de protocole et des permissions. Il répond à d’autres questions que l’inventaire des ports ou la recherche de configurations web.

  • Périmètre, propriétaires et exclusions documentés.
  • Versions, source réseau et options conservées.
  • Résultats ambigus ou tests interrompus signalés.
  • Constats confirmés et preuves expurgées.
  • Correction attribuée, puis contre-test et vérification métier.
  • Comptes temporaires retirés et rapports protégés.

Pour aller plus loin : maîtriser sa surface d’attaque et organiser la remédiation après un pentest.

Sources et références

Documentation consultée le 24 octobre 2026. Les architectures et scénarios sont pédagogiques ; les exemples restent illustratifs et ne reproduisent pas les journaux du rejeu confirmé.