Les bases indispensables : reconnaissance, scan et énumération des cibles
Principes, lois, cadres légaux et méthodologie du pentest
Un ethical hacker est un expert en sécurité qui teste les systèmes avec une autorisation écrite préalable, dans le but légal et éthique de découvrir les failles avant que des attaquants malveillants ne les exploitent. La différence fondamentale avec un « black hat » réside dans le consentement et la portée (scope) définis contractuellement.
Il existe trois grandes catégories d'acteurs :
Red Team simule des attaques réelles ; Blue Team défend et répond ; Purple Team fusionne les deux pour améliorer la détection.
Le processus CEH/PTES se déroule en 5 phases systématiques :
Pour pratiquer en toute légalité, montez un environnement isolé (VirtualBox / VMware) :
# Vérifier l'environnement Kali kali@kali:~$ uname -a Linux kali 6.x... #1 SMP PREEMPT ... kali@kali:~$ ip a # Adresses réseau kali@kali:~$ cat /etc/issue # Version de la distribution
Vous refusez et exigez une autorisation écrite précisant le périmètre et la durée. En France, l'accès sans autorisation est puni par l'article 323-1, même en lab cela s'apprend : toujours Host-Only ou NAT isolé.
OSINT, footprinting, collecte d'informations passive et active
La reconnaissance (ou footprinting) constitue la première phase de toute méthodologie de pentest. Elle consiste à collecter un maximum d'informations sur la cible avant même de l'attaquer. On distingue deux approches fondamentales :
WHOIS permet de retrouver le propriétaire d'un nom de domaine ou d'une plage d'adresses IP. Les informations WHOIS incluent le registrant, le registrar, les dates de création/expiration, et les serveurs DNS de nom. Les RIRs (Regional Internet Registries) gèrent l'allocation des adresses IP par région : ARIN (Amérique du Nord), RIPE NCC (Europe, Moyen-Orient), APNIC (Asie-Pacifique), LACNIC (Amérique latine) et AFRINIC (Afrique).
Les enregistrements DNS essentiels à interroger :
### WHOIS - Informations sur le propriétaire kali@kali:~$ whois example.com kali@kali:~$ whois 203.0.113.50 ### DNS - Requêtes ciblées kali@kali:~$ dig example.com A kali@kali:~$ dig example.com MX kali@kali:~$ dig example.com NS kali@kali:~$ dig example.com TXT kali@kali:~$ dig example.com ANY +noall +answer ### nslookup - Alternative rapide kali@kali:~$ nslookup -type=MX example.com kali@kali:~$ nslookup -type=NS example.com
La Wayback Machine (archive.org) conserve des captures snapshot de sites web depuis 1996. C'est un outil puissant pour la reconnaissance passive car elle permet de découvrir d'anciennes versions d'un site, des pages supprimées, des structures d'URL anciennes, et parfois des informations qui n'auraient jamais dû être publiques. On peut l'utiliser via l'interface web ou en ligne de commande.
### Wayback Machine CLI kali@kali:~$ waybackurls example.com > wayback_results.txt kali@kali:~$ cat wayback_results.txt | head -50 ### Exemple via l'API web https://web.archive.org/web/20240101*/example.com
Les Google Dorks (opérateurs de recherche avancée) exploitent la syntaxe de Google pour trouver des informations sensibles indexed publiquement. C'est l'une des techniques OSINT les plus puissantes pour la phase de reconnaissance passive.
site:example.comfiletype:pdf site:example.cominurl:admin site:example.comintitle:"index of" "parent directory"intext:"password" site:example.com### Exemples de Google Dorks puissants site:example.com filetype:pdf site:example.com filetype:sql site:example.com inurl:admin site:example.com intitle:"index of" "parent directory" site:example.com filetype:env site:example.com inurl:login intext:"password" site:example.com filetype:doc OR filetype:xls confidential allinurl:admin upload site:example.com
theHarvester est un outil OSINT qui recherche des emails, des noms d'hôtes, des sous-domaines et des adresses IP publics associés à un domaine cible. Il interroge plusieurs sources : moteurs de recherche (Google, Bing, Yahoo), des services DNS, Shodan et des sources spécialisées. C'est un incontournable de la phase de reconnaissance passive.
### theHarvester - Collecte complète kali@kali:~$ theHarvester -d example.com -b google,bing,linkedin -l 200 ### Sources disponibles kali@kali:~$ theHarvester -d example.com -b all -f report.html ### Limites et options kali@kali:~$ theHarvester -d example.com -b google -l 100 -c # -c : utilise des requêtes DNS brute-force en plus # -f : génère un rapport HTML/XML
Shodan (shodan.io) est un moteur de recherche spécialisé dans les appareils connectés à Internet : serveurs, caméras IP, routeurs, systèmes SCADA/IoT, bases de données exposées. Contrairement à Google, Shodan indexe les banner de services (pas le contenu web). L'interface web permet des filtres puissants, et la clé API permet l'automatisation.
### Shodan via l'interface web (recherche avancée) # Trouver des caméras exposées : webcam has_screenshot:true # Trouver des bases de données MySQL exposées : port:3306 "MySQL" country:FR # Via API avec shodan CLI : kali@kali:~$ shodan init VOTRE_CLE_API kali@kali:~$ shodan search "apache 2.4.49" --filename banner.txt kali@kali:~$ shodan host 203.0.113.50
Maltego est un outil d'analyse de renseignement (OSINT) qui présente les informations sous forme de graphes de relations (entités connectées). Il utilise des « transforms » pour extraire automatiquement des données depuis diverses sources (WHOIS, DNS, DNSGrep, Twitter, etc.). La version communautaire (Maltego CE) est gratuite et suffisante pour débuter. L'outil permet de cartographier visuellement l'infrastructure d'une cible : domaines, sous-domaines, IP, emails, employés, technologies utilisées.
Recon-ng est un framework de reconnaissance complet, similaire à Metasploit mais dédié à l'OSINT. Il dispose d'une architecture modulaire avec des « modules » pour chaque source de données (WHOIS, Shodan, Google, etc.) et des « spools » pour exporter les résultats. Il est particulièrement efficace pour automatiser la collecte d'informations sur de multiples cibles.
### Recon-ng - Installation et utilisation kali@kali:~$ recon-ng [recon-ng][default] > workspace create myproject [recon-ng][default][myproject] > marketplace install recon/domains-hosts/google_site_web [recon-ng][default][myproject] > modules load recon/domains-hosts/google_site_web [recon-ng][default][myproject][google_site_web] > info [recon-ng][default][myproject][google_site_web] > options set SOURCE example.com [recon-ng][default][myproject][google_site_web] > run ### Export des résultats [recon-ng][default][myproject] > db insert domains [recon-ng][default][myproject] > show hosts
La passive (OSINT, WHOIS, DNS publics). Elle ne contacte pas directement la cible, donc elle est invisible et toujours légale sur données publiques.
Découverte de ports, services, OS fingerprinting et détection de firewalls
Avant de comprendre les types de scan, il faut maîtriser le 3-way handshake TCP, le processus qui établit toute connexion TCP fiable :
Si le port est fermé, le serveur répond par un paquet RST (Reset). Si un firewall filtre le port, la réponse est simplement absente (timeout). Cette différence de réponse est la base de toute interprétation de scan.
### Les principaux scans Nmap kali@kali:~$ nmap -sS 203.0.113.50 # SYN half-open (défaut root) kali@kali:~$ nmap -sT 203.0.113.50 # TCP Connect complet kali@kali:~$ nmap -sA 203.0.113.50 # ACK - détection de filtrage kali@kali:~$ nmap -sF 203.0.113.50 # FIN - contournement de filtres kali@kali:~$ nmap -sN 203.0.113.50 # NULL - aucun flag kali@kali:~$ nmap -sX 203.0.113.50 # XMAS - tous les flags kali@kali:~$ nmap -sU 203.0.113.50 # UDP scan (lent)
Nmap (Network Mapper) est l'outil de scan le plus utilisé au monde. Ses options principales à maîtriser :
### Nmap - Commandes complètes kali@kali:~$ nmap -sS -sV -O -v 203.0.113.50 kali@kali:~$ nmap -A -T4 203.0.113.50 # Agressif kali@kali:~$ nmap -sC -sV -p- 203.0.113.50 # Scripts défaits + tous ports kali@kali:~$ nmap -sS -p 1-1000 --open 203.0.113.0/24 kali@kali:~$ nmap --script vuln 203.0.113.50 # Scan de vulnérabilités kali@kali:~$ nmap --script smb-enum-shares -p 445 203.0.113.50 kali@kali:~$ nmap -T4 -F 203.0.113.50 # Fast scan (100 ports)
L'OS fingerprinting vise à déterminer le système d'exploitation d'une cible. Il existe deux approches :
### OS Detection Nmap kali@kali:~$ nmap -O 203.0.113.50 # Résultats typiques : "Running: Linux 3.X", "OS CPE: cpe:/o:linux:linux_kernel:3.2" ### Fingerprinting passif avec p0f kali@kali:~$ p0f -i eth0 # Analyse le trafic sans contacter la cible
Les firewalls et IDS/IPS filtrent certain types de paquets. Plusieurs techniques d'évasion existent dans Nmap :
### Techniques d'évasion Nmap kali@kali:~$ nmap -sS -f 203.0.113.50 # Fragmentation kali@kali:~$ nmap -sS -T0 203.0.113.50 # Timing paranoïde kali@kali:~$ nmap -sS -D 10.0.0.1,10.0.0.2,ME 203.0.113.50 # Decoys (ME = ma vraie IP) kali@kali:~$ nmap -sS --source-port 53 203.0.113.50 # Port source DNS kali@kali:~$ nmap -sS -g 80 --data-length 32 203.0.113.50 # Port source + bourrage de paquet ### Hping3 - Scan custom et test de firewall kali@kali:~$ hping3 -S -p 80 203.0.113.50 # SYN sur port 80 kali@kali:~$ hping3 -S -p 80 -c 3 203.0.113.50 # Limiter à 3 paquets kali@kali:~$ hping3 -A -p 80 203.0.113.50 # ACK probe kali@kali:~$ hping3 -F 203.0.113.50 --scan 1-1000 -S # Scan multi-ports ### Masscan - Scan ultra-rapide d'un /16 kali@kali:~$ sudo masscan 203.0.113.0/16 -p80,443 --rate 1000 # Rompre en quelques minutes ce que Nmap ferait en heures
Après l'identification des services, on recherche des vulnérabilités connues (CVE) sur les versions détectées. Trois approches complémentaires :
### Nmap NSE - Scan de vulnérabilités kali@kali:~$ nmap --script vuln 203.0.113.50 kali@kali:~$ nmap -sV --script http-enum 203.0.113.50 kali@kali:~$ nmap -p 445 --script smb-vuln-* 203.0.113.50 kali@kali:~$ nmap -sV --script mysql-info -p 3306 203.0.113.50 ### Liste des scripts NSE kali@kali:~$ ls /usr/share/nmap/scripts/ | head -20 kali@kali:~$ nmap --script-help http-enum ### OpenVAS / Nessus (interface graphique) # Démarrage du service : kali@kali:~$ sudo gvm-start # OpenVAS kali@kali:~$ sudo nessusd # Nessus # Ensuite configurer la cible, le type de scan et lancer l'audit.
# Exemple de sortie Nmap standard : PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.7 80/tcp open http Apache httpd 2.4.29 443/tcp open https Apache httpd 2.4.29 445/tcp filtered microsoft-ds <-- port filtré par firewall 1000/tcp closed tcpwrapped
Port filtré : un pare-feu bloque ou jette le paquet. Il faudra tester l'évasion ou l'énumération par un autre vecteur autorisé.
Collecte d'informations détaillées : users, shares, services, SNMP, LDAP
L'énumération est la deuxième phase active du pentest (après le scan). Elle consiste à extraire activement des informations détaillées d'un système cible : noms d'utilisateurs, partages réseau, groupes, politiques de compte, versions de services, annuaire. Elle est « active » car elle crée une connexion réelle avec les services de la cible. Contrairement au scan (qui identifie le port), l'énumération interroge le service derrière le port pour en soutirer le maximum d'informations exploitables lors de la phase d'exploitation.
NetBIOS est un protocole historique de partage de fichiers (Windows) au-dessus de TCP/UDP ; SMB (Server Message Block) est le protocole de partage qui a évolué sur le port 445. Ces services exposent souvent des noms de machine, noms d'utilisateur et partages accessibles sans authentification. Les outils classiques :
### Énumération NetBIOS/SMB kali@kali:~$ nbtstat -a 203.0.113.50 # Table NetBIOS distante kali@kali:~$ net view \\\\203.0.113.50 # Partages visibles kali@kali:~$ smbclient -L //203.0.113.50 # Liste des partages SMB kali@kali:~$ smbclient //203.0.113.50/share -N # Connecter un partage sans mot de passe ### Test de connexion anonyme (null session) kali@kali:~$ smbclient -L //203.0.113.50 -U "" -N # Si Anonymous/FORCE_VALID -> partage 100% accessible en null session
Enum4linux automatise l'extraction de toutes les informations d'une machine Windows/AD via SMB : utilisateurs, groupes, partages, politiques de mot de passe, sessions ouvertes. Idéal pour débuter une énumération complète d'une cible Windows. On commence par une simple requête de partage, puis on remonte toute la hiérarchie.
### Enum4linux - Usage complet kali@kali:~$ enum4linux -U 203.0.113.50 # Énumérer les utilisateurs kali@kali:~$ enum4linux -S 203.0.113.50 # Énumérer les partages kali@kali:~$ enum4linux -G 203.0.113.50 # Énumérer les groupes kali@kali:~$ enum4linux -P 203.0.113.50 # Politiques de mot de passe kali@kali:~$ enum4linux -a 203.0.113.50 # Tout énumérer (all) # Sortie typique : [*] Share Enumeration, [+] Name: admin, Index: 1000 # Politique : Password Info: Password must change every 42 days
SMBMap permet de parcourir récursivement les partages SMB et de chercher des fichiers sensibles (fichiers de config, scripts, clés). Il vérifie aussi les permissions d'écriture, utiles pour savoir si l'on peut déposer une charge utile. Contrairement à smbclient, il automatise l'inventaire complet sans session interactive.
### SMBMap - Énumération avancée des partages kali@kali:~$ smbmap -H 203.0.113.50 # Anonyme kali@kali:~$ smbmap -H 203.0.113.50 -u utilisateur -p motdepasse kali@kali:~$ smbmap -H 203.0.113.50 -r share # Parcourir récursivement un partage kali@kali:~$ smbmap -H 203.0.113.50 -R share -A "config" # Rechercher fichiers "config" kali@kali:~$ smbmap -H 203.0.113.50 --download share/file.txt # Télécharger un fichier
SNMP (Simple Network Management Protocol) supervise les équipements réseau. Il fonctionne par OIDs (Object Identifiers) organisés dans une hiérarchie MIB. Les community strings sont les « mots de passe » du protocole : public = lecture, private = écriture, souvent par défaut. Un SNMP mal configuré peut révéler la table de routage, les interfaces, les utilisateurs et même les mots de passe de logiciels (Windows SNMP expose parfois le service).
### Énumération SNMP kali@kali:~$ snmpwalk -v2c -c public 203.0.113.50 # Parcourir toute l'arborescence kali@kali:~$ snmpwalk -v2c -c public 203.0.113.50 1.3.6.1.4.1.77.1.2.25 # Utilisateurs Windows kali@kali:~$ snmpwalk -v2c -c public 203.0.113.50 1.3.6.1.4.1.77.1.2.25.1.1 # Accès réseau kali@kali:~$ snmpcheck 203.0.113.50 -c public -v2c # Snmp-check automatisé kali@kali:~$ snmpget -v2c -c public 203.0.113.50 1.3.6.1.2.1.1.1.0 # SysDescr # -v2c : version SNMP, -c : community string
LDAP (Lightweight Directory Access Protocol) est le protocole d'accès aux annuaires, notamment Active Directory de Microsoft. Port 389 (LDAP) / 636 (LDAPS). Une énumération LDAP permet de lister les utilisateurs, groupes, ordinateurs, unités d'organisation (OU) et les attributs de chaque objet. Si l'annuaire accepte les connexions anonymes, la collecte est immédiate.
### Énumération LDAP kali@kali:~$ ldapsearch -x -h 203.0.113.50 -b "dc=domaine,dc=com" # Base entière kali@kali:~$ ldapsearch -x -h 203.0.113.50 -b "dc=domaine,dc=com" "(objectClass=user)" # Utilisateurs kali@kali:~$ ldapsearch -x -h 203.0.113.50 -b "dc=domaine,dc=com" "(objectClass=user)" sAMAccountName kali@kali:~$ ldapsearch -x -h 203.0.113.50 -b "dc=domaine,dc=com" "(objectClass=computer)" dNSHostName # -x : simple bind, -h : hôte, -b : base DN, filtre LDAP = (objectClass=...)
dc=domaine,dc=extension. Le filtre (objectClass=user) permet de lister les utilisateurs, (objectClass=computer) les postes — autant de cibles pour l'exploitation ultérieure.
Les zone transfers (AXFR) permettent de copier toute la zone DNS d'un serveur de noms : c'est LA faille classique d'énumération DNS. Si le serveur n'est pas correctement configuré, il renvoie la liste complète des sous-domaines. Les brute-force de sous-domaines (dnsrecon, sublist3r) complètent cette approche en devinant les noms communs contre sa liste de dictionnaire.
### Zone transfer avec dig kali@kali:~$ dig example.com AXFR @ns1.example.com # Tentative de transfert de zone kali@kali:~$ dig axfr example.com @203.0.113.53 # Si succès : TOUTE la zone est exposée ### dnsrecon - Reconnaissance DNS complète kali@kali:~$ dnsrecon -d example.com -t axfr # Tentative de zone transfer kali@kali:~$ dnsrecon -d example.com -D /usr/share/wordlists/domains.txt -t brt # Brute-force kali@kali:~$ dnsrecon -d example.com -a # Tout récupérer ### sublist3r - Énumération de sous-domaines via les sources OSINT kali@kali:~$ sublist3r -d example.com kali@kali:~$ sublist3r -d example.com -b # Silence, sans bannière
dig AXFR aboutit, toutes les cartes DNS de la cible sont données : sous-domaines de périmètre, serveurs Internes, etc. C'est une vulnérabilité récurrente dans les questions d'examen CEH.
Les services RPC (rpcclient via MSRPC) permettent de valider la présence de comptes sans les attaquer. Hydra automatise le brute-force de connexion (SSH, RDP, SMB, HTTP) en combinant dictionnaires d'utilisateurs et de mots de passe. Les noms d'utilisateurs énumérés précédemment deviennent les « mots clés » d'entrée.
### rpcclient - Énumération d'utilisateurs via MSRPC kali@kali:~$ rpcclient -U "" -N 203.0.113.50 # Session anonyme rpcclient $> enumdomusers # Liste des utilisateurs du domaine rpcclient $> enumdomgroups # Liste des groupes rpcclient $> queryuser 1002 # Détails d'un utilisateur spécifique rpcclient $> getdompwinfo # Politiques de mot de passe ### Hydra - Brute-force de connexions kali@kali:~$ hydra -L users.txt -P pass.txt ssh://203.0.113.50 -t 4 kali@kali:~$ hydra -L users.txt -P pass.txt smb://203.0.113.50 kali@kali:~$ hydra -l admin -P pass.txt http-get://203.0.113.50/admin kali@kali:~$ hydra -L users.txt -P pass.txt rdp://203.0.113.50 # -L : fichier de logins, -P : fichier de mots de passe, -t : threads
Le partage de fichiers Unix NFS (port 2049) est contrôlé par le démon rpcbind (port 111). showmount -e liste les partages NFS exportés : si une exportation est permissive (no_root_squash, world-readable), elle peut être montée directement. Le serveur NTP (port 123) et l'outil ntpq servent à la synchronisation mais aussi à l'énumération (liste de pair, informations de statut).
### Énumération NFS/RPC kali@kali:~$ showmount -e 203.0.113.50 # Liste des exports NFS # Sortie : Export list for 203.0.113.50 : /home (everyone) kali@kali:~$ sudo mkdir -p /mnt/nfs kali@kali:~$ sudo mount -t nfs 203.0.113.50:/home /mnt/nfs kali@kali:~$ ls -la /mnt/nfs # Explorer le contenu monté ### rpcinfo - Inventaire des services RPC kali@kali:~$ rpcinfo -p 203.0.113.50 # Lister les ports/services RPC ### Énumération NTP kali@kali:~$ ntpq -c peers 203.0.113.50 # Liste des pairs (serveurs NTP) kali@kali:~$ ntpdc -c monlist 203.0.113.50 # Liste des clients ayant interrogé (souvent indexé) kali@kali:~$ ntptrace 203.0.113.50 # Trace la chaîne NTP
/home (everyone) est montable par tout le monde. Un « showmount -e » qui répond expose immédiatement toute l'arborescence partagée. L'option « no_root_squash » sur une exportation est une porte d'entrée vers un accès root (DoS potentiel selon l'examen).
Chaque découverte d'énumération doit être consignée dans un rapport structuré : hôte, service, port, données extraites, et impact potentiel. Communication de l'information et traçabilité sont des exigences du code de conduite CEH. On note aussi quels comptes/partages sont accessibles anonymement : ce sont les premières portes d'entrée.
# Modèle de rapport d'énumération # | Hôte | Service | Port | Données extraites | Impact | # | 203.0.113.50 | SMB | 445 | partage DATA accessible en null session| Lecture donnée ftp | # | 203.0.113.10 | LDAP | 389 | bind anonyme = 286 utilisateurs AD | Brute-force possible | # | 203.0.113.10 | SNMP | 161 | community public | info système/réseaux | DoS, récolte |
Les noms d'utilisateurs valides et les partages accessibles anonymement : ils conditionnent Hydra, rpcclient et l'accès initial.