05 · Introduction à Nmap

moyen  ·  Durée estimée : 35 min

⚖️ Cadre légal — À LIRE AVANT DE COMMENCER
Scanner un système sans autorisation est un délit pénal (article 323-1 du Code pénal français) passible de 3 ans d'emprisonnement et 100 000 € d'amende.

Dans ce tutoriel, tu ne scanneras QUE :

scanme.nmap.org est un serveur public maintenu par les développeurs de Nmap. Ils autorisent explicitement et gratuitement les scans d'apprentissage. C'est le seul domaine externe que tu utiliseras ici.

🎯 Objectif

Comprendre ce qu'est Nmap, comment l'installer dans la console, réaliser tes premiers scans sur des cibles autorisées, et interpréter les résultats.

Nmap (Network Mapper) est l'outil de référence pour cartographier un réseau et identifier les services exposés. C'est un outil de base pour tout administrateur système et tout analyste sécurité.

1. Installer Nmap dans la console

Dans Alpine (jslinux), Nmap n'est pas installé par défaut. Installe-le avec apk :

apk add nmap
Si tu vois OK: 12 MiB in 15 packages, c'est bon.

Vérifie la version :

nmap --version
Sortie : Nmap version 7.9x ( https://nmap.org )
Si apk add échoue (pas de droits, réseau coupé), tu peux quand même lire ce tutoriel pour comprendre les concepts. Tu appliqueras sur une machine Kali réelle plus tard.
Installe Nmap dans la console et vérifie la version.
nmap --version doit afficher un numéro de version.
2. Premier scan — localhost

Commence toujours par ta propre machine. C'est légal, gratuit, et instructif.

nmap 127.0.0.1

Sortie typique :

Starting Nmap 7.94 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).
All 1000 scanned ports on localhost (127.0.0.1) are closed

Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds

Nmap scanne par défaut les 1000 ports les plus courants en TCP.

Sur jslinux, la plupart des ports seront fermés. C'est normal : la console est minimaliste.
Lance nmap 127.0.0.1 et note combien de ports sont ouverts ou fermés.
Tu dois voir un rapport Nmap avec "Host is up" et une liste de ports.
3. Cible d'apprentissage — scanme.nmap.org

Les développeurs de Nmap maintiennent un serveur public spécifiquement pour l'apprentissage :

nmap scanme.nmap.org

Sortie typique :

Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.15s latency).
Not shown: 993 filtered tcp ports
PORT      STATE    SERVICE
22/tcp    open     ssh
80/tcp    open     http
9929/tcp  open     nping-echo
31337/tcp open     Elite
Limite-toi à scanme.nmap.org. Ce serveur autorise les scans d'apprentissage mais demande de ne pas abuser (pas de scans massifs, pas de scans répétés en boucle). Respecte ça, sinon tu contribues à faire fermer ce service précieux pour tous.
Le port 31337 s'appelle Elite — clin d'œil à la culture hacker des années 90.
Lance nmap scanme.nmap.org et note les ports ouverts.
Tu dois voir au moins les ports 22 (SSH) et 80 (HTTP) ouverts.
4. Modes de scan — -sS, -sT, -sn

Scan SYN (le plus rapide, nécessite root)

nmap -sS 127.0.0.1

Envoie un paquet SYN, attend la réponse, et ferme la connexion sans la finaliser. Discret et rapide.

Scan TCP connect (sans root)

nmap -sT 127.0.0.1

Effectue un vrai handshake TCP complet. Plus visible dans les logs de la cible, mais fonctionne sans privilèges.

