🌐 Réseau & Reconnaissance

Cours Nmap — De A à Z

Guide complet : scanning réseau, détection de services, scripts NSE, évasion et automatisation.

15Chapitres
80+Exemples
Nmap 7.xVersion
Réseau ScanningPortsNSE ScriptsOSINTReconnaissance
🔍

Aucun résultat pour cette recherche.

Cours Complet Nmap - De A à Z

Table des Matières

  1. Introduction à Nmap
  2. Installation et Configuration
  3. Fondamentaux du Scanning
  4. Découverte d’Hôtes
  5. Techniques de Scan de Ports
  6. Détection de Services et Versions
  7. Détection d’OS
  8. Scripts NSE (Nmap Scripting Engine)
  9. Optimisation et Performance
  10. Évasion et Furtivité
  11. Formats de Sortie
  12. Techniques Avancées
  13. Cas Pratiques Complets

1. Introduction à Nmap

1.1 Qu’est-ce que Nmap ?

Nmap (Network Mapper) est l’outil de découverte réseau et d’audit de sécurité le plus populaire au monde. Créé par Gordon Lyon (Fyodor) en 1997, il est utilisé par des millions de professionnels de la sécurité.

Utilisations légitimes : - Inventaire du réseau - Gestion des mises à jour de services - Surveillance de la disponibilité des services - Audit de sécurité autorisé - Tests de pénétration - Cartographie réseau

Capacités principales : - Découverte d’hôtes (qui est en ligne ?) - Scan de ports (quels ports sont ouverts ?) - Détection de services (quelle version ?) - Détection d’OS (quel système d’exploitation ?) - Scripting (vulnérabilités, configurations, etc.) - Génération de rapports

1.2 Comment Fonctionne Nmap ?

┌─────────────────────────────────────────────┐
│         PROCESSUS DE SCAN NMAP              │
├─────────────────────────────────────────────┤
│                                             │
│  1. DÉCOUVERTE D'HÔTES                      │
│     └─> Qui est en ligne ?                  │
│         (ICMP, ARP, TCP SYN)                │
│                                             │
│  2. SCAN DE PORTS                           │
│     └─> Quels ports sont ouverts ?          │
│         (TCP SYN, Connect, UDP, etc.)       │
│                                             │
│  3. DÉTECTION DE VERSION                    │
│     └─> Quelle version du service ?         │
│         (Probes + fingerprinting)           │
│                                             │  4. DÉTECTION D'OS                          │     └─> Quel système d'exploitation ?       │
│         (TCP/IP stack fingerprinting)       │
│                                             │
│  5. SCRIPTS NSE                             │
│     └─> Vulnérabilités, config, etc.        │
│         (Lua scripts)                       │
│                                             │
│  6. OUTPUT                                  │
│     └─> Rapports (XML, JSON, etc.)          │
│                                             │
└─────────────────────────────────────────────┘

1.3 États des Ports

Nmap peut déterminer 6 états pour un port :

État Description
open Application accepte des connexions TCP/UDP
closed Port accessible mais aucune application en écoute
filtered Firewall/filtrage empêche de déterminer l’état
unfiltered Port accessible mais impossible de déterminer si ouvert/fermé
open|filtered Nmap ne peut pas déterminer (UDP, IP Protocol, FIN, etc.)
closed|filtered Rare, utilisé dans les scans IP ID idle

1.4 Terminologie Essentielle

Host Discovery : Identifier les machines actives sur le réseau Port Scanning : Déterminer quels ports sont ouverts Service Detection : Identifier les services et leurs versions OS Detection : Identifier le système d’exploitation NSE : Nmap Scripting Engine (scripts Lua) Fingerprinting : Identification basée sur les réponses uniques Stealth Scan : Scan furtif pour éviter la détection


2. Installation et Configuration

2.1 Installation sur Linux

Debian/Ubuntu/Kali

# Mise à jour des paquets
sudo apt update

# Installation
sudo apt install nmap

# Vérification
nmap --version

Red Hat/CentOS/Fedora

# Installation
sudo yum install nmap
# ou
sudo dnf install nmap

# Vérification
nmap --version

Arch Linux

sudo pacman -S nmap

Compilation depuis les sources

# Télécharger la dernière version
wget https://nmap.org/dist/nmap-7.94.tar.bz2

# Extraire
tar -xjf nmap-7.94.tar.bz2
cd nmap-7.94

# Compiler et installer
./configure
make
sudo make install

2.2 Installation sur macOS

# Avec Homebrew
brew install nmap

# Ou télécharger le .dmg depuis
# https://nmap.org/download.html

2.3 Installation sur Windows

  1. Télécharger l’installateur depuis https://nmap.org/download.html
  2. Exécuter le fichier .exe
  3. Installer Npcap (capture de paquets Windows)
  4. Suivre l’assistant d’installation
# Vérifier depuis PowerShell
nmap --version

2.4 Vérification de l’Installation

# Version complète
nmap --version

Nmap version 7.94 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.6 openssl-3.0.2 libssh2-1.10.0 libz-1.2.11 libpcre-8.39 libpcap-1.10.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select

# Vérifier les scripts NSE
ls /usr/share/nmap/scripts/ | wc -l

# Vérifier la base de données de services
cat /usr/share/nmap/nmap-services | head

# Aide
nmap --help
man nmap

2.5 Configuration Initiale

# Créer un répertoire pour les scans
mkdir -p ~/nmap_scans
cd ~/nmap_scans

# Mise à jour de la base de données de scripts
sudo nmap --script-updatedb

# Variables d'environnement utiles (optionnel)
export NMAP_PRIVILEGED=1  # Toujours utiliser les privilèges root

3. Fondamentaux du Scanning

3.1 Syntaxe de Base

nmap [Type de Scan] [Options] {cible}

3.2 Spécification de Cibles

IP Simple

nmap 192.168.1.1

Multiples IPs

# Séparées par des espaces
nmap 192.168.1.1 192.168.1.2 192.168.1.3

# Plage
nmap 192.168.1.1-50

# Sous-réseau CIDR
nmap 192.168.1.0/24

# Wildcard
nmap 192.168.1.*

Nom de Domaine

nmap scanme.nmap.org
nmap google.com

Plages Complexes

# Multiples octets
nmap 192.168.1-3.1-50

# IPv6
nmap -6 2001:db8::1

# Exclure des IPs
nmap 192.168.1.0/24 --exclude 192.168.1.1
nmap 192.168.1.0/24 --exclude 192.168.1.1,192.168.1.5

# Liste depuis fichier
nmap -iL targets.txt

# Format targets.txt:
# 192.168.1.1
# 192.168.1.10-20
# 10.0.0.0/24

Génération Aléatoire

# Scanner n cibles aléatoires
nmap -iR 10

# Scanner Internet aléatoirement (attention !)
nmap -iR 0

3.3 Premiers Scans

Scan Simple (Ping + 1000 ports communs)

nmap 192.168.1.1

