Énumération
Si le scanning te dit « la porte est ouverte », l'énumération te dit « voici les noms de tous ceux qui vivent dedans, leurs clés, leurs habitudes, et le plan de la maison ». NetBIOS/SMB, SNMP, LDAP, DNS, SMTP, NFS, Net Commands Windows et énumération Linux — avec les sorties de commandes réelles complètes, telles qu'elles apparaissent sur le terrain.
L'énumération, la phase qui décide tout
L'énumération est la Phase 2 du scanning mais beaucoup plus profonde. Tu passes d'une liste de ports ouverts à une cartographie complète des ressources internes : utilisateurs, groupes, partages, politiques de mots de passe, services, versions exactes.
Énumération NetBIOS et SMB
NetBIOS (1983, IBM) reste massivement présent dans les environnements Windows. SMB tourne au-dessus pour le partage de fichiers/imprimantes — version moderne : port 445 TCP direct.
Architecture (ordinogramme animé)
| Port | Protocole | Service |
|---|---|---|
| 137 | UDP | NetBIOS Name Service (NBNS) — résolution de noms |
| 138 | UDP | NetBIOS Datagram Service — sans connexion |
| 139 | TCP | NetBIOS Session Service — avec connexion |
nbtstat — table NetBIOS locale
C:\> nbtstat -n Wireless Network Connection: Node IpAddress: [192.168.1.50] Scope Id: [] NetBIOS Local Name Table Name Type Status ----------------------------------------------------- WORKSTATION-01 <00> UNIQUE Registered WORKGROUP <00> GROUP Registered WORKSTATION-01 <20> UNIQUE Registered WORKGROUP <1E> GROUP Registered WORKGROUP <1D> UNIQUE Registered ..__MSBROWSE__.<01> GROUP Registered
Décodage des suffixes NetBIOS — critique pour le CEH
| Suffixe | Type | Signification |
|---|---|---|
| <00> | UNIQUE | Nom de l'ordinateur (Workstation) |
| <00> | GROUP | Nom du domaine/workgroup |
| <03> | UNIQUE | Service Messenger (utilisateur connecté) |
| <1B> | UNIQUE | Domain Master Browser (PDC) |
| <1C> | GROUP | Domain Controllers du domaine |
| <1D> | UNIQUE | Master Browser local subnet |
| <20> | UNIQUE | File Server Service (partage actif !) |
nbtstat -A — table distante
C:\> nbtstat -A 192.168.1.10 NetBIOS Remote Machine Name Table Name Type Status ----------------------------------------------------- METASPLOITABLE <00> UNIQUE Registered METASPLOITABLE <03> UNIQUE Registered METASPLOITABLE <20> UNIQUE Registered WORKGROUP <00> GROUP Registered WORKGROUP <1E> GROUP Registered MAC Address = 08:00:27:A1:BC:DE
nbtscan — scan réseau NetBIOS
$ nbtscan 192.168.1.0/24 Doing NBT name scan for addresses from 192.168.1.0/24 IP address NetBIOS Name Server User MAC address ------------------------------------------------------------------------------ 192.168.1.1 ROUTEUR <server> <unknown> c8:d7:19:ab:12:3f 192.168.1.10 METASPLOITABLE <server> METASPLOITABLE 08:00:27:a1:bc:de 192.168.1.15 WIN-SERVER01 <server> Administrateur 00:50:56:c0:00:08 192.168.1.20 WIN7-CLIENT <server> jean.muamba 52:54:00:12:34:56 192.168.1.50 LAPTOP-ML <server> exploit4040 b8:27:eb:a1:23:45
enum4linux — énumération SMB complète (sortie réelle)
$ enum4linux -a 192.168.1.10 Starting enum4linux v0.9.1 ( http://labs.portcullis.co.uk/application/enum4linux/ ) ========================== | Target Information | ========================== Target ........... 192.168.1.10 RID Range ........ 500-550,1000-1050 Username ......... '' Password ......... '' Known Usernames .. administrator, guest, krbtgt, domain admins, root, bin, none ==================================================== | Enumerating Workgroup/Domain on 192.168.1.10 | ==================================================== [+] Got domain/workgroup name: WORKGROUP =================================== | Session Check on 192.168.1.10 | =================================== [+] Server 192.168.1.10 allows sessions using username '', password '' (NULL session!) =================================== | Users on 192.168.1.10 | =================================== index: 0x1 RID: 0x3f2 acb: 0x00000011 Account: games Name: games index: 0x2 RID: 0x1f5 acb: 0x00000011 Account: root Name: root index: 0x3 RID: 0x4ba acb: 0x00000011 Account: sys Name: sys index: 0x6 RID: 0x4c4 acb: 0x00000011 Account: user Name: just a user,,, index: 0x7 RID: 0x4c5 acb: 0x00000011 Account: www-data Name: www-data index: 0xa RID: 0x4ce acb: 0x00000011 Account: msfadmin Name: msfadmin,,, index: 0xb RID: 0x4d0 acb: 0x00000011 Account: postgres Name: PostgreSQL admin,,, index: 0xd RID: 0x4d4 acb: 0x00000011 Account: mysql Name: MySQL Server index: 0xe RID: 0x4d6 acb: 0x00000011 Account: tomcat55 Name: (null) [+] Password Info for Domain: WORKGROUP [+] Minimum password length: None [+] Password Complexity Flags: 000000 ====================================== | Share Enumeration on 192.168.1.10 | ====================================== Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers tmp Disk oh noes! opt Disk IPC$ IPC IPC Service [+] Attempting to map shares on 192.168.1.10 //192.168.1.10/print$ Mapping: DENIED Listing: N/A //192.168.1.10/tmp Mapping: OK Listing: OK ← ACCESSIBLE ! //192.168.1.10/opt Mapping: DENIED Listing: N/A ===================================================== | Password Policy Information for 192.168.1.10 | ===================================================== [+] Attaching to 192.168.1.10 using a NULL session [+] Password Info for Domain: WORKGROUP Minimum password length: 0 ← PAS DE MINIMUM ! Password history length: 0 ← PAS D'HISTORIQUE ! Password Complexity: Disabled ← PAS DE COMPLEXITÉ ! Account lockout threshold: None ← PAS DE VERROUILLAGE ! enum4linux complete on Fri Nov 15 15:45:23 2024
smbmap — cartographier les partages
$ smbmap -H 192.168.1.10 [+] IP: 192.168.1.10:445 Name: metasploitable Disk Permissions Comment ---- ----------- ------- print$ NO ACCESS Printer Drivers tmp READ, WRITE oh noes! opt NO ACCESS IPC$ NO ACCESS IPC Service $ smbmap -H 192.168.1.10 -r tmp [+] IP: 192.168.1.10:445 Name: metasploitable dr--r--r-- 0 Fri Nov 15 14:23:11 2024 . dr--r--r-- 0 Fri Nov 15 14:23:11 2024 .. -rwxrwxrwx 12 Fri Nov 15 11:34:22 2024 backup_passwords.txt -rwxrwxrwx 0 Fri Nov 15 09:15:01 2024 vmware-root
backup_passwords.txt en accès libre → téléchargement immédiat avec smbmap -H 192.168.1.10 --download 'tmp/backup_passwords.txt'
smbclient — session interactive
$ smbclient //192.168.1.10/tmp -N
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Fri Nov 15 14:23:11 2024
.. D 0 Fri Nov 15 14:23:11 2024
backup_passwords.txt A 12 Fri Nov 15 11:34:22 2024
7282168 blocks of size 1024. 5446492 blocks available
smb: \> get backup_passwords.txt
getting file \backup_passwords.txt of size 12 as backup_passwords.txt
(5.9 KiloBytes/sec)
smb: \> exit
rpcclient — énumération RPC approfondie
$ rpcclient -U "" -N 192.168.1.10 rpcclient $> srvinfo METASPLOITABLE Wk Sv PrQ Unx NT SNT metasploitable server platform_id : 500 os version : 4.9 rpcclient $> enumdomusers user:[games] rid:[0x3f2] user:[root] rid:[0x1f5] user:[msfadmin] rid:[0x4ce] user:[postgres] rid:[0x4d0] user:[mysql] rid:[0x4d4] user:[tomcat55] rid:[0x4d6] rpcclient $> enumdomgroups group:[root] rid:[0x200] group:[sudo] rid:[0x20a] group:[admin] rid:[0x20b] rpcclient $> queryuser 0x1f5 User Name : root Password last set Time : Wed, 27 May 2012 10:58:09 CAT bad_password_count: 0x00000000 logon_count: 0x00000003 rpcclient $> getdompwinfo min_password_length: 0 password_properties: 0x00000000
Énumération SNMP
SNMP surveille et gère les équipements réseau (routeurs, switches, serveurs, imprimantes) sur le port 161/UDP.
| Version | Sécurité | Statut |
|---|---|---|
| SNMPv1 | Community string | Obsolète, très dangereux |
| SNMPv2c | Community string | Courant, encore dangereux |
| SNMPv3 | Auth + Chiffrement | Sécurisé, recommandé |
"public" → lecture seule (défaut universel) · "private" → lecture/écriture (défaut dangereux)
OIDs importants
1.3.6.1.2.1.1.1.0 → sysDescr (description du système) 1.3.6.1.2.1.1.3.0 → sysUpTime (durée de fonctionnement) 1.3.6.1.2.1.1.5.0 → sysName (nom du système) 1.3.6.1.4.1.77.1.2.25→ hrSWRunName (logiciels en cours d'exécution)
snmpwalk — parcourir toute la MIB
$ snmpwalk -c public -v1 192.168.1.10 iso.3.6.1.2.1.1.1.0 = STRING: "Linux metasploitable 2.6.24-16-server #1 SMP" iso.3.6.1.2.1.1.4.0 = STRING: "msfadmin@metasploitable" iso.3.6.1.2.1.1.5.0 = STRING: "metasploitable" iso.3.6.1.2.1.1.6.0 = STRING: "Hack the Planet" iso.3.6.1.2.1.2.2.1.2.2 = STRING: "eth0" iso.3.6.1.2.1.4.20.1.1.192.168.1.10 = IpAddress: 192.168.1.10 iso.3.6.1.2.1.25.4.2.1.2.588 = STRING: "apache2" iso.3.6.1.2.1.25.4.2.1.2.602 = STRING: "sshd" iso.3.6.1.2.1.25.4.2.1.2.614 = STRING: "vsftpd" iso.3.6.1.2.1.25.4.2.1.2.621 = STRING: "mysqld" iso.3.6.1.2.1.25.4.2.1.2.645 = STRING: "named" iso.3.6.1.2.1.25.4.2.1.2.658 = STRING: "smbd" iso.3.6.1.2.1.25.6.3.1.2.3 = STRING: "apache2-2.2.8-1ubuntu0.14" iso.3.6.1.2.1.25.6.3.1.2.4 = STRING: "openssh-server-1:4.7p1-8ubuntu1" iso.3.6.1.2.1.25.6.3.1.2.5 = STRING: "vsftpd-2.3.4" iso.3.6.1.2.1.25.6.3.1.2.6 = STRING: "mysql-server-5.0.51a" iso.3.6.1.2.1.25.6.3.1.2.7 = STRING: "samba-3.0.20-Debian"
snmp-check — rapport structuré
$ snmp-check 192.168.1.10 -c public snmp-check v1.9 - SNMP enumerator [*] Try to connect to 192.168.1.10:161 using SNMPv1 and community 'public' [*] System information: Hostname : metasploitable Description : Linux metasploitable 2.6.24-16-server Contact : msfadmin@metasploitable Location : Hack the Planet [*] Network interfaces: Interface : eth0 Mac Address : 08:00:27:a1:bc:de Speed : 1000 Mbps [*] TCP connections and listening ports: Local port 21 ftp listen Local port 22 ssh listen Local port 445 smb listen Local port 3306 mysql listen [*] Software components: 2 apache2 2.2.8-1ubuntu0.14 3 openssh-server 4.7p1-8ubuntu1 4 vsftpd 2.3.4 6 samba 3.0.20-Debian [*] User accounts: root msfadmin postgres mysql tomcat55
Énumération LDAP
LDAP donne accès aux annuaires d'entreprise — dans un environnement Windows, c'est le protocole vers Active Directory. Port 389 (clair) / 636 (LDAPS chiffré).
DC=corp,DC=com ← Domaine racine
├── OU=Users ← Unité organisationnelle
│ ├── CN=Jean Muamba ← Utilisateur
│ └── CN=Administrateur
└── OU=Groups
└── CN=Domain Admins
ldapsearch — requête anonyme
$ ldapsearch -x -H ldap://192.168.1.15 -b "dc=corp,dc=com" # extended LDIF # LDAPv3 # base <dc=corp,dc=com> with scope subtree dn: cn=Jean Muamba,ou=Users,dc=corp,dc=com objectClass: person cn: Jean Muamba sAMAccountName: jean.muamba userPrincipalName: jean.muamba@corp.com mail: jean.muamba@corp.com telephoneNumber: +243 81 234 5678 department: Informatique title: Administrateur Système memberOf: cn=IT-Security,ou=Groups,dc=corp,dc=com dn: cn=Administrateur,ou=Users,dc=corp,dc=com objectClass: user sAMAccountName: Administrateur memberOf: cn=Domain Admins,ou=Groups,dc=corp,dc=com userAccountControl: 66048 dn: cn=Domain Admins,ou=Groups,dc=corp,dc=com objectClass: group member: cn=Administrateur,ou=Users,dc=corp,dc=com member: cn=exploit4040,ou=Users,dc=corp,dc=com # numResponses: 15 # numEntries: 14
Requête filtrée — utilisateurs uniquement
ldapsearch -x -H ldap://192.168.1.15 -b "dc=corp,dc=com" \
"(objectClass=user)" sAMAccountName userPrincipalName memberOf
Énumération DNS
Complément au Module 2/3 — ici on énumère méthodiquement pour construire la carte complète des sous-domaines et services.
dnsrecon — énumération générale
$ dnsrecon -d example.com -t std [*] std: Performing General Enumeration against: example.com [+] SOA ns1.example.com 93.184.216.100 [+] MX mail.example.com 93.184.216.50 [+] A www.example.com 93.184.216.34 [+] A ftp.example.com 93.184.216.60 [+] A dev.example.com 93.184.216.70 [+] A staging.example.com 93.184.216.75 [+] A vpn.example.com 93.184.216.80 [+] A admin.example.com 93.184.216.90 [+] TXT example.com "v=spf1 include:_spf.google.com ~all"
dnsenum — zone transfer + bruteforce
$ dnsenum --dnsserver 8.8.8.8 --enum example.com -f /usr/share/wordlists/dnsmap.txt Trying Zone Transfer for example.com on ns1.example.com ... example.com. 3600 IN A 93.184.216.34 internal.example.com.3600 IN A 10.0.0.100 db.example.com. 3600 IN A 10.0.0.200 ⚠️ Zone Transfer réussi ! Toute l'infrastructure exposée ! Brute forcing with dnsmap.txt: api.example.com. 3600 IN A 93.184.216.85 beta.example.com. 3600 IN A 93.184.216.86
Énumération SMTP
SMTP (port 25) supporte des commandes qui permettent de vérifier l'existence d'utilisateurs sans authentification sur les serveurs mal configurés.
Netcat — énumération manuelle
$ nc -nv 192.168.1.10 25 (UNKNOWN) [192.168.1.10] 25 (smtp) open 220 metasploitable.localdomain ESMTP Postfix (Ubuntu) HELO attaquant.com 250 metasploitable.localdomain VRFY root 252 2.0.0 root VRFY msfadmin 252 2.0.0 msfadmin VRFY administrateur 550 5.1.1 <administrateur>: Recipient address rejected: User unknown EXPN developers 250-2.0.0 Jean Muamba <jean.muamba@corp.com> 250-2.0.0 Alice Dupont <alice.dupont@corp.com> 250 2.0.0 Bob Martin <bob.martin@corp.com> QUIT 221 2.0.0 Bye
smtp-user-enum — automatisation
$ smtp-user-enum -M VRFY -U /usr/share/wordlists/metasploit/unix_users.txt -t 192.168.1.10 Starting smtp-user-enum v1.2 Username count .... 168 Target TCP port ... 25 ######## Scan started at Fri Nov 15 16:00:12 2024 ######### 192.168.1.10: root exists 192.168.1.10: msfadmin exists 192.168.1.10: postgres exists 192.168.1.10: mysql exists 192.168.1.10: tomcat55 exists ######## Scan completed at Fri Nov 15 16:00:48 2024 ######### 12 results. 168 queries in 36 seconds (4.7 queries/sec)
Énumération NFS
NFS permet le partage de répertoires entre systèmes Unix/Linux (port 2049). Un serveur mal configuré peut permettre de monter des partages sans authentification.
showmount — lister les exports
$ showmount -e 192.168.1.10 Export list for 192.168.1.10: / * /home * /etc * /var/www 192.168.1.0/24 /opt/backups 10.0.0.0/8
mount — montage et extraction de /etc/shadow
$ mkdir /tmp/nfs_mount $ sudo mount -t nfs 192.168.1.10:/ /tmp/nfs_mount -o nolock $ cat /tmp/nfs_mount/etc/shadow root:$1$SLBRi7.0$XTZv...:15525:0:99999:7::: msfadmin:$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/:14684:0:99999:7::: user:$1$HESu9xrH$k.o3G93DGoXIiQKkPmUgZ0:14684:0:99999:7::: postgres:$1$Rw35ik.x$MgX...::14684:0:99999:7:::
On a les hashes des mots de passe → John the Ripper ou Hashcat pour les casser.
Windows — Net Commands
Sur une machine Windows compromise ou depuis un compte de domaine, les commandes net permettent une énumération complète.
C:\> net user
User accounts for \\WIN-SERVER01
-------------------------------------------------------------------------------
Administrateur exploit4040 Guest
jean.muamba alice.dupont svc_backup
svc_sql svc_web
The command completed successfully.
C:\> net user Administrateur
User name Administrateur
Account active Yes
Password last set 10/03/2024 08:45:12
Password expires Never
Last logon 15/11/2024 09:12:44
Local Group Memberships *Administrateurs *Utilisateurs
The command completed successfully.
C:\> net localgroup Administrateurs Alias name Administrateurs Comment Les administrateurs ont un accès complet et illimité Members ------------------------------------------------------------------------------- Administrateur jean.muamba exploit4040 The command completed successfully.
C:\> net share Share name Resource Remark ------------------------------------------------------------------------------- C$ C:\ Default share ADMIN$ C:\Windows Remote Admin Backups C:\Backups\Entreprise Sauvegardes serveurs WebApp C:\inetpub\wwwroot Site web interne HR_Data C:\Data\RH CONFIDENTIEL RH The command completed successfully.
C:\> net view /domain:CORP
Server Name Remark
-------------------------------------------------------------------------------
\\DC01 Contrôleur de domaine principal
\\WIN-SERVER01 Serveur de fichiers
\\WEB-SERVER Serveur web interne
\\DB-SERVER Serveur base de données
\\BACKUP-SERVER Serveur de sauvegarde
The command completed successfully.
Énumération Linux
Sur un système Linux compromis, voici l'énumération complète post-accès.
$ id && whoami uid=1000(msfadmin) gid=1000(msfadmin) groups=1000(msfadmin),4(adm), 20(dialout),24(cdrom),29(audio),44(video),110(netdev), 111(lpadmin),112(admin),113(sambashare) msfadmin
$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh msfadmin:x:1000:1000:msfadmin,,,:/home/msfadmin:/bin/bash user:x:1001:1001:just a user,,,:/home/user:/bin/bash service:x:1002:1002:,,,:/home/service:/bin/bash postgres:x:108:117:PostgreSQL admin,,,:/var/lib/postgresql:/bin/bash mysql:x:109:117:MySQL Server,,,:/var/lib/mysql:/bin/false tomcat55:x:110:65534::/usr/share/tomcat5.5:/bin/false
$ sudo -l Matching Defaults entries for msfadmin on this host: env_reset, mail_badpass User msfadmin may run the following commands on this host: (ALL : ALL) ALL (ALL) NOPASSWD: /usr/bin/find (ALL) NOPASSWD: /usr/bin/python (ALL) NOPASSWD: /bin/bash
$ netstat -tulnp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 614/vsftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 602/sshd
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 589/telnetd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 658/smbd
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 621/mysqld
tcp 0 0 192.168.1.10:22 192.168.1.50:48123 ESTABLISHED 812/sshd
udp 0 0 0.0.0.0:161 0.0.0.0:* 523/snmpd
Workflow complet d'énumération professionnel
La méthodologie complète, phase par phase, qu'un ethical hacker suit pendant l'énumération.
nbtscan 192.168.1.0/24 > recon/netbios_scan.txtenum4linux -a 192.168.1.10 > recon/smb_enum.txtsmbmap -H 192.168.1.10 > recon/smb_shares.txtsnmpwalk -c public -v1 192.168.1.10 > recon/snmp_walk.txtonesixtyone -c dict.txt 192.168.1.10 (bruteforce community string)dnsrecon -d target.com -t stddnsrecon -d target.com -t axfrsmtp-user-enum -M VRFY -U unix_users.txt -t 192.168.1.10 > recon/smtp_users.txtshowmount -e 192.168.1.10 > recon/nfs_exports.txtRésumé final — ce que l'examen va tester
- ✓Suffixes NetBIOS <00>, <20>, <1B>, <1C>, <1D> et leur signification
- ✓NULL session SMB — ce que c'est et pourquoi c'est dangereux
- ✓enum4linux — ce qu'il énumère (users, shares, password policy)
- ✓Community strings SNMP — public/private et versions SNMPv1/v2c/v3
- ✓OIDs SNMP importants — sysDescr, sysName, processus
- ✓LDAP — structure DN/OU/CN et requêtes ldapsearch
- ✓VRFY vs EXPN vs RCPT TO — différences et usage SMTP
- ✓Zone Transfer AXFR — pourquoi c'est critique
- ✓showmount -e — exposer les partages NFS
- ✓Net commands Windows — net user, net localgroup, net share
- ✓Fichiers Linux sensibles — /etc/passwd, /etc/shadow, /etc/group
- ✓sudo -l — identifier les escalades de privilèges
- ✓netstat -tulnp — services en écoute
Questions type examen — Module 4
Clique sur une question pour révéler la réponse.