Ping scan (découverte d'hôtes)

nmap -sn 127.0.0.0/30

Ne scanne pas les ports. Sert juste à savoir quels hôtes sont en ligne sur un réseau.

nmap -sn 192.168.1.0/24 → liste toutes les machines actives sur ton réseau local.
Dans jslinux, tu peux tester sur 127.0.0.0/30 (4 adresses, dont toi) ou 10.0.2.0/30 (réseau virtuel de la console).
Lance nmap -sn 127.0.0.0/30 et note combien d'hôtes sont en ligne.
Tu dois voir au moins 127.0.0.1 up.
5. Détecter les services — -sV

-sV (version detection) interroge chaque port ouvert pour identifier le service et sa version.

nmap -sV scanme.nmap.org

Sortie :

PORT      STATE SERVICE  VERSION
22/tcp    open  ssh      OpenSSH 6.6.1p1
80/tcp    open  http     Apache httpd 2.4.7
9929/tcp  open  nping-echo
31337/tcp open  Elite

Tu vois maintenant quelle version logicielle tourne. C'est crucial : une version obsolète peut avoir des vulnérabilités connues.

-sV prend plus de temps que nmap seul (chaque port est interrogé activement). Sois patient.
Lance nmap -sV scanme.nmap.org et note la version d'OpenSSH et d'Apache.
Tu dois voir des numéros de version à côté de chaque service.
6. Détecter le système d'exploitation — -O

-O (OS detection) essaie de deviner le système d'exploitation de la cible.

nmap -O scanme.nmap.org

Sortie :

Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.10 - 4.11
-O nécessite les droits root (accès aux sockets bruts). Dans jslinux, tu es utilisateur normal, donc ça peut échouer. Pas grave, retiens le principe.
Teste nmap -O scanme.nmap.org. Si erreur "requires root", c'est normal.
Tu dois voir au moins "Running:" ou un message d'erreur de droits, pas un plantage.
7. Combiner les options

En pratique, on combine souvent plusieurs options :

nmap -sV -O scanme.nmap.org           # services + OS
nmap -sV -p 22,80,443 scanme.nmap.org # services sur ports précis
nmap -A scanme.nmap.org               # mode agressif (tout)
nmap -v scanme.nmap.org               # verbeux

Le mode -A

-A active tout : détection d'OS, de services, de scripts, de traceroute. C'est puissant mais bruyant et lent.

Limiter à des ports précis — -p

nmap -p 22 127.0.0.1          # un seul port
nmap -p 1-100 127.0.0.1       # une plage
nmap -p 22,80,443 127.0.0.1   # une liste
nmap -p- 127.0.0.1            # tous les 65535 ports (long)
-p- (tous les ports) peut prendre des heures sur une cible distante. À réserver aux labos.
Lance nmap -sV -p 22,80 scanme.nmap.org et compare avec le scan complet.
Tu dois obtenir les informations sur les ports 22 et 80 uniquement.
8. Sauvegarder les résultats

Nmap peut exporter ses résultats dans plusieurs formats :

nmap -oN resultat.txt scanme.nmap.org   # format normal
nmap -oX resultat.xml scanme.nmap.org   # format XML
nmap -oG resultat.gnmap scanme.nmap.org # format grepable
nmap -oA resultat scanme.nmap.org       # tous les formats

-oA resultat crée trois fichiers : resultat.nmap, resultat.xml, resultat.gnmap.

-oA est la convention : tu récupères tout sans te poser de questions. Utile pour archiver une mission.
Lance nmap -oA scan_local 127.0.0.1 puis vérifie avec ls que les 3 fichiers existent.
ls scan_local* doit afficher 3 fichiers : .nmap, .xml, .gnmap.
9. Les états de ports

Nmap classe chaque port dans un état :

993 filtered tcp ports (no-response) → 993 ports sur 1000 n'ont pas répondu. Un pare-feu est probablement en place.
Un scan "rapide" avec beaucoup de filtered est souvent plus réaliste qu'un scan "propre". Les vraies cibles ont des pare-feux.
Relis la sortie de ton scan de scanme.nmap.org et compte combien de ports sont open, closed et filtered.
Tu dois pouvoir distinguer clairement les trois états dans la sortie.
🎓 Récapitulatif
apk add nmap              → installer
nmap --version            → vérifier
nmap 127.0.0.1            → scan localhost (1000 ports)
nmap scanme.nmap.org      → cible d'apprentissage publique
nmap -sn 10.0.2.0/30      → ping scan (découverte d'hôtes)
nmap -sS 127.0.0.1        → SYN scan (rapide, root)
nmap -sT 127.0.0.1        → TCP connect (sans root)
nmap -sV scanme.nmap.org  → détection de services
nmap -O scanme.nmap.org   → détection d'OS
nmap -A scanme.nmap.org   → mode agressif (tout)
nmap -p 22,80,443 CIBLE   → ports précis
nmap -p- CIBLE            → tous les 65535 ports
nmap -oA nom CIBLE        → sauvegarder 3 formats

Rappel des états

open       → service actif
closed     → machine répond, rien n'écoute
filtered   → pare-feu bloque
unfiltered → réponse, état indéterminé
🏆 Défi final
  1. Installer Nmap dans la console
  2. Scanner 127.0.0.1 et noter les ports ouverts
  3. Faire un nmap -sn 127.0.0.0/30
  4. Scanner scanme.nmap.org avec -sV
  5. Identifier la version d'OpenSSH et d'Apache
  6. Sauvegarder les résultats avec -oA
  7. Vérifier les 3 fichiers créés
  8. Ouvrir le fichier .nmap avec cat
Tu dois avoir un fichier scan_local.nmap contenant la sortie complète du scan.
Tu viens d'utiliser le même outil que les pentesters professionnels. La différence entre un pro et un débutant n'est pas l'outil, c'est la méthode et le cadre légal.
📖 Pour aller plus loin

Une fois ces bases maîtrisées, tu pourras explorer :

Chacun de ces sujets mériterait son propre tutoriel. On les abordera peut-être plus tard, en fonction de ton parcours.

📚 Sommaire