Introduction
Nmap est un outil de scan et découverte réseaux très populaire et utilisé par n'importe quelle personne qui entre dans le mon de la cybersécurité. On va détailler un peu son fonctionnement sous différents angles ici.
Avant de Commencer
Il est important de savoir que pour utiliser Nmap correctement il va vous falloir un minimum de connaissances réseaux et je vous parle pas de savoir ce que c'est qu'un ping meme ma daronne elle sait faire. J'écrirai des articles dessus mais en attendant, c'est le même principe que partout si tu sais pas à quoi sert un marteau tu vas juste tapper sur des clous avec et par conséquent limiter drastiquement son potentiel... Bref Commençons.
Nmap CLI
Nmap offre un large panel de scans pré-conçus directement dans l'application. Vous avez la possibilité d'effectuer différents scans à travers différents protocoles à différentes couches du modèle OSI:
- ICMP (Ping Scan)
- TCP SYN / ACK / Connect() / NULL / FIN Scans (Scan en envoyant différents Drapeaux Activés dans les Paquets TCP pour voir les réponses)
- UDP Scan
- Xmas / Maimon / Window Scans (Gère les handshake TCP de différentes manières)
- IP Protocol Scan
- SCTP Scan
- FTP Bounce Scan
On va pas tout détailler ici parceque ça va faire long l'article mais en gros voilà, pour comprendre simplement, on peut prendre l'exemple du Ping Scan : nmap -sn 192.168.0.0/24
Options Offertes par Nmap
-Pn : Permet de traiter tous les hôtes spécifiés dans le scan comme si ils étaient en ligne (utiles quand ils ont un pare-feu)
-p : Premet de spécifier les ports, peut s'écrire de différentes manières. Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
-sI : Idle Scan, permet d'utiliser des machines Zombies (Notamment avec des Botnets)
--dns-servers : Permet de spécifier un serveur DNS à utiliser.
--traceroute : Affiche le chemin emprunté par les paquets.
-F : Mode Rapide
-sV : Scan de services, vérifie les ports ouverts et essaie de déterminer les informations en fonction
-A : Mode aggressif, utile pour voir tout ce qu'est capable de savoir Nmap mais pas très discret.
-r : Scan des ports séquentiels (en suivant l'ordre pas aléatoire en gros)
-O : Essaie de déterminer l'OS en fonction des service tournant sur la machine (Ex: smb -> Windows)
--osscan-guess : Mode aggressif de détection de l'OS
-T<0-5> : Spécifie la vitesse à laquelle Nmap va faire opérer sa magie
-f : Fragmentation des paquets (Permet desfois d'esquiver les pare-feu)
-D : Envoie des paquets "appâts" parmis les vrais.
-S : Spoof d'IP source dans les paquets
-e <iface> : Spécifier l'interface utilisée
--data <hex string>: Ajouter des données hexadécimales personnalisées dans les paquets
--data-string <string>: Ajouter des données ASCII personnalisées dans les paquets
--data-length <num>: Ajouter des données aléatoires dans les paquets
--ip-options <options>: Spécifier les options IP dans les paquets
--ttl <val>: Spécifier la durée de vie (time to live)
--spoof-mac <mac address/prefix/vendor name>: Spoof d'addresse MAC (Utile avec le Spoof IP)
-6 : Activer le scan IPv6
--privileged: Par du principe que l'utilisateur à tous les droits
-v : Verbose Mode (Détaille Toute L'Opération)
OPTIONS D'OUTPUT (Pour récupérer les scans dans des fichiers) (PS: J'ai la flemme de traduire la)
-oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3, and Grepable format, respectively, to the given filename.
-oA <basename>: Output in the three major formats at once
-v: Increase verbosity level (use -vv or more for greater effect)
-d: Increase debugging level (use -dd or more for greater effect)
--reason: Display the reason a port is in a particular state
--open: Only show open (or possibly open) ports
--packet-trace: Show all packets sent and received
--iflist: Print host interfaces and routes (for debugging)
--append-output: Append to rather than clobber specified output files
--resume <filename>: Resume an aborted scan
--noninteractive: Disable runtime interactions via keyboard
--stylesheet <path/URL>: XSL stylesheet to transform XML output to HTML
--webxml: Reference stylesheet from Nmap.Org for more portable XML
--no-stylesheet: Prevent associating of XSL stylesheet w/XML output
Host discovery
Ce scan est utilisé pour faire de la découverte d'hôte sur un réseau, nmap va envoyer un ping à chaque addresse IP valide sur un subnet mask en /24 (254 addresses) et en fonction de la réponse va dire si oui ou non l'hôte est actif (host is up) ou non [host is down]. Voici un exemple de sortie d'un Ping SCAN :
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-10 00:28 Paris, Madrid
Initiating ARP Ping Scan at 00:28
Scanning 255 hosts [1 port/host]
Completed ARP Ping Scan at 00:28, 3.98s elapsed (255 total hosts)
Initiating Parallel DNS resolution of 2 hosts. at 00:28
Completed Parallel DNS resolution of 2 hosts. at 00:28, 0.00s elapsed
Nmap scan report for 192.168.1.0 [host down]
Nmap scan report for 192.168.1.1 [host down]
Nmap scan report for 192.168.1.2 [host down]
Nmap scan report for 192.168.1.3 [host down]
Nmap scan report for 192.168.1.4 [host down]
Nmap scan report for 192.168.1.5 [host down]
Nmap scan report for 192.168.1.6 [host down]
Nmap scan report for 192.168.1.7 [host down]
Nmap scan report for 192.168.1.8 [host down]
Nmap scan report for 192.168.1.9 [host down]
Nmap scan report for 192.168.1.10
Host is up (0.0040s latency)
MAC Address: 34:F6:26:A3:3D:F2 (Orange)
Nmap scan report for 192.168.1.11 [host down]
Nmap scan report for 192.168.1.12 [host down]
Nmap scan report for 192.168.1.13 [host down]
Nmap scan report for 192.168.1.14 [host down]
Nmap scan report for 192.168.1.15 [host down]
Nmap scan report for 192.168.1.16 [host down]
...
Nmap scan report for 192.168.1.106 [host down]
Nmap scan report for 192.168.1.107 [host down]
Nmap scan report for 192.168.1.108 [host down]
Nmap scan report for 192.168.1.109
Host is up (0.0040s latency).
MAC Address: 34:F6:26:A3:3D:F2 (Orange)
Nmap scan report for 192.168.1.110 [host down]
Nmap scan report for 192.168.1.111 [host down]
Nmap scan report for 192.168.1.112 [host down]
...
Nmap scan report for 192.168.1.251 [host down]
Nmap scan report for 192.168.1.252 [host down]
Nmap scan report for 192.168.1.253 [host down]
Nmap scan report for 192.168.1.254
Host is up (0.0077s latency).
MAC Address: 34:F6:26:A3:3D:F2 (Freebox SAS)
Nmap scan report for 192.168.1.255 [host down]
Initiating Parallel DNS resolution of 1 host. at 00:28
Completed Parallel DNS resolution of 1 host. at 00:28, 0.00s elapsed
Nmap scan report for 192.168.1.77
Host is up.
Read data files from: C:\Program Files (x86)\Nmap
Nmap done: 256 IP addresses (3 hosts up) scanned in 4.07 seconds
Raw packets sent: 511 (14.308KB) | Rcvd: 5 (140B)
On peut voir 3 hôtes actifs (fictifs) sur le réseau, avec leur MAC Addresses sorties et une déduction logique du vendeur des objets grâce à une base de données MAC <> Constructeurs
Scans Approfondis
On va utiliser un scan un peu plus intense cette fois ci pour voir les services qui tourne sur notre 192.168.1.254 (Certainement le Routeur)
On veut scanner tous les ports, de manière aggressive avec une vitesse agréable et on veut du détail : nmap -p 1-65535 -A -T4 -v 192.168.1.254
Voici ce qu'on obtient en premier lieu car le mdoe Aggressif commence par un SYN Stealth Scan :
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-10 01:01 Paris, Madrid
NSE: Loaded 157 scripts for scanning.
NSE: Script Pre-scanning.
Initiating NSE at 01:01
Completed NSE at 01:01, 0.00s elapsed
Initiating NSE at 01:01
Completed NSE at 01:01, 0.00s elapsed
Initiating NSE at 01:01
Completed NSE at 01:01, 0.00s elapsed
Initiating ARP Ping Scan at 01:01
Scanning 192.168.1.254 [1 port]
Completed ARP Ping Scan at 01:01, 0.03s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 01:01
Completed Parallel DNS resolution of 1 host. at 01:01, 0.00s elapsed
Initiating SYN Stealth Scan at 01:01
Scanning 192.168.1.254 [65535 ports]
Discovered open port 53/tcp on 192.168.1.254
Discovered open port 80/tcp on 192.168.1.254
Discovered open port 445/tcp on 192.168.1.254
Discovered open port 443/tcp on 192.168.1.254
Discovered open port 554/tcp on 192.168.1.254
Discovered open port 8765/tcp on 192.168.1.254
Discovered open port 52425/tcp on 192.168.1.254
Discovered open port 8092/tcp on 192.168.1.254
Discovered open port 5678/tcp on 192.168.1.254
Discovered open port 8091/tcp on 192.168.1.254
Discovered open port 9091/tcp on 192.168.1.254
Discovered open port 8095/tcp on 192.168.1.254
Discovered open port 52424/tcp on 192.168.1.254
Discovered open port 8090/tcp on 192.168.1.254
Discovered open port 5357/tcp on 192.168.1.254
Completed SYN Stealth Scan at 01:01, 4.45s elapsed (65535 total ports)
Initiating Service scan at 01:01
Nmap a découvert 15 ports ouverts sur notre Box (c'est du pain béni), voici ce qu'on peut y voir :
- Port 53 Ouvert : Donc Serveur DNS (Over HTTPS ? Over TLS ? Quel Nom de Domaine ?)
- Port 80 & 443 Ouverts : Donc Serveur Web HTTP/HTTPS (Nginx ? Apache ?)
- 445 : microsoft-ds (SMB)
- 8090, 8091, 8092 : D'autres pages HTTP ? (8091 C'est pour voir si un contrôle parental est actif chez Free mdr)
- Le reste ? Connait pas
Heureusement pour nous Nmap ne s'arrête pas là en mode Aggressif, puisqu'un Service Scan démarre aussitôt
Scanning 15 services on 192.168.1.254
Completed Service scan at 01:03, 116.24s elapsed (15 services on 1 host)
Initiating OS detection (try #1) against 192.168.1.254
NSE: Script scanning 192.168.1.254.
Initiating NSE at 01:03
Completed NSE at 01:04, 24.58s elapsed
Initiating NSE at 01:04
Completed NSE at 01:04, 1.34s elapsed
Initiating NSE at 01:04
Completed NSE at 01:04, 0.00s elapsed
Nmap scan report for 192.168.1.254
Host is up (0.00043s latency).
Not shown: 65520 closed tcp ports (reset)
PORT STATE SERVICE VERSION
53/tcp open domain dnsmasq 2.85
| dns-nsid:
|_ bind.version: dnsmasq-2.85
80/tcp open http nginx
|_http-title: Freebox OS
| http-robots.txt: 1 disallowed entry
|_/
|_http-favicon: Unknown favicon MD5: SUPER_HACHAGE_MD5_ICI
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
445/tcp open microsoft-ds
| fingerprint-strings:
| SMBProgNeg:
|_ SMBr
554/tcp open rtsp Freebox rtspd 1.2
|_rtsp-methods: DESCRIBE, OPTIONS, SETUP, TEARDOWN, PLAY, PAUSE
5678/tcp open upnp fbxigdd 1.1 (AliceBox PM203 UPnP; UPnP 1.0)
8090/tcp open http nginx
|_http-title: Freebox :: Probl\xC3\xA8me de connexion Internet
|_http-favicon: Unknown favicon MD5: SUPER_HACHAGE_MD5_ICI
| http-methods:
|_ Supported Methods: GET HEAD
8091/tcp open http nginx
|_http-favicon: Unknown favicon MD5: SUPER_HACHAGE_MD5_ICI
|_http-title: Freebox :: Contr\xC3\xB4le parental actif
| http-methods:
|_ Supported Methods: GET HEAD
8092/tcp open http nginx
|_http-favicon: Unknown favicon MD5: SUPER_HACHAGE_MD5_ICI
|_http-title: Site doesn't have a title (text/plain).
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
8095/tcp open chargen xinetd chargen
|_ Cette Merde m'a fait télécharger des données infinies ptn.
9091/tcp open http nginx
|_http-title: 404 Not Found
| http-methods:
|_ Supported Methods: GET HEAD POST
52424/tcp open tcpwrapped
Host script results:
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-time:
| date: 2025-03-10T00:03:42
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
TRACEROUTE
HOP RTT ADDRESS
1 0.43 ms 192.168.1.254
NSE: Script Post-scanning.
Initiating NSE at 01:04
Completed NSE at 01:04, 0.00s elapsed
Initiating NSE at 01:04
Completed NSE at 01:04, 0.00s elapsed
Initiating NSE at 01:04
Completed NSE at 01:04, 0.00s elapsed
Read data files from: C:\Program Files (x86)\Nmap
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 148.37 seconds
Raw packets sent: 65558 (2.885MB) | Rcvd: 65591 (2.628MB)
En gros ça donne un truc comme ça, Nmap aura scanné tous les ports découverts lors du précédent scan avec différentes méthodes et envoi de paquets pour déterminer via les envoi/réponses les services qui tournent, leur versions, leurs sécurités, les données Hexadécimales/ASCII renvoyées par les pages HTTP.
Ce qu'on peut déduire de ce scan:
- Un contrôle parental mis en place
- Pas de signature des mesages obligatoires dans le protocole SMB utilisé par la Freebox
- Au moins 5 Pages HTTP, dont robots.txt accessibles à un niveau GUEST.
- Le protocole chargen qui ne devrait pas être actif car hyper ancien (Ca envoie des données complètement aléatoires en boucle et ca comprend pas le HTTP, votre navigateur le prendra comme un fichier à télécharger si vous essayez de vous connecter sur ce port et vous allez voir comment c'est pas joli j'ai faillit pas finir cet article mdr)
- On voit le protocole xinetd (eXtended InterNET Daemon) utilisé, qui est un super-serveur qui gère plusieurs services réseaux sous Linux.
- Et d'autres choses sympa mais flemme d'approfondir vous avez compris.
Voila en gros de quoi est réellement capable Nmap, c'est un outil qui permet de savoir à quoi on à affaire réellement.
Scripts Scan
Nmap, Comme BurpSuite permet aux utilisateurs de créer des scripts personnalisés dans le langage Lua pour pouvoir faire un peut tout ce qu'on veut, ils s'utilisent de la manière suivante :
On va commencer par créer un petit script custom_robots.lua
local http = require "http" -- Import du module HTTP de Nmap
local shortport = require "shortport" -- Détection des ports courts
local stdnse = require "stdnse" -- Fonctions standard de Nmap
description = [[
Ce script scanne un serveur web et tente de récupérer le fichier robots.txt.
]]
author = "ChatGPT Mdr"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"discovery", "safe"}
-- Fonction pour tester si un service HTTP tourne sur un port donné
portrule = shortport.http
action = function(host, port)
local path = "/robots.txt"
local response = http.get(host, port, path) -- Fait une requête HTTP GET
if response and response.status == 200 then
return "Fichier robots.txt trouvé !\n" .. response.body
else
return "Aucun fichier robots.txt trouvé."
end
end
Puis on va l'utiliser directement avec Nmap :
nmap -p 80,443,8091,8092,8090,9091 --script "C:\\Path\\To\\custom-robots.lua" 192.168.1.254
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-10 01:35 Paris, Madrid
NSE: Warning: Loading 'C:\Users\Administrateur\custom-robots.lua' -- the recommended file extension is '.nse'.
Nmap scan report for 192.168.1.254
Host is up (0.00s latency).
PORT STATE SERVICE
80/tcp open http
| custom-robots: Fichier robots.txt trouv\xE9 !
| User-agent: *
|_Disallow: /
443/tcp open https
| custom-robots: Fichier robots.txt trouv\xE9 !
| User-agent: *
|_Disallow: /
8090/tcp open opsmessaging
8091/tcp open jamlink
8092/tcp open unknown
9091/tcp open xmltec-xmlmail
MAC Address: 38:07:16:16:4C:3C (Freebox SAS)
Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds
Grâce à notre script on peut voir que les ports 80 & 443 possèdent chacun un robots.txt. Biensûr ça n'est qu'un exemple gentillet mais avec une bonne dose d'imagination on peut faire tout ce qu'on veut dans la vie.
Nmap & Proxy
Utiliser un proxy avec Nmap peut être utile pour anonymiser tes scans ou contourner certaines restrictions réseau. Cependant, Nmap ne supporte pas directement les proxys SOCKS ou HTTP pour ses scans standards. Il existe néanmoins plusieurs méthodes pour y parvenir.
Nmap offre une option --proxy mais elle est très limitée et restrictive. Elle ne fonctionne que via NSE (Nmap Script Engine) donc bon c'est pas fou... Mais on a la solution ! Utilisez NordVPN c'est 100% Anonyme et sécurisé mdr (le faites pas hein). Mais par contre vous pouvez utiliser un autre fournisseur de VPN plus fiable ou créer le votre y'a des articles sur ce site qui en parlent ^^
Utiliser ProxyChains (Vraie solution)
Installer
sudo apt install proxychains # Debian-Based
sudo pacman install proxychains # Arch-Based
Éditer
sudo nano /etc/proxychains.conf
socks5 127.0.0.1 9050 (Pour utiliser Tor) ou socks5 127.0.0.1 8080 (Pour utiliser HTTP)
Lancer Nmap via Proxychains
proxychains nmap -sT -Pn -n -p 80,443 example.com
Interface Graphique
Nmap offre une interface graphique pour ceux qui sont sur Winows appelée Zenmap. C'est plutôt bien fait et intuitif on va détailler ça. Pour l'heure voici à quoi ressemble l'interface :
On peut quelques choses :
- Détails du scan dans la fenêtre principale
- Hosts & Services dans la Sidebar
- Commande du scan utilisée en haut
- La Cible
- Le Profil Utilisé
Allons dans les paramêtre en commençant par la topologie que Zenmap est capable de générer (c'est pas la plus belle au monde mais c'est toujours mieux que sur un vieux terminal tout moche)
Topologie Zenmap
Détails sur L'Hôte
Historique des Scans
Nmap nous offre aussi la possibilité de créer des profils comme dans firefox c'est pas beau ca ? On peut y ajouter les scripts NSE manuellement, ajouter nos propres scripts, configurer tout un tas d'options similaire ) la CLI
Conclusion
Nmap est un outil extrêmement puissant et utile, j'espère que cet article vous aura apporté le savoir dont vous aviez besoin parceque perso à l'époque quand j'essayais de comprendre le fonctionnement du machin les types soit ils en parlaient a moitié en faisant les mystérieux (mdr) soit ils savaient pas de quoi il en retournait.
N'hésitez surtout pas à contribuer hein on est toujours présent pour la gratitude : Buy Me A Coffee ?