Starting Nmap 7.94 ( https://nmap.org )
Nmap scan report for 192.168.1.1
Host is up (0.0012s latency).
Not shown: 996 closed tcp ports (reset)
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https
8080/tcp open  http-proxy

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

Scan Verbeux

# -v pour verbose
nmap -v 192.168.1.1

# -vv pour très verbeux
nmap -vv 192.168.1.1

Scan de Tous les Ports

# -p- scanne les 65535 ports
nmap -p- 192.168.1.1

Scan Rapide (Top 100 ports)

nmap -F 192.168.1.1

3.4 Spécification de Ports

# Port spécifique
nmap -p 22 192.168.1.1

# Multiples ports
nmap -p 22,80,443 192.168.1.1

# Plage de ports
nmap -p 1-1000 192.168.1.1

# Tous les ports
nmap -p- 192.168.1.1
# ou
nmap -p 1-65535 192.168.1.1

# Ports par protocole
nmap -p T:80,U:53 192.168.1.1  # T=TCP, U=UDP

# Top ports
nmap --top-ports 10 192.168.1.1
nmap --top-ports 100 192.168.1.1

# Ports par nom
nmap -p http,https,ssh 192.168.1.1

# Tous les ports sauf...
nmap -p- --exclude-ports 80,443 192.168.1.1

4. Découverte d’Hôtes

La découverte d’hôtes (Host Discovery) détermine quelles machines sont actives avant de scanner les ports.

4.1 Techniques de Découverte

Scan Ping par Défaut (ICMP Echo, TCP SYN/80, TCP ACK/443, ICMP Timestamp)

# Scan ping simple
nmap -sn 192.168.1.0/24

Starting Nmap 7.94
Nmap scan report for 192.168.1.1
Host is up (0.0012s latency).
Nmap scan report for 192.168.1.10
Host is up (0.0045s latency).
Nmap scan report for 192.168.1.50
Host is up (0.0023s latency).
Nmap done: 256 IP addresses (3 hosts up) scanned in 3.52 seconds

Note : -sn = “No port scan” (anciennement -sP)

ICMP Echo (Ping Traditionnel)

# ICMP Echo Request
sudo nmap -PE 192.168.1.0/24

# ICMP Timestamp Request
sudo nmap -PP 192.168.1.0/24

# ICMP Address Mask Request
sudo nmap -PM 192.168.1.0/24

TCP SYN Ping

# SYN vers port 80 (par défaut)
sudo nmap -PS 192.168.1.0/24

# SYN vers ports spécifiques
sudo nmap -PS22,80,443,3389 192.168.1.0/24

TCP ACK Ping

# ACK vers port 80 (par défaut)
sudo nmap -PA 192.168.1.0/24

# ACK vers ports spécifiques
sudo nmap -PA22,80,443 192.168.1.0/24

UDP Ping

# UDP vers port 40125 (par défaut)
sudo nmap -PU 192.168.1.0/24

# UDP vers ports spécifiques
sudo nmap -PU53,161,500 192.168.1.0/24

ARP Ping (Réseau Local)

# ARP Scan (plus fiable en local)
sudo nmap -PR 192.168.1.0/24

# Forcer ARP même si autres méthodes sont disponibles
sudo nmap -PR --send-eth 192.168.1.0/24

Désactiver la Découverte d’Hôtes

# Traiter toutes les cibles comme étant en ligne
nmap -Pn 192.168.1.1

# Utile quand les hôtes bloquent ICMP

4.2 Comparaison des Méthodes

# Scan multi-techniques pour fiabilité maximale
sudo nmap -PE -PS22,80,443 -PA80,443 -PU53 192.168.1.0/24

4.3 Exemples Pratiques de Découverte

Découverte Rapide Réseau Local

# ARP scan (le plus rapide et fiable en local)
sudo nmap -sn -PR 192.168.1.0/24

Découverte sur Internet

# TCP SYN ping sur ports communs
sudo nmap -sn -PS22,80,443,3389,8080 scanme.nmap.org

# Désactiver ping si firewalls bloquent
sudo nmap -Pn scanme.nmap.org

Liste Détaillée avec DNS

# Avec résolution DNS
sudo nmap -sn 192.168.1.0/24

# Sans résolution DNS (plus rapide)
sudo nmap -sn -n 192.168.1.0/24

4.4 Sortie Format Liste

# Liste simple des hôtes actifs
nmap -sn 192.168.1.0/24 -oG - | awk '/Up$/{print $2}'

# Ou avec grep
nmap -sn 192.168.1.0/24 | grep "Nmap scan report" | cut -d " " -f 5

5. Techniques de Scan de Ports

5.1 TCP SYN Scan (Stealth Scan)

Le scan par défaut et le plus populaire.

# Nécessite des privilèges root/admin
sudo nmap -sS 192.168.1.1

# Comment ça fonctionne:
# 1. Envoie SYN
# 2. Si SYN/ACK reçu -> port ouvert -> Envoie RST (pas de connexion complète)
# 3. Si RST reçu -> port fermé
# 4. Si rien -> filtered

Avantages : - Furtif (ne complète pas la connexion TCP) - Rapide - Moins de logs

Exemple détaillé :

sudo nmap -sS -p 1-1000 -v 192.168.1.1

PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

5.2 TCP Connect Scan

Scan de connexion complète (utilisé quand pas de privilèges root).

# Sans sudo (utilise la connexion complète)
nmap -sT 192.168.1.1

# Comment ça fonctionne:
# 1. Connexion TCP complète (SYN -> SYN/ACK -> ACK)
# 2. Puis fermeture propre (FIN)

Avantages : - Ne nécessite pas de privilèges root - Plus compatible

Inconvénients : - Plus lent - Plus facilement loggé - Moins furtif

5.3 UDP Scan

Scan des ports UDP (souvent négligés mais importants).

# Scan UDP (lent, nécessite root)
sudo nmap -sU 192.168.1.1

# Ports UDP communs
sudo nmap -sU -p 53,67,68,69,123,161,500 192.168.1.1

# Top 100 ports UDP
sudo nmap -sU --top-ports 100 192.168.1.1

# Combiné TCP + UDP
sudo nmap -sS -sU -p T:80,443,U:53,161 192.168.1.1

États UDP : - open : Service répond - open|filtered : Aucune réponse (le plus commun) - closed : ICMP port unreachable reçu

Note : Le scan UDP est TRÈS lent car il attend des timeouts.

5.4 Scans Furtifs Avancés

TCP NULL Scan

# Aucun flag activé
sudo nmap -sN 192.168.1.1

# Logique:
# - Aucune réponse = open|filtered
# - RST = closed

TCP FIN Scan

# Seulement le flag FIN
sudo nmap -sF 192.168.1.1

# Logique:
# - Aucune réponse = open|filtered
# - RST = closed

TCP Xmas Scan

# Flags FIN, PSH, URG activés (comme un arbre de Noël)
sudo nmap -sX 192.168.1.1

# Logique:
# - Aucune réponse = open|filtered
# - RST = closed

Note : Ces scans ne fonctionnent pas contre Windows (renvoie RST pour tout).

5.5 Autres Scans Spécialisés

TCP ACK Scan (Détection de Firewall)

# Détermine si les ports sont filtrés
sudo nmap -sA 192.168.1.1

# États possibles:
# - unfiltered (RST reçu)
# - filtered (aucune réponse ou ICMP unreachable)

Utilité : Cartographier les règles de firewall, pas pour déterminer ports ouverts.

TCP Window Scan

# Variante du ACK scan, examine la taille de la fenêtre TCP
sudo nmap -sW 192.168.1.1

TCP Maimon Scan

# Envoie FIN/ACK
sudo nmap -sM 192.168.1.1

Idle Scan (Zombie Scan)

# Scan ultra-furtif utilisant un "zombie"
sudo nmap -sI zombie_host:port target

# Exemple
sudo nmap -sI 192.168.1.50 192.168.1.1

# Trouve un zombie approprié
nmap --script ipidseq scanme.nmap.org

Avantage : Votre IP n’apparaît jamais dans les logs de la cible.

IP Protocol Scan

# Détermine quels protocoles IP sont supportés
sudo nmap -sO 192.168.1.1

# Résultats: TCP (6), UDP (17), ICMP (1), etc.

SCTP INIT Scan

# Scan du protocole SCTP
sudo nmap -sY 192.168.1.1

5.6 Tableau Récapitulatif des Scans

Type Option Privilèges Furtivité Vitesse Usage
TCP SYN -sS Root Haute Rapide Par défaut
TCP Connect -sT User Basse Moyen Sans root
UDP -sU Root Moyenne Très lent Services UDP
NULL -sN Root Très haute Rapide Évasion firewall
FIN -sF Root Très haute Rapide Évasion firewall
Xmas -sX Root Très haute Rapide Évasion firewall
ACK -sA Root Haute Rapide Détection firewall
Idle -sI Root Maximale Lent Anonymat total

5.7 Exemples Combinés

# Scan complet : SYN TCP + UDP top ports
sudo nmap -sS -sU --top-ports 100 192.168.1.1

# Scan furtif avec FIN
sudo nmap -sF -p- -T2 192.168.1.1

# Détection de firewall
sudo nmap -sA -p 1-1000 192.168.1.1

6. Détection de Services et Versions

6.1 Détection de Version de Base

# -sV active la détection de version
nmap -sV 192.168.1.1

PORT    STATE SERVICE    VERSION
22/tcp  open  ssh        OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
80/tcp  open  http       Apache httpd 2.4.41 ((Ubuntu))
443/tcp open  ssl/http   Apache httpd 2.4.41 ((Ubuntu))
3306/tcp open mysql      MySQL 5.7.40-0ubuntu0.18.04.1

6.2 Intensité de la Détection

# Intensité 0-9 (défaut: 7)

# Léger (rapide mais moins précis)
nmap -sV --version-intensity 0 192.168.1.1

# Moyen (défaut)
nmap -sV --version-intensity 5 192.168.1.1

# Agressif (lent mais très précis)
nmap -sV --version-intensity 9 192.168.1.1

# Light scan (équivalent à --version-intensity 2)
nmap -sV --version-light 192.168.1.1

# All probes (équivalent à --version-intensity 9)
nmap -sV --version-all 192.168.1.1

6.3 Détection Avancée

# Détection de version verbose
nmap -sV -v 192.168.1.1

# Avec scripts de détection
nmap -sV -sC 192.168.1.1

# Version + OS + Scripts + Traceroute
nmap -A 192.168.1.1

# Scan agressif complet
sudo nmap -sS -sV -O -sC -p- -v 192.168.1.1

6.4 Base de Données de Services

# Fichier: /usr/share/nmap/nmap-services
# Format: service port/protocol frequency

# Exemple:
# http 80/tcp 0.484143
# https 443/tcp 0.472956
# ssh 22/tcp 0.182286

# Voir les services les plus communs
head -20 /usr/share/nmap/nmap-services

# Services sur un port spécifique
grep "^ssh" /usr/share/nmap/nmap-services

6.5 Détection de SSL/TLS

# Identifier les services SSL
nmap -sV --script ssl-cert 192.168.1.1

# Informations détaillées SSL
nmap -sV --script ssl-enum-ciphers -p 443 192.168.1.1

# Vulnérabilités SSL
nmap -sV --script ssl-* 192.168.1.1

6.6 Exemples Pratiques

Identifier un Service Web

nmap -sV -p 80,443,8080,8443 192.168.1.1

PORT     STATE SERVICE VERSION
80/tcp   open  http    nginx 1.18.0
443/tcp  open  ssl/http nginx 1.18.0
8080/tcp open  http    Apache Tomcat 9.0.65

Identifier une Base de Données

nmap -sV -p 1433,3306,5432,27017 192.168.1.1

PORT      STATE SERVICE  VERSION
3306/tcp  open  mysql    MySQL 8.0.30
5432/tcp  open  postgresql PostgreSQL DB 14.5
27017/tcp open  mongodb  MongoDB 5.0.9

Scan Complet avec Version

sudo nmap -sS -sV -p- -T4 -v 192.168.1.1 -oA scan_complet

7. Détection d’OS

7.1 Détection d’OS de Base

# -O active la détection d'OS (nécessite root)
sudo nmap -O 192.168.1.1

Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop

7.2 Détection Agressive

# Détection OS agressive
sudo nmap -O --osscan-guess 192.168.1.1
# ou
sudo nmap -O --fuzzy 192.168.1.1

# Limiter les tentatives
sudo nmap -O --max-os-tries 1 192.168.1.1
sudo nmap -O --max-os-tries 5 192.168.1.1

7.3 Combinaisons Utiles

# OS + Version
sudo nmap -O -sV 192.168.1.1

# Scan agressif (OS + Version + Scripts + Traceroute)
sudo nmap -A 192.168.1.1

# Verbose pour plus de détails
sudo nmap -O -v 192.168.1.1

7.4 Comprendre les Résultats

sudo nmap -O -v 192.168.1.1

Running: Microsoft Windows 10|2016|2019
OS CPE: cpe:/o:microsoft:windows_10 cpe:/o:microsoft:windows_server_2016
OS details: Microsoft Windows 10 1607 - 1903, or Windows Server 2016 - 2019
Network Distance: 2 hops
TCP Sequence Prediction: Difficulty=260 (Good luck!)
IP ID Sequence Generation: Incremental

Explications : - Running : Famille d’OS probable - OS CPE : Common Platform Enumeration - OS details : Versions spécifiques probables - Network Distance : Nombre de hops - TCP Sequence Prediction : Difficulté de prédiction (sécurité) - IP ID Sequence : Type de génération d’ID IP

7.5 Exemples par Type d’OS

Détecter Windows

sudo nmap -O -p 135,139,445,3389 192.168.1.100

Running: Microsoft Windows 10|2016
OS details: Microsoft Windows 10 1809 - 21H2, or Windows Server 2016/2019

Détecter Linux

sudo nmap -O -p 22,80,443 192.168.1.50

Running: Linux 5.X
OS details: Linux 5.4 - 5.10

Détecter Cisco/Routeurs

sudo nmap -O -p 22,23,80 192.168.1.1

Device type: router
Running: Cisco IOS 12.X|15.X
OS details: Cisco IOS 15.2 - 15.6

7.6 Cas où la Détection Échoue

# Si échec de détection
sudo nmap -O 192.168.1.1

Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port

# Solutions:
# 1. Scanner plus de ports
sudo nmap -O -p- 192.168.1.1

# 2. Forcer la détection même avec peu de ports
sudo nmap -O --osscan-guess 192.168.1.1

# 3. Utiliser -Pn si l'hôte ne répond pas au ping
sudo nmap -O -Pn 192.168.1.1

7.7 Fingerprinting Manuel

# Voir le fingerprint brut
sudo nmap -O -v --packet-trace 192.168.1.1

# Soumettre un nouveau fingerprint à Nmap
# Si OS inconnu, Nmap donnera une URL pour soumettre

8. Scripts NSE (Nmap Scripting Engine)

Le NSE permet d’automatiser de nombreuses tâches : détection de vulnérabilités, exploitation, découverte avancée, etc.

8.1 Catégories de Scripts

Catégorie Description
auth Tests d’authentification
broadcast Découverte via broadcast
brute Attaques par force brute
default Scripts de base (lancés avec -sC)
discovery Découverte d’informations
dos Tests de déni de service
exploit Exploitation de vulnérabilités
external Scripts utilisant des ressources externes
fuzzer Fuzzing
intrusive Scripts potentiellement dangereux
malware Détection de malwares
safe Scripts sûrs
version Détection de versions
vuln Détection de vulnérabilités

8.2 Utilisation de Base

# Scripts par défaut
nmap -sC 192.168.1.1
# ou
nmap --script=default 192.168.1.1

# Script spécifique
nmap --script=http-title 192.168.1.1

# Multiples scripts
nmap --script=http-title,http-headers 192.168.1.1

# Wildcards
nmap --script=http-* 192.168.1.1

# Catégorie complète
nmap --script=vuln 192.168.1.1

# Multiples catégories
nmap --script=default,safe 192.168.1.1

# Exclure des scripts
nmap --script="vuln and not dos" 192.168.1.1

8.3 Lister les Scripts

# Tous les scripts
ls /usr/share/nmap/scripts/

# Rechercher un script
ls /usr/share/nmap/scripts/ | grep -i ssh

# Compter les scripts
ls /usr/share/nmap/scripts/*.nse | wc -l

# Informations sur un script
nmap --script-help http-title

# Recherche par catégorie
grep -r "categories.*vuln" /usr/share/nmap/scripts/*.nse

8.4 Arguments de Scripts

# Passer des arguments
nmap --script=http-brute --script-args userdb=users.txt,passdb=pass.txt 192.168.1.1

# Multiples arguments
nmap --script=mysql-brute --script-args mysql-brute.timeout=10s,brute.threads=5 192.168.1.1

# Depuis un fichier
nmap --script=http-brute --script-args-file args.txt 192.168.1.1

8.5 Scripts par Service

Scripts HTTP/HTTPS

# Titre des pages web
nmap --script=http-title -p 80,443 192.168.1.1

# Headers HTTP
nmap --script=http-headers -p 80 192.168.1.1

# Méthodes HTTP autorisées
nmap --script=http-methods -p 80 192.168.1.1

# Énumération de répertoires
nmap --script=http-enum -p 80 192.168.1.1

# Détection de WAF
nmap --script=http-waf-detect -p 80 192.168.1.1

# Robots.txt
nmap --script=http-robots.txt -p 80 192.168.1.1

# Shellshock
nmap --script=http-shellshock -p 80 192.168.1.1

# SQL injection
nmap --script=http-sql-injection -p 80 192.168.1.1

# Vulnérabilités web courantes
nmap --script=http-vuln-* -p 80,443 192.168.1.1

# Apache versions et vulnérabilités
nmap --script=http-apache-negotiation,http-apache-server-status -p 80 192.168.1.1

# Wordpress
nmap --script=http-wordpress-* -p 80 192.168.1.1

# Joomla
nmap --script=http-joomla-brute -p 80 192.168.1.1

Scripts SSH

# Version et algorithmes SSH
nmap --script=ssh2-enum-algos -p 22 192.168.1.1

# Clés d'hôte SSH
nmap --script=ssh-hostkey -p 22 192.168.1.1

# Brute force SSH
nmap --script=ssh-brute -p 22 192.168.1.1

# Méthodes d'authentification
nmap --script=ssh-auth-methods -p 22 192.168.1.1

# Exécution de commandes (si auth réussie)
nmap --script=ssh-run --script-args="ssh-run.cmd='ls -la',ssh-run.username=root,ssh-run.password=toor" -p 22 192.168.1.1

Scripts SMB

# Version SMB
nmap --script=smb-os-discovery -p 445 192.168.1.1

# Énumération de partages
nmap --script=smb-enum-shares -p 445 192.168.1.1

# Énumération d'utilisateurs
nmap --script=smb-enum-users -p 445 192.168.1.1

# Sécurité SMB
nmap --script=smb-security-mode -p 445 192.168.1.1

# Vulnérabilités SMB
nmap --script=smb-vuln-* -p 445 192.168.1.1

# EternalBlue (MS17-010)
nmap --script=smb-vuln-ms17-010 -p 445 192.168.1.1

# SMBv1 (deprecated)
nmap --script=smb-protocols -p 445 192.168.1.1

# Brute force SMB
nmap --script=smb-brute -p 445 192.168.1.1

Scripts DNS

# Zone transfer
nmap --script=dns-zone-transfer --script-args dns-zone-transfer.domain=example.com -p 53 192.168.1.1

# Brute force de sous-domaines
nmap --script=dns-brute --script-args dns-brute.domain=example.com,dns-brute.threads=6 -p 53 192.168.1.1

# Résolution inverse
nmap --script=dns-nsid -p 53 192.168.1.1

# Récursion DNS
nmap --script=dns-recursion -p 53 192.168.1.1

# Cache snooping
nmap --script=dns-cache-snoop -p 53 192.168.1.1

Scripts FTP

# Connexion anonyme
nmap --script=ftp-anon -p 21 192.168.1.1

# Brute force FTP
nmap --script=ftp-brute -p 21 192.168.1.1

# Bounce attack
nmap --script=ftp-bounce -p 21 192.168.1.1

# ProFTPD backdoor
nmap --script=ftp-proftpd-backdoor -p 21 192.168.1.1

# vsftpd backdoor
nmap --script=ftp-vsftpd-backdoor -p 21 192.168.1.1

Scripts MySQL

# Informations MySQL
nmap --script=mysql-info -p 3306 192.168.1.1

# Comptes vides
nmap --script=mysql-empty-password -p 3306 192.168.1.1

# Brute force
nmap --script=mysql-brute -p 3306 192.168.1.1

# Énumération de bases
nmap --script=mysql-databases -p 3306 192.168.1.1

# Variables
nmap --script=mysql-variables -p 3306 192.168.1.1

# Audit
nmap --script=mysql-audit -p 3306 192.168.1.1

Scripts SMTP

# Commandes SMTP
nmap --script=smtp-commands -p 25 192.168.1.1

# Énumération d'utilisateurs
nmap --script=smtp-enum-users -p 25 192.168.1.1

# Open relay
nmap --script=smtp-open-relay -p 25 192.168.1.1

# Vulnérabilités SMTP
nmap --script=smtp-vuln-* -p 25 192.168.1.1

Scripts SNMP

# Informations SNMP
nmap --script=snmp-info -p 161 -sU 192.168.1.1

# Énumération SNMP
nmap --script=snmp-sysdescr,snmp-processes,snmp-netstat -p 161 -sU 192.168.1.1

# Brute force community strings
nmap --script=snmp-brute -p 161 -sU 192.168.1.1

# Interfaces réseau
nmap --script=snmp-interfaces -p 161 -sU 192.168.1.1

8.6 Scripts de Vulnérabilités

# Tous les scripts de vulnérabilités
nmap --script=vuln 192.168.1.1

# Vulnérabilités spécifiques
nmap --script=vuln -p 80,443,445,3389 192.168.1.1

# CVE spécifiques
nmap --script=smb-vuln-ms17-010 -p 445 192.168.1.1
nmap --script=http-vuln-cve2017-5638 -p 80 192.168.1.1

# Heartbleed
nmap --script=ssl-heartbleed -p 443 192.168.1.1

# Shellshock
nmap --script=http-shellshock -p 80 192.168.1.1

# POODLE
nmap --script=ssl-poodle -p 443 192.168.1.1

8.7 Scripts Broadcast (Découverte)

# Découverte réseau sans cible spécifique
nmap --script=broadcast-dhcp-discover

# NetBIOS
nmap --script=broadcast-netbios-master-browser

# Dropbox
nmap --script=broadcast-dropbox-listener

# Avahi/Bonjour
nmap --script=broadcast-avahi-dos

# DHCP
nmap --script=broadcast-dhcp6-discover

8.8 Scripts d’Exploitation

# Backdoors
nmap --script=ftp-vsftpd-backdoor -p 21 192.168.1.1
nmap --script=irc-unrealircd-backdoor -p 6667 192.168.1.1

# SMB exploits (attention!)
nmap --script=smb-vuln-ms17-010 --script-args=unsafe=1 -p 445 192.168.1.1

# RDP BlueKeep
nmap --script=rdp-vuln-ms12-020 -p 3389 192.168.1.1

ATTENTION : Les scripts d’exploitation peuvent crasher les services !

8.9 Créer un Script NSE Personnalisé

-- Fichier: test-script.nse
description = **
Script de test qui affiche des informations basiques.
**

author = "Votre Nom"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"safe", "discovery"}

-- La fonction portrule définit quand le script s'exécute
portrule = function(host, port)
  return port.number == 80 and port.state == "open"
end

-- La fonction action est le code principal
action = function(host, port)
  return "Service HTTP détecté sur " .. host.ip
end

Utilisation :

# Placer le script dans
mkdir -p ~/.nmap/scripts/
cp test-script.nse ~/.nmap/scripts/

# Mettre à jour la DB
nmap --script-updatedb

# Utiliser
nmap --script=test-script -p 80 192.168.1.1

8.10 Exemples de Scans NSE Complets

Audit de Sécurité Web

nmap -sV --script="http-* and not (http-brute or http-slowloris*)" -p 80,443 192.168.1.1

Audit Complet Windows

sudo nmap -sS -sV --script="smb-* and not smb-brute" -p 135,139,445 192.168.1.100

Audit Base de Données

nmap -sV --script="mysql-* and safe" -p 3306 192.168.1.50

Détection de Vulnérabilités Complète

sudo nmap -sS -sV --script="vuln and safe" -p- 192.168.1.1

9. Optimisation et Performance

9.1 Templates de Timing

Nmap propose 6 templates de timing (-T0 à -T5) :

# T0 - Paranoid (ultra lent, furtif)
nmap -T0 192.168.1.1
# Utilité: IDS evasion, 1 port toutes les 5 minutes

# T1 - Sneaky (très lent)
nmap -T1 192.168.1.1
# Utilité: IDS evasion, ~15 secondes entre les probes

# T2 - Polite (lent, poli)
nmap -T2 192.168.1.1
# Utilité: Réduire la charge réseau

# T3 - Normal (défaut)
nmap -T3 192.168.1.1
# ou simplement
nmap 192.168.1.1

# T4 - Aggressive (rapide)
nmap -T4 192.168.1.1
# Utilité: Réseaux rapides et fiables

# T5 - Insane (très rapide)
nmap -T5 192.168.1.1
# Utilité: Réseaux très rapides, peut perdre des résultats

9.2 Paramètres de Timing Personnalisés

# Délai minimum entre probes
nmap --min-rtt-timeout 100ms 192.168.1.1

# Délai maximum entre probes
nmap --max-rtt-timeout 500ms 192.168.1.1

# Délai initial
nmap --initial-rtt-timeout 250ms 192.168.1.1

# Nombre de retransmissions
nmap --max-retries 2 192.168.1.1

# Délai entre scans de chaque hôte
nmap --scan-delay 1s 192.168.1.0/24
nmap --max-scan-delay 5s 192.168.1.0/24

# Taux de paquets par seconde
nmap --min-rate 100 192.168.1.0/24
nmap --max-rate 1000 192.168.1.0/24

# Timeout pour les hôtes
nmap --host-timeout 30m 192.168.1.0/24

9.3 Parallélisation

# Nombre de groupes d'hôtes en parallèle
nmap --min-hostgroup 50 192.168.1.0/24
nmap --max-hostgroup 100 192.168.1.0/24

# Parallélisation des probes
nmap --min-parallelism 10 192.168.1.1
nmap --max-parallelism 100 192.168.1.1

9.4 Optimisations Recommandées

Scan Rapide Réseau Local

# Très rapide pour réseaux fiables
sudo nmap -T4 --min-rate 1000 --max-retries 2 192.168.1.0/24

Scan Complet Rapide

# Scan tous ports rapidement
sudo nmap -sS -p- -T4 --min-rate 1000 192.168.1.1

Scan Furtif Lent

# Très discret
sudo nmap -sS -T1 --max-rate 10 -p 1-1000 192.168.1.1

Scan UDP Optimisé

# UDP est lent, optimisation nécessaire
sudo nmap -sU --top-ports 100 -T4 --min-rate 100 192.168.1.1

9.5 Interface et Fragment

# Spécifier l'interface réseau
nmap -e eth0 192.168.1.1

# MTU personnalisé (fragmentation)
nmap --mtu 16 192.168.1.1
# Valeurs possibles: 8, 16, 24, 32...

# Fragmentation de paquets (évasion firewall)
nmap -f 192.168.1.1    # 8 bytes fragments
nmap -ff 192.168.1.1   # 16 bytes fragments

9.6 Gestion de la Bande Passante

# Limiter la vitesse (important sur connexions lentes)
nmap --max-rate 100 192.168.1.0/24

# Scan poli pour ne pas saturer
nmap -T2 --max-rate 50 192.168.1.0/24

# Scan agressif sur réseau rapide
nmap -T4 --min-rate 1000 192.168.1.0/24

9.7 Exemples de Configurations Optimales

Pour Réseaux Locaux (LAN)

sudo nmap -sS -T4 --min-rate 1000 --max-retries 2 -p- 192.168.1.0/24

Pour Internet (WAN)

sudo nmap -sS -T3 --max-retries 3 -p 1-1000 scanme.nmap.org

Pour IDS Evasion

sudo nmap -sS -T1 --max-rate 5 -p 1-1000 192.168.1.1

Scan Massif (Grand Réseau)

sudo nmap -sS -T4 --top-ports 100 --min-hostgroup 256 10.0.0.0/8

10. Évasion et Furtivité

10.1 Fragmentation de Paquets

# Fragments de 8 octets
nmap -f 192.168.1.1

# Fragments de 16 octets
nmap -ff 192.168.1.1

# MTU personnalisé (multiple de 8)
nmap --mtu 24 192.168.1.1

10.2 Decoys (Leurres)

# Utiliser des IPs leurres aléatoires
nmap -D RND:10 192.168.1.1

# Spécifier des leurres manuellement
nmap -D 192.168.1.50,192.168.1.51,ME,192.168.1.52 192.168.1.1

# ME = votre véritable IP (position dans la liste)
# Si omis, position aléatoire

# Exemple avec 5 leurres
nmap -D decoy1,decoy2,ME,decoy3,decoy4 192.168.1.1

Comment ça fonctionne : - La cible voit des scans de plusieurs IPs - Difficile de déterminer la vraie source - Les leurres doivent être en ligne

10.3 Spoofing d’IP Source

# Spoof l'IP source (nécessite accès aux réponses)
nmap -S 192.168.1.200 192.168.1.1

# Avec interface spécifique
nmap -S 192.168.1.200 -e eth0 192.168.1.1

# Combiné avec -Pn (si routage impossible)
nmap -S 192.168.1.200 -Pn 192.168.1.1

Note : Difficile à utiliser car vous ne recevrez pas les réponses.

10.4 Spoofing de Port Source

# Utiliser un port source spécifique
nmap --source-port 53 192.168.1.1
# ou
nmap -g 53 192.168.1.1

# Ports sources courants qui peuvent bypasser des firewalls:
# 53 (DNS)
# 20 (FTP-DATA)
# 88 (Kerberos)

10.5 Spoofing de 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

# Vendor spécifique
nmap --spoof-mac Apple 192.168.1.1
nmap --spoof-mac Dell 192.168.1.1

10.6 Randomisation

# Randomiser l'ordre des hôtes
nmap --randomize-hosts 192.168.1.0/24

# Utile pour :
# - Éviter la détection de patterns
# - Distribuer la charge

10.7 Data Payloads Personnalisés

# Ajouter des données aléatoires
nmap --data-length 25 192.168.1.1

# Données hexadécimales spécifiques
nmap --data-string "custom_payload" 192.168.1.1

# Données hex
nmap --data "\x00\x01\x02" 192.168.1.1

10.8 Manipulation TTL et Options IP

# TTL personnalisé
nmap --ttl 64 192.168.1.1

# Options IP
nmap --ip-options "L 192.168.1.1 192.168.1.254" 192.168.1.100

10.9 Scans Proxy et Relay

# Via proxy FTP
nmap --proxies ftp://proxy.example.com:21 192.168.1.1

# HTTP/SOCKS proxy
nmap --proxies http://proxy:8080 192.168.1.1
nmap --proxies socks4://proxy:1080 192.168.1.1

# Chaîne de proxies
nmap --proxies http://proxy1:8080,socks4://proxy2:1080 192.168.1.1

10.10 Badsum (Checksums Invalides)

# Envoyer paquets avec mauvais checksum
nmap --badsum 192.168.1.1

# Seuls les firewalls/IDS répondront
# Les OS modernes ignoreront
# Utile pour identifier la présence de firewall

10.11 Scans Furtifs Combinés

Maximum Stealth

sudo nmap -sS -f -T1 --data-length 50 \
  --randomize-hosts --spoof-mac 0 \
  -D RND:5 192.168.1.0/24

Bypass Firewall Commun

sudo nmap -sS -f --source-port 53 \
  --data-length 20 -T2 192.168.1.1

IDS Evasion

sudo nmap -sN -f --mtu 16 -T0 \
  --max-rate 1 -D RND:10 192.168.1.1

10.12 Techniques Anti-IDS/IPS

# Timing ultra-lent
nmap -T0 --scan-delay 5s --max-rate 1 192.168.1.1

# Fragmentation + décoys + timing lent
nmap -f -D RND:10 -T1 192.168.1.1

# Port source DNS + fragmentation
nmap --source-port 53 -f 192.168.1.1

# FIN scan + fragmentation + données aléatoires
sudo nmap -sF -f --data-length 50 192.168.1.1

10.13 Tester la Détection

# Scan normal (sera détecté)
sudo nmap -sS -T4 192.168.1.1

# Scan furtif
sudo nmap -sS -f -T0 -D RND:5 --source-port 53 192.168.1.1

# Comparer les logs IDS/IPS

11. Formats de Sortie

11.1 Formats Disponibles

# Normal (sortie standard)
nmap -oN scan.txt 192.168.1.1

# XML (parsable, pour outils)
nmap -oX scan.xml 192.168.1.1

# Grepable (facile à grep)
nmap -oG scan.gnmap 192.168.1.1

# Tous les formats à la fois
nmap -oA scan 192.168.1.1
# Crée: scan.nmap, scan.xml, scan.gnmap

# Script kiddie format (pour s'amuser)
nmap -oS scan.skid 192.168.1.1

11.2 Sortie Normale (-oN)

nmap -oN scan_normal.txt 192.168.1.1

# Contenu:
# Starting Nmap 7.94 ( https://nmap.org )
# Nmap scan report for 192.168.1.1
# Host is up (0.0012s latency).
# PORT    STATE SERVICE
# 22/tcp  open  ssh
# 80/tcp  open  http

11.3 Sortie XML (-oX)

nmap -oX scan.xml 192.168.1.1

# Utilisable avec:
# - XSLT pour HTML
# - Scripts Python/Perl
# - Import dans bases de données
# - Outils comme Metasploit, Nessus

# Convertir XML en HTML
xsltproc scan.xml -o scan.html

11.4 Sortie Grepable (-oG)

nmap -oG scan.gnmap 192.168.1.0/24

# Format:
# Host: 192.168.1.1 () Status: Up
# Host: 192.168.1.1 () Ports: 22/open/tcp//ssh///

# Exemples d'extraction:
# IPs avec port 80 ouvert
grep "80/open" scan.gnmap | cut -d " " -f 2

# Tous les hôtes actifs
grep "Status: Up" scan.gnmap | cut -d " " -f 2

# Ports ouverts pour une IP
grep "192.168.1.1" scan.gnmap | grep -oP '\d+/open'

11.5 Redirection vers la Console

# Normal + console
nmap 192.168.1.1 -oN scan.txt

# Seulement console (supprimer output normal)
nmap 192.168.1.1 > /dev/null

# Append (ajouter à un fichier existant)
nmap --append-output -oN scan.txt 192.168.1.1

11.6 Exemples Pratiques de Parsing

Parser XML avec Python

#!/usr/bin/env python3
import xml.etree.ElementTree as ET

tree = ET.parse('scan.xml')
root = tree.getroot()

for host in root.findall('host'):
    ip = host.find('address').get('addr')
    for port in host.findall('.//port'):
        portid = port.get('portid')
        state = port.find('state').get('state')
        if state == 'open':
            print(f"{ip}:{portid}")

Parser Grepable avec Bash

#!/bin/bash
# Extraire les IPs avec SSH ouvert

grep "22/open" scan.gnmap | while read line; do
    ip=$(echo $line | cut -d " " -f 2)
    echo $ip
done

Parser avec awk

# Hosts actifs
awk '/Status: Up/{print $2}' scan.gnmap

# Ports ouverts par IP
awk -F'[: ]' '/Ports:/{print $2, $5, $8, $11}' scan.gnmap

11.7 Export et Reporting

# Scan complet avec tous les formats
sudo nmap -sS -sV -O -A -p- \
  -oA full_scan \
  192.168.1.0/24

# Convertir XML en HTML
xsltproc /usr/share/nmap/nmap.xsl full_scan.xml -o report.html

# Ou utiliser des outils tiers:
# - Nmap-XML-to-CSV
# - Nmap-parse
# - XSLTproc avec templates custom

11.8 Sortie Verbale

# Verbosité niveau 1
nmap -v 192.168.1.1

# Verbosité niveau 2
nmap -vv 192.168.1.1

# Debug (très détaillé)
nmap -d 192.168.1.1
nmap -dd 192.168.1.1  # Debug niveau 2

# Raisons des états de ports
nmap --reason 192.168.1.1

# Paquets envoyés/reçus
nmap --packet-trace 192.168.1.1

# Informations de timing
nmap --stats-every 10s 192.168.1.0/24

11.9 Formats Combinés

# XML + Normal
nmap -oX scan.xml -oN scan.txt 192.168.1.1

# Tous formats + verbose
nmap -v -oA complete_scan 192.168.1.1

# Grepable + append
nmap --append-output -oG scans.gnmap 192.168.1.10
nmap --append-output -oG scans.gnmap 192.168.1.20

12. Techniques Avancées

12.1 Scan IPv6

# Activer IPv6
nmap -6 2001:db8::1

# Scan de sous-réseau IPv6
nmap -6 2001:db8::/64

# Découverte IPv6 locale
nmap -6 --script=targets-ipv6-multicast-* fe80::/64

# Avec détection de version
nmap -6 -sV 2001:db8::1

12.2 Scan à Travers des Proxies

# HTTP proxy
nmap --proxies http://proxy.example.com:8080 192.168.1.1

# SOCKS4
nmap --proxies socks4://proxy:1080 192.168.1.1

# Chaîne de proxies
nmap --proxies http://p1:8080,socks4://p2:1080 target.com

12.3 Firewall/IDS Testing

# Tester les règles firewall avec ACK scan
sudo nmap -sA -p 1-1000 192.168.1.1

# Identifier présence de firewall avec badsum
nmap --badsum 192.168.1.1

# Tester filtrage avec différents scans
sudo nmap -sS -sF -sX -sN -p 80 192.168.1.1

12.4 Idle Scan Avancé

# 1. Trouver un zombie approprié
nmap --script ipidseq 192.168.1.0/24

# 2. Utiliser le zombie
sudo nmap -sI zombie_ip:port target_ip

# Exemple complet
sudo nmap -Pn -p- -sI 192.168.1.50 192.168.1.100

12.5 Scan de Services Spécifiques

RPC Services

# Énumération RPC
nmap -sV --script=rpcinfo 192.168.1.1

# RPC grind
nmap --script=rpc-grind -p 111 192.168.1.1

VoIP (SIP)

# Énumération SIP
nmap -sU -p 5060 --script=sip-enum-users 192.168.1.1

# Méthodes SIP
nmap -sU -p 5060 --script=sip-methods 192.168.1.1

SCADA/ICS

# Modbus
nmap -p 502 --script=modbus-discover 192.168.1.1

# DNP3
nmap -p 20000 --script=dnp3-info 192.168.1.1

# BACnet
nmap -sU -p 47808 --script=bacnet-info 192.168.1.1

12.6 Cloud et Containers

Docker

# Scanner Docker daemon
nmap -p 2375,2376 --script=docker-* 192.168.1.1

Kubernetes

# API Server
nmap -p 6443,8080 --script=http-* 192.168.1.1

# Kubelet
nmap -p 10250,10255 192.168.1.1

12.7 Active Directory Enumeration

# LDAP
nmap -p 389,636 --script=ldap-* 192.168.1.1

# Kerberos
nmap -p 88 --script=krb5-enum-users --script-args krb5-enum-users.realm='DOMAIN.LOCAL' 192.168.1.1

# SMB complet
sudo nmap -p 445 --script='smb-enum-*' 192.168.1.1

# Domain Controllers
nmap -p 53,88,135,139,389,445,464,636,3268,3269 192.168.1.1

12.8 Scan de Bases de Données

# Scan multi-DB
nmap -p 1433,3306,5432,1521,27017,6379,9200 \
  --script='*-info' 192.168.1.0/24

# MongoDB
nmap -p 27017 --script=mongodb-* 192.168.1.1

# Redis
nmap -p 6379 --script=redis-info 192.168.1.1

# Elasticsearch
nmap -p 9200 --script=http-* 192.168.1.1

# Oracle
nmap -p 1521 --script=oracle-* 192.168.1.1

12.9 Scan SSL/TLS Avancé

# Audit SSL complet
nmap -p 443 --script='ssl-*' 192.168.1.1

# Certificats détaillés
nmap -p 443 --script=ssl-cert -v 192.168.1.1

# Ciphers supportés
nmap -p 443 --script=ssl-enum-ciphers 192.168.1.1

# Vulnérabilités SSL
nmap -p 443 --script='ssl-* and vuln' 192.168.1.1

# Heartbleed
nmap -p 443 --script=ssl-heartbleed 192.168.1.1

# CCS Injection
nmap -p 443 --script=ssl-ccs-injection 192.168.1.1

# POODLE
nmap -p 443 --script=ssl-poodle 192.168.1.1

12.10 Scan de Réseaux Sans Fil

# Nécessite interface en mode monitor
# Utiliser airodump-ng puis nmap sur les IPs trouvées

# Scanner routeurs WiFi communs
nmap -p 80,443,8080 --script=http-title 192.168.0.1,192.168.1.1,10.0.0.1

# Détection de routeurs
nmap --script=broadcast-dhcp-discover

12.11 Scan Multi-Phases

# Phase 1: Découverte
sudo nmap -sn -oG hosts.txt 192.168.1.0/24

# Phase 2: Port scan rapide des hôtes actifs
cat hosts.txt | grep Up | cut -d " " -f 2 > alive.txt
sudo nmap -iL alive.txt -F -oA phase2

# Phase 3: Scan complet des ports intéressants
# (identifier manuellement depuis phase2)
sudo nmap -p- -A -oA phase3 192.168.1.50

# Phase 4: Scan de vulnérabilités ciblé
nmap --script=vuln -p 80,443,445 -oA phase4 192.168.1.50

12.12 Automatisation avec Scripts

Bash Script Complet

#!/bin/bash
# scan_auto.sh

NETWORK="192.168.1.0/24"
OUTPUT_DIR="./scans"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $OUTPUT_DIR

# Phase 1: Découverte
echo "[*] Phase 1: Host Discovery"
sudo nmap -sn $NETWORK -oA $OUTPUT_DIR/discovery_$DATE

# Phase 2: Port Scan
echo "[*] Phase 2: Port Scanning"
sudo nmap -sS --top-ports 1000 $NETWORK -oA $OUTPUT_DIR/portscan_$DATE

# Phase 3: Service Detection
echo "[*] Phase 3: Service Detection"
sudo nmap -sV -p- $NETWORK -oA $OUTPUT_DIR/services_$DATE

# Phase 4: Vulnerability Scan
echo "[*] Phase 4: Vulnerability Scanning"
nmap --script=vuln $NETWORK -oA $OUTPUT_DIR/vulns_$DATE

# Générer rapport HTML
echo "[*] Generating HTML report"
xsltproc $OUTPUT_DIR/vulns_$DATE.xml -o $OUTPUT_DIR/report_$DATE.html

echo "[+] Scan complete! Results in $OUTPUT_DIR/"

13. Cas Pratiques Complets

13.1 Cas Pratique 1: Audit Réseau d’Entreprise

Objectif: Cartographier et auditer le réseau d’une PME (192.168.10.0/24)

Étape 1: Découverte Initiale

# Créer workspace
mkdir -p ~/scans/entreprise_audit
cd ~/scans/entreprise_audit

# Découverte d'hôtes (rapide)
sudo nmap -sn -PE -PS22,80,443 -PA80 192.168.10.0/24 -oA 01_discovery

# Résultats
Nmap scan report for 192.168.10.1 (Gateway)
Nmap scan report for 192.168.10.10 (DC)
Nmap scan report for 192.168.10.20 (File Server)
Nmap scan report for 192.168.10.50 (Web Server)
...
Total: 45 hosts up

Étape 2: Port Scanning

# Top 1000 ports sur tous les hôtes
sudo nmap -sS --top-ports 1000 -T4 192.168.10.0/24 -oA 02_portscan

# Analyse des résultats
grep "open" 02_portscan.gnmap | wc -l
# 234 ports ouverts trouvés

Étape 3: Identification des Services Critiques

# Cibler les serveurs identifiés
sudo nmap -sS -sV -p- -T4 \
  192.168.10.10,192.168.10.20,192.168.10.50 \
  -oA 03_services_critiques

# Serveurs trouvés:
# 192.168.10.10: Domain Controller (AD, DNS, LDAP)
# 192.168.10.20: File Server (SMB, FTP)
# 192.168.10.50: Web Server (HTTP, HTTPS, MySQL)

Étape 4: Détection OS et Services

# Scan détaillé avec OS detection
sudo nmap -sS -sV -O -A \
  192.168.10.10,192.168.10.20,192.168.10.50 \
  -oA 04_detailed_scan

# Résultats:
# DC: Windows Server 2019
# File: Windows Server 2016
# Web: Ubuntu 20.04 (Apache 2.4, MySQL 8.0)

Étape 5: Scan de Vulnérabilités

# Domain Controller
nmap --script='smb-vuln-*' -p 445 192.168.10.10 -oA 05_dc_vulns

# Web Server
nmap --script='http-vuln-*,ssl-*' -p 80,443 192.168.10.50 -oA 05_web_vulns

# File Server
nmap --script='smb-enum-*,ftp-*' -p 21,445 192.168.10.20 -oA 05_file_vulns

Étape 6: Rapport Final

# Générer rapport HTML
xsltproc 05_web_vulns.xml -o rapport_final.html

# Résumé dans un fichier
cat > resume.txt << EOF
AUDIT RÉSEAU ENTREPRISE
Date: $(date)
Réseau: 192.168.10.0/24

STATISTIQUES:
- Hôtes actifs: 45
- Ports ouverts: 234
- Services critiques: 3

SERVEURS PRINCIPAUX:
1. DC (192.168.10.10) - Windows Server 2019
2. File Server (192.168.10.20) - Windows Server 2016
3. Web Server (192.168.10.50) - Ubuntu 20.04

VULNÉRABILITÉS TROUVÉES:
- SMBv1 activé sur File Server
- SSL/TLS faible sur Web Server (TLSv1.0)
- FTP anonyme actif

RECOMMANDATIONS:
1. Désactiver SMBv1
2. Mettre à jour TLS (minimum 1.2)
3. Désactiver FTP anonyme
4. Patcher les systèmes
EOF

13.2 Cas Pratique 2: Test de Pénétration Web

Objectif: Auditer une application web (https://webapp.example.com)

Reconnaissance

# Résolution et découverte
nmap -sV webapp.example.com -oA web_recon

# Résultats:
# 80/tcp  open  http     nginx 1.18.0
# 443/tcp open  ssl/http nginx 1.18.0

Scan des Ports Web

# Tous les ports web communs
nmap -p 80,443,8000,8080,8443,8888 webapp.example.com -oA web_ports

Énumération HTTP

# Scripts HTTP complets
nmap -p 80,443 --script='http-*' webapp.example.com -oA http_enum

# Résultats intéressants:
# - /admin/ (403 Forbidden)
# - /backup/ (Directory listing)
# - /.git/ (Exposed)

Détection de Vulnérabilités Web

# Vulnérabilités web
nmap -p 80,443 --script='http-vuln-*' webapp.example.com -oA web_vulns

# Shellshock
nmap -p 80 --script=http-shellshock webapp.example.com

# SQL Injection
nmap -p 80 --script=http-sql-injection webapp.example.com

# XSS
nmap -p 80 --script=http-stored-xss,http-dombased-xss webapp.example.com

Audit SSL/TLS

# Audit SSL complet
nmap -p 443 --script='ssl-*' webapp.example.com -oA ssl_audit

# Certificat
nmap -p 443 --script=ssl-cert -v webapp.example.com

# Ciphers
nmap -p 443 --script=ssl-enum-ciphers webapp.example.com

# Vulnérabilités SSL
nmap -p 443 --script=ssl-heartbleed,ssl-poodle,ssl-ccs-injection webapp.example.com

Énumération d’Applications

# Détecter CMS
nmap -p 80,443 --script=http-wordpress-enum webapp.example.com
nmap -p 80,443 --script=http-drupal-enum webapp.example.com

# WAF Detection
nmap -p 80,443 --script=http-waf-detect,http-waf-fingerprint webapp.example.com

13.3 Cas Pratique 3: Audit Active Directory

Objectif: Auditer un environnement Active Directory

Identification du Domain Controller

# Scan des ports AD typiques
nmap -p 53,88,135,139,389,445,464,636,3268,3269,3389 \
  10.10.10.0/24 -oA ad_discovery

Énumération LDAP

# Information LDAP
nmap -p 389,636 --script=ldap-rootdse 10.10.10.10

# Recherche LDAP
nmap -p 389 --script=ldap-search --script-args \
  'ldap.username="CN=admin,DC=domain,DC=local",ldap.password=pass' \
  10.10.10.10

Énumération SMB Complète

# OS et domaine
nmap -p 445 --script=smb-os-discovery 10.10.10.10

# Sécurité SMB
nmap -p 445 --script=smb-security-mode 10.10.10.10

# Énumération de partages
nmap -p 445 --script=smb-enum-shares 10.10.10.10

# Énumération d'utilisateurs
nmap -p 445 --script=smb-enum-users 10.10.10.10

# Sessions
nmap -p 445 --script=smb-enum-sessions 10.10.10.10

# Groupes
nmap -p 445 --script=smb-enum-groups 10.10.10.10

Kerberos

# Énumération d'utilisateurs Kerberos
nmap -p 88 --script=krb5-enum-users \
  --script-args krb5-enum-users.realm='DOMAIN.LOCAL',userdb=users.txt \
  10.10.10.10

Vulnérabilités AD

# MS17-010 (EternalBlue)
nmap -p 445 --script=smb-vuln-ms17-010 10.10.10.0/24

# MS08-067
nmap -p 445 --script=smb-vuln-ms08-067 10.10.10.0/24

# Toutes les vulns SMB
nmap -p 445 --script='smb-vuln-*' 10.10.10.0/24

RDP Audit

# Énumération RDP
nmap -p 3389 --script=rdp-enum-encryption 10.10.10.0/24

# Vulnérabilités RDP
nmap -p 3389 --script=rdp-vuln-ms12-020 10.10.10.0/24

13.4 Cas Pratique 4: Scan Furtif IDS Evasion

Objectif: Scanner une cible avec IDS sans se faire détecter

Préparation

# Identifier si IDS présent (test)
sudo nmap -sS -T4 target.com -p 1-1000

# Si blocage/alertes -> méthode furtive nécessaire

Scan Furtif Phase 1: Découverte

# Très lent, décoys, fragmentation
sudo nmap -sn -T0 --max-rate 1 \
  -D RND:10 \
  --randomize-hosts \
  target_network/24 \
  -oA stealth_discovery

Scan Furtif Phase 2: Port Scanning

# FIN scan + fragmentation + timing ultra-lent
sudo nmap -sF -f --mtu 16 \
  -T0 --scan-delay 10s --max-rate 1 \
  --data-length 50 \
  --randomize-hosts \
  -D RND:15 \
  --source-port 53 \
  -p 1-1000 \
  target.com \
  -oA stealth_portscan

Scan Furtif Phase 3: Version Detection

# Version light + timing lent
sudo nmap -sV --version-light \
  -T1 --scan-delay 15s \
  -f --data-length 25 \
  -D RND:10 \
  --source-port 53 \
  -p ports_found \
  target.com \
  -oA stealth_version

Scan Furtif Phase 4: Idle Scan

# Trouver zombie
nmap --script ipidseq possible_zombies/24

# Utiliser zombie (votre IP n'apparaîtra jamais)
sudo nmap -Pn -p- -sI zombie_ip target.com \
  -oA ultimate_stealth

13.5 Cas Pratique 5: Scan Rapide de Grand Réseau

Objectif: Scanner rapidement un réseau /16 (65536 hôtes)

Stratégie

# Top 100 ports seulement
# Timing agressif
# Parallélisation maximale

sudo nmap -sS \
  --top-ports 100 \
  -T4 \
  --min-hostgroup 256 \
  --min-rate 1000 \
  --max-retries 2 \
  10.0.0.0/16 \
  -oA large_network_scan

# Avec verbose pour suivre progression
sudo nmap -sS --top-ports 100 -T4 \
  --min-hostgroup 256 --min-rate 1000 \
  --stats-every 30s \
  -v 10.0.0.0/16 \
  -oA large_network_scan

Analyse Post-Scan

# Compter hôtes actifs
grep "Status: Up" large_network_scan.gnmap | wc -l

# Lister IPs avec port 80 ouvert
grep "80/open" large_network_scan.gnmap | cut -d " " -f 2 > web_servers.txt

# Statistiques par port
for port in 22 80 443 3389; do
  count=$(grep "${port}/open" large_network_scan.gnmap | wc -l)
  echo "Port $port: $count hosts"
done

13.6 Cas Pratique 6: Scan de Cloud Infrastructure (AWS)

Objectif: Scanner une infrastructure AWS (avec autorisation)

# Scanner un security group
# Exemple: web tier dans 10.0.1.0/24

# Web servers
nmap -Pn -p 80,443,8080,8443 \
  --script='http-*' \
  10.0.1.0/24 \
  -oA aws_web_tier

# App servers
nmap -Pn -p 8080,8443,9000,9090 \
  10.0.2.0/24 \
  -oA aws_app_tier

# Database tier
nmap -Pn -p 3306,5432,1433,27017 \
  -sV \
  10.0.3.0/24 \
  -oA aws_db_tier

# Vérifier security groups
# Les instances EC2 peuvent bloquer ICMP -> utiliser -Pn

Annexes

A. Référence Rapide des Commandes

# DÉCOUVERTE D'HÔTES
nmap -sn <target>              # Ping scan
nmap -Pn <target>              # Pas de ping
nmap -PS <target>              # TCP SYN ping
nmap -PA <target>              # TCP ACK ping
nmap -PU <target>              # UDP ping

# SCAN DE PORTS
nmap -sS <target>              # SYN scan (stealth)
nmap -sT <target>              # TCP Connect scan
nmap -sU <target>              # UDP scan
nmap -sN <target>              # NULL scan
nmap -sF <target>              # FIN scan
nmap -sX <target>              # Xmas scan

# PORTS
nmap -p 80 <target>            # Port spécifique
nmap -p 1-1000 <target>        # Plage
nmap -p- <target>              # Tous les ports
nmap --top-ports 100 <target>  # Top 100

# DÉTECTION
nmap -sV <target>              # Version
nmap -O <target>               # OS
nmap -A <target>               # Agressif (OS+Version+Scripts+Traceroute)

# SCRIPTS NSE
nmap -sC <target>              # Scripts par défaut
nmap --script=<name> <target>  # Script spécifique
nmap --script=vuln <target>    # Vulnérabilités

# TIMING
nmap -T0 <target>              # Paranoid
nmap -T3 <target>              # Normal (défaut)
nmap -T5 <target>              # Insane

# ÉVASION
nmap -f <target>               # Fragmentation
nmap -D RND:10 <target>        # Decoys
nmap --source-port 53 <target> # Port source

# OUTPUT
nmap -oN file.txt <target>     # Normal
nmap -oX file.xml <target>     # XML
nmap -oG file.gnmap <target>   # Grepable
nmap -oA file <target>         # Tous

B. Ports Communs

20-21   FTP
22      SSH
23      Telnet
25      SMTP
53      DNS
67-68   DHCP
69      TFTP
80      HTTP
110     POP3
123     NTP
135     MS RPC
137-139 NetBIOS
143     IMAP
161-162 SNMP
389     LDAP
443     HTTPS
445     SMB
465     SMTPS
514     Syslog
587     SMTP (submission)
636     LDAPS
993     IMAPS
995     POP3S
1433    MS SQL
1521    Oracle
2049    NFS
3306    MySQL
3389    RDP
5432    PostgreSQL
5900    VNC
6379    Redis
8080    HTTP Alt
8443    HTTPS Alt
27017   MongoDB

C. Scripts NSE par Catégorie

# Découverte
nmap --script=discovery <target>

# Authentification
nmap --script=auth <target>

# Brute force
nmap --script=brute <target>

# Vulnérabilités
nmap --script=vuln <target>

# Exploit
nmap --script=exploit <target>

# Malware
nmap --script=malware <target>

# Broadcast
nmap --script=broadcast

# Safe
nmap --script=safe <target>

# Intrusive
nmap --script=intrusive <target>

D. Expressions de Filtrage

# Combinaisons de catégories
nmap --script="default and safe" <target>
nmap --script="vuln and not dos" <target>
nmap --script="discovery or safe" <target>

# Wildcards
nmap --script="http-*" <target>
nmap --script="smb-vuln-*" <target>

# Exclure
nmap --script="all and not (brute or dos)" <target>

E. Exemples de One-Liners Utiles

# Scan rapide top 1000 ports
nmap -T4 -F <target>

# Scan complet agressif
sudo nmap -sS -sV -O -A -p- -T4 <target> -oA scan

# Scan furtif
sudo nmap -sS -f -T1 -D RND:10 <target>

# Trouver serveurs web
nmap -p 80,443 --open -oG - <network>/24 | grep "/open"

# Scan UDP rapide
sudo nmap -sU --top-ports 20 -T4 <target>

# Vulnérabilités critiques
nmap --script="vuln and safe" -p 80,443,445 <target>

# Audit complet serveur web
nmap -p 80,443 -sV --script="http-*,ssl-*" <target>

# Découverte réseau local
sudo nmap -sn -PR <network>/24

# Export IPs actives
nmap -sn <network>/24 -oG - | awk '/Up$/{print $2}'

F. Résolution de Problèmes

Nmap lent ?

# Augmenter le timing
nmap -T4 <target>

# Limiter les ports
nmap --top-ports 100 <target>

# Désactiver résolution DNS
nmap -n <target>

# Augmenter parallélisation
nmap --min-parallelism 100 <target>

Firewall bloque ?

# Désactiver ping
nmap -Pn <target>

# Changer port source
nmap --source-port 53 <target>

# Fragmenter
nmap -f <target>

# Utiliser décoys
nmap -D RND:10 <target>

Résultats incohérents ?

# Augmenter tentatives
nmap --max-retries 5 <target>

# Timeout plus long
nmap --host-timeout 30m <target>

# Scan plus lent
nmap -T2 <target>

G. Ressources et Documentation

Documentation Officielle : - https://nmap.org/book/ - https://nmap.org/docs.html - man nmap

Tutoriels : - https://nmap.org/book/man.html (manuel complet) - https://nmap.org/nsedoc/ (NSE documentation)

Livres : - “Nmap Network Scanning” par Gordon Lyon - “Nmap 6: Network Exploration and Security Auditing”

Environnements de Pratique : - scanme.nmap.org (cible officielle de test) - HackTheBox - TryHackMe - VulnHub

Outils Complémentaires : - Zenmap (GUI pour Nmap) - Masscan (scan très rapide) - Ndiff (comparaison de scans) - Nmap-parse (parsing de résultats)


Conclusion

Nmap est un outil extrêmement puissant et polyvalent qui nécessite:

  1. Pratique régulière - Testez sur des environnements autorisés
  2. Compréhension des protocoles - TCP/IP, UDP, etc.
  3. Connaissance des services - Savoir quoi chercher
  4. Respect de la loi - Scanner uniquement ce qui est autorisé
  5. Interprétation des résultats - Comprendre ce que Nmap trouve

AVERTISSEMENT LÉGAL : - Scanner des systèmes sans autorisation est ILLÉGAL - Obtenez toujours une autorisation écrite - Utilisez scanme.nmap.org ou vos propres systèmes - Respectez les lois locales et internationales

Bonnes pratiques : - Documentez vos scans - Utilisez des workspaces séparés - Sauvegardez tous les résultats (-oA) - Comprenez l’impact de vos scans - Communiquez avec les propriétaires des systèmes


Bonne pratique et scanning responsable !