Nmap - Référence Complète
1. Introduction et installation
Nmap (Network Mapper) est un outil open source de découverte réseau et d'audit de sécurité. Il permet de détecter les hôtes actifs, les ports ouverts, les services en cours d'exécution, les systèmes d'exploitation et les vulnérabilités potentielles sur un réseau.
Installation sur Linux (Debian/Ubuntu)
sudo apt update
sudo apt install nmap
Installation sur Linux (CentOS/RHEL/Fedora)
sudo yum install nmap
# ou sur Fedora
sudo dnf install nmap
Installation sur macOS
# Via Homebrew
brew install nmap
Installation sur Windows
Télécharger l'installeur depuis https://nmap.org/download.html. L'installation inclut Zenmap (interface graphique) et Npcap (pilote de capture de paquets).
Vérifier l'installation
nmap --version
2. Scan de base
Scan simple d'un hôte
Scanne les 1000 ports TCP les plus courants sur la cible :
nmap 192.168.1.1
Scan par nom d'hôte
nmap exemple.com
Scan de plusieurs hôtes
# Séparés par des espaces
nmap 192.168.1.1 192.168.1.2 192.168.1.3
# Séparés par des virgules (dernier octet)
nmap 192.168.1.1,2,3
Scan d'une plage d'adresses
# Plage avec tiret
nmap 192.168.1.1-254
# Notation CIDR
nmap 192.168.1.0/24
# Sous-réseau complet
nmap 10.0.0.0/8
Scan à partir d'un fichier de cibles
# Un hôte par ligne dans le fichier
nmap -iL cibles.txt
Exclure des hôtes du scan
# Exclure une adresse
nmap 192.168.1.0/24 --exclude 192.168.1.1
# Exclure depuis un fichier
nmap 192.168.1.0/24 --excludefile exclusions.txt
3. Découverte d'hôtes
La phase de découverte détermine quels hôtes sont en ligne avant de scanner leurs ports.
Ping scan (pas de scan de ports)
Détecte les hôtes actifs sans scanner les ports :
nmap -sn 192.168.1.0/24
Désactiver la découverte (traiter tous les hôtes comme en ligne)
Utile quand le pare-feu bloque les pings :
nmap -Pn 192.168.1.1
Découverte TCP SYN
Envoie un paquet SYN sur les ports spécifiés pour détecter les hôtes :
# SYN sur le port 443
nmap -PS443 192.168.1.0/24
# SYN sur plusieurs ports
nmap -PS22,80,443 192.168.1.0/24
Découverte TCP ACK
Envoie un paquet ACK - utile pour contourner certains pare-feu stateless :
nmap -PA80 192.168.1.0/24
Découverte UDP
Envoie un paquet UDP sur le port spécifié :
nmap -PU53 192.168.1.0/24
Découverte ICMP Echo
nmap -PE 192.168.1.0/24
Découverte ARP (réseau local uniquement)
Très fiable sur un réseau local, ne peut pas être bloqué par un pare-feu :
nmap -PR 192.168.1.0/24
Combiner plusieurs méthodes
nmap -PE -PS22,80,443 -PA80 -PU53 192.168.1.0/24
4. Types de scan
Scan SYN (semi-ouvert) - Par défaut avec root
Le scan le plus populaire. Rapide et discret car il ne complète pas la connexion TCP :
nmap -sS 192.168.1.1
Scan TCP Connect
Utilise l'appel système connect(). Plus lent mais ne nécessite pas de privilèges root :
nmap -sT 192.168.1.1
Scan UDP
Scanne les ports UDP. Plus lent que TCP car UDP est sans connexion :
nmap -sU 192.168.1.1
# Combiner TCP SYN et UDP
nmap -sS -sU 192.168.1.1
Scan TCP ACK
Ne détermine pas si les ports sont ouverts, mais identifie les règles de pare-feu (filtré/non filtré) :
nmap -sA 192.168.1.1
Scan Window
Similaire au scan ACK mais exploite les différences d'implémentation de la taille de fenêtre TCP :
nmap -sW 192.168.1.1
Scan FIN
Envoie un paquet avec le flag FIN. Les ports fermés répondent RST, les ports ouverts ignorent :
nmap -sF 192.168.1.1
Scan Xmas
Active les flags FIN, PSH et URG (le paquet est « illuminé comme un sapin de Noël ») :
nmap -sX 192.168.1.1
Scan Null
Envoie un paquet sans aucun flag TCP :
nmap -sN 192.168.1.1
Scan Idle (Zombie)
Scan totalement furtif utilisant un hôte zombie comme intermédiaire :
nmap -sI zombie.exemple.com 192.168.1.1
5. Spécification de ports
Ports spécifiques
# Un seul port
nmap -p 80 192.168.1.1
# Plusieurs ports
nmap -p 80,443,8080 192.168.1.1
# Plage de ports
nmap -p 1-1000 192.168.1.1
# Combiner ports et plages
nmap -p 22,80,443,8000-8100 192.168.1.1
Tous les ports (65535)
nmap -p- 192.168.1.1
Ports les plus courants
# Les 100 ports les plus courants
nmap --top-ports 100 192.168.1.1
# Les 10 ports les plus courants
nmap --top-ports 10 192.168.1.1
Scan rapide (100 ports les plus courants)
nmap -F 192.168.1.1
Spécifier le protocole
# Ports TCP spécifiques
nmap -p T:80,443 192.168.1.1
# Ports UDP spécifiques
nmap -p U:53,161 192.168.1.1
# Combiner TCP et UDP
nmap -p T:80,443,U:53,161 192.168.1.1
6. Détection de version
La détection de version interroge les ports ouverts pour identifier le service et sa version.
Détection de version standard
nmap -sV 192.168.1.1
Intensité de la détection
L'intensité va de 0 (léger) à 9 (essayer toutes les sondes) :
# Intensité légère (rapide)
nmap -sV --version-intensity 2 192.168.1.1
# Intensité élevée (plus lent mais plus précis)
nmap -sV --version-intensity 8 192.168.1.1
Détection maximale
# Essayer toutes les sondes (intensité 9)
nmap -sV --version-all 192.168.1.1
Détection légère
# Intensité 2 - seulement les sondes les plus probables
nmap -sV --version-light 192.168.1.1
Combinaison classique
# Détection de version + scan SYN + top 1000 ports
nmap -sS -sV 192.168.1.1
7. Détection d'OS
Nmap peut identifier le système d'exploitation d'un hôte en analysant les réponses réseau.
Détection d'OS standard
nmap -O 192.168.1.1
Détection agressive avec supposition
Affiche les correspondances les plus proches même si aucune n'est parfaite :
nmap -O --osscan-guess 192.168.1.1
Limiter la détection aux cibles prometteuses
Ne tente la détection d'OS que si au moins un port ouvert et un port fermé sont trouvés :
nmap -O --osscan-limit 192.168.1.0/24
Combinaison classique
# Détection d'OS + version + scripts par défaut + traceroute
nmap -A 192.168.1.1
8. Scripts NSE (Nmap Scripting Engine)
Le moteur de scripts NSE permet d'étendre les fonctionnalités de Nmap avec des scripts Lua. Les scripts sont classés par catégories.
Catégories de scripts
# auth - Scripts d'authentification
# brute - Attaques par force brute
# default - Scripts exécutés avec -sC
# discovery- Découverte d'informations supplémentaires
# exploit - Tentatives d'exploitation
# vuln - Détection de vulnérabilités
# safe - Scripts considérés comme sûrs (pas intrusifs)
Exécuter les scripts par défaut
nmap -sC 192.168.1.1
# Équivalent à :
nmap --script=default 192.168.1.1
Exécuter une catégorie complète
# Tous les scripts de vulnérabilité
nmap --script=vuln 192.168.1.1
# Plusieurs catégories
nmap --script="vuln,safe" 192.168.1.1
Scripts utiles détaillés
http-title
Récupère le titre des pages web :
nmap --script=http-title -p 80,443,8080 192.168.1.0/24
ssl-enum-ciphers
Enumère les suites de chiffrement SSL/TLS supportées et attribue un score de sécurité :
nmap --script=ssl-enum-ciphers -p 443 192.168.1.1
smb-vuln-ms17-010
Vérifie la vulnérabilité EternalBlue (MS17-010) :
nmap --script=smb-vuln-ms17-010 -p 445 192.168.1.0/24
ftp-anon
Vérifie si l'accès FTP anonyme est autorisé :
nmap --script=ftp-anon -p 21 192.168.1.1
ssh-auth-methods
Identifie les méthodes d'authentification SSH acceptées :
nmap --script=ssh-auth-methods -p 22 192.168.1.1
dns-brute
Force brute les sous-domaines DNS :
nmap --script=dns-brute exemple.com
http-enum
Enumère les répertoires et fichiers web connus (similaire à Nikto/Dirb) :
nmap --script=http-enum -p 80,443 192.168.1.1
vuln
Exécute tous les scripts de détection de vulnérabilités :
nmap --script=vuln 192.168.1.1
mysql-info
Récupère les informations d'un serveur MySQL (version, capacités, salt) :
nmap --script=mysql-info -p 3306 192.168.1.1
http-headers
Affiche les en-têtes HTTP retournés par le serveur :
nmap --script=http-headers -p 80,443 192.168.1.1
ssl-cert
Récupère et affiche les détails du certificat SSL/TLS :
nmap --script=ssl-cert -p 443 192.168.1.1
http-robots.txt
Récupère et affiche le contenu du fichier robots.txt :
nmap --script=http-robots.txt -p 80,443 192.168.1.1
smtp-open-relay
Vérifie si un serveur SMTP est configuré en open relay :
nmap --script=smtp-open-relay -p 25 192.168.1.1
snmp-info
Récupère les informations système via SNMP (community string "public") :
nmap --script=snmp-info -p 161 -sU 192.168.1.1
http-sql-injection
Teste les formulaires web pour des vulnérabilités d'injection SQL basiques :
nmap --script=http-sql-injection -p 80,443 192.168.1.1
Passer des arguments aux scripts
# Spécifier un user-agent personnalisé
nmap --script=http-enum --script-args http.useragent="Mozilla/5.0" -p 80 192.168.1.1
# Spécifier des identifiants pour brute force
nmap --script=ftp-brute --script-args userdb=users.txt,passdb=passwords.txt -p 21 192.168.1.1
Lister les scripts disponibles
# Lister tous les scripts
ls /usr/share/nmap/scripts/
# Chercher des scripts par nom
ls /usr/share/nmap/scripts/ | grep http
# Aide sur un script
nmap --script-help=http-enum
9. Timing et performance
Les templates de timing contrôlent la vitesse et l'agressivité du scan.
Templates de timing (-T)
# -T0 (Paranoid) - Très lent, 5 min entre chaque sonde. Pour éviter les IDS.
nmap -T0 192.168.1.1
# -T1 (Sneaky) - Lent, 15 sec entre chaque sonde. Pour éviter les IDS.
nmap -T1 192.168.1.1
# -T2 (Polite) - Ralentit le scan pour consommer moins de bande passante.
nmap -T2 192.168.1.1
# -T3 (Normal) - Par défaut. Bon compromis vitesse/fiabilité.
nmap -T3 192.168.1.1
# -T4 (Aggressive) - Rapide. Recommandé sur un réseau fiable.
nmap -T4 192.168.1.1
# -T5 (Insane) - Très rapide. Risque de rater des ports sur un réseau lent.
nmap -T5 192.168.1.1
Contrôle du débit
# Nombre minimum de paquets par seconde
nmap --min-rate 1000 192.168.1.0/24
# Nombre maximum de paquets par seconde
nmap --max-rate 500 192.168.1.1
Contrôle des tentatives
# Nombre maximum de retransmissions
nmap --max-retries 2 192.168.1.1
# Timeout par hôte
nmap --host-timeout 5m 192.168.1.0/24
# Timeout par sonde
nmap --scan-delay 1s 192.168.1.1
Parallélisme
# Nombre minimum d'hôtes en parallèle
nmap --min-hostgroup 64 192.168.1.0/24
# Nombre maximum d'hôtes en parallèle
nmap --max-hostgroup 256 192.168.1.0/24
# Nombre minimum de sondes en parallèle
nmap --min-parallelism 100 192.168.1.1
10. Évasion et spoofing
Ces techniques permettent de contourner les pare-feu et systèmes de détection d'intrusion (IDS/IPS).
Fragmentation de paquets
Divise les paquets en fragments plus petits pour contourner les IDS :
# Fragmentation standard (8 octets)
nmap -f 192.168.1.1
# Double fragmentation (16 octets)
nmap -f -f 192.168.1.1
# MTU personnalisé (doit être un multiple de 8)
nmap --mtu 24 192.168.1.1
Leurres (Decoys)
Génère du trafic depuis de fausses adresses IP pour masquer la source réelle :
# Utiliser des leurres spécifiques (ME = votre adresse réelle)
nmap -D 10.0.0.1,10.0.0.2,ME,10.0.0.3 192.168.1.1
# Générer des leurres aléatoires
nmap -D RND:10 192.168.1.1
Usurpation d'adresse source
# Usurper l'adresse IP source (ne recevra pas les réponses)
nmap -S 10.0.0.1 -e eth0 192.168.1.1
Usurpation d'adresse MAC
# MAC spécifique
nmap --spoof-mac 00:11:22:33:44:55 192.168.1.1
# MAC aléatoire
nmap --spoof-mac 0 192.168.1.1
# MAC d'un vendeur spécifique
nmap --spoof-mac Dell 192.168.1.1
Modifier la taille des paquets
# Ajouter des données aléatoires pour modifier la taille
nmap --data-length 25 192.168.1.1
Port source spécifique
Certains pare-feu autorisent le trafic provenant de ports spécifiques (53, 80, 443) :
# Utiliser le port source 53 (DNS)
nmap -g 53 192.168.1.1
# Forme longue
nmap --source-port 53 192.168.1.1
Combiner les techniques d'évasion
nmap -f --data-length 25 -g 53 -D RND:5 -T2 192.168.1.1
11. Sortie et rapports
Sortie normale (texte lisible)
nmap -oN scan_resultat.txt 192.168.1.1
Sortie XML
Format structuré, idéal pour l'intégration avec d'autres outils :
nmap -oX scan_resultat.xml 192.168.1.1
Sortie Grepable
Une ligne par hôte, facile à traiter avec grep/awk/sed :
nmap -oG scan_resultat.gnmap 192.168.1.1
Tous les formats à la fois
nmap -oA scan_resultat 192.168.1.1
# Crée : scan_resultat.nmap, scan_resultat.xml, scan_resultat.gnmap
Verbosité
# Augmenter la verbosité
nmap -v 192.168.1.1
# Verbosité maximale
nmap -vv 192.168.1.1
Débogage
# Mode débogage
nmap -d 192.168.1.1
# Débogage maximal
nmap -dd 192.168.1.1
Options d'affichage utiles
# Afficher la raison de l'état de chaque port
nmap --reason 192.168.1.1
# Afficher uniquement les ports ouverts
nmap --open 192.168.1.1
# Afficher les paquets envoyés et reçus
nmap --packet-trace 192.168.1.1
12. Exemples pratiques complets
Audit rapide d'un serveur web
nmap -sS -sV -sC -T4 -p 80,443,8080,8443 --open 192.168.1.1
Scan SYN rapide avec détection de version et scripts par défaut sur les ports web courants.
Pentest web complet
nmap -sS -sV -O -A --script="http-*,ssl-*" -p 80,443,8080,8443 -T4 -oA web_audit 192.168.1.1
Scan complet avec détection d'OS, tous les scripts HTTP et SSL, sortie dans tous les formats.
Découverte complète du réseau interne
# Phase 1 : Découverte des hôtes
nmap -sn 192.168.1.0/24 -oG decouverte.gnmap
# Phase 2 : Scan des hôtes découverts
nmap -sS -sV -O -T4 --top-ports 1000 -iL hosts_actifs.txt -oA scan_complet
Détection de vulnérabilités
nmap -sV --script=vuln -T4 -oA vuln_scan 192.168.1.1
Exécute tous les scripts de la catégorie vuln avec détection de version.
Scan furtif complet
nmap -sS -Pn -f --data-length 25 -g 53 -D RND:5 -T2 -p- --open -oN furtif.txt 192.168.1.1
Scan de tous les ports avec fragmentation, leurres, port source DNS et timing lent.
Audit de sécurité SMB/Windows
nmap -sS -sV --script="smb-vuln-*,smb-enum-*,smb-os-discovery" -p 139,445 -T4 192.168.1.0/24
Vérifie les vulnérabilités SMB connues et enumère les partages sur tout le sous-réseau.
Scan rapide d'infrastructure
nmap -sS -sV -T4 -F --open -oA quick_scan 192.168.1.0/24
Scan rapide des 100 ports les plus courants avec détection de version, uniquement les ports ouverts.
Scan complet exhaustif
# Scan de tous les ports TCP et UDP avec détection complète
nmap -sS -sU -sV -O -A -T4 -p- --open -oA scan_exhaustif 192.168.1.1
Attention : ce scan peut prendre plusieurs heures selon la cible.
Identifier les serveurs DNS du réseau
nmap -sU -p 53 --open 192.168.1.0/24
Vérifier les certificats SSL expirés
nmap --script=ssl-cert -p 443 -iL serveurs_web.txt | grep -E "Not valid after|commonName"