Résumé Nmap (ESP)
Tip
Apprenez et pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Parcourez le catalogue complet de HackTricks Training pour les parcours d’évaluation (ARTA/GRTA/AzRTA) et Linux Hacking Expert (LHE).
Support HackTricks
- Consultez les subscription plans!
- Rejoignez 💬 le groupe Discord, le groupe telegram, suivez @hacktricks_live sur X/Twitter, ou consultez la page LinkedIn et la chaîne YouTube.
- Partagez des hacking tricks en soumettant des PRs aux dépôts github HackTricks et HackTricks Cloud.
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
Parameters
IPs to scan
<ip>,<net/mask>: Indique les ips directement-iL <ips_file>: list_IPs-iR <number>: Nombre d’IPs aléatoires, vous pouvez exclure des Ips possibles avec--exclude <Ips>ou--excludefile <file>.
Equipment discovery
Par défaut Nmap lance une phase de découverte consistant en : -PA80 -PS443 -PE -PP
-sL: Ce n’est pas invasif, il liste les cibles en effectuant des requêtes DNS pour résoudre les noms. Utile pour savoir si par exemple www.prueba.es/24 toutes les Ips sont nos cibles.-Pn: No ping. Utile si vous savez que toutes sont actives (sinon, vous pourriez perdre beaucoup de temps, mais cette option produit aussi des faux négatifs en disant qu’elles ne sont pas actives), elle empêche la phase de découverte.-sn: No port scan. Après la phase de reconnaissance, il ne scanne pas les ports. Relativement stealthy, et permet un petit scan réseau. Avec privilèges il envoie un ACK (-PA) à 80, un SYN(-PS) à 443 et une requête echo et une requête Timestamp, sans privilèges il complète toujours les connexions. Si la cible est le réseau, il n’utilise que ARP(-PR). Si utilisé avec une autre option, seuls les paquets de l’autre option sont envoyés.-PR: Ping ARP. Utilisé par défaut lors de l’analyse d’ordinateurs dans notre réseau, plus rapide que l’utilisation de pings. Si vous ne voulez pas utiliser de paquets ARP utilisez--send-ip.-PS <ports>: Envoie des paquets SYN ; si cela répond SYN/ACK c’est open (il répond avec RST pour ne pas terminer la connexion), si ça répond RST c’est closed et si ça ne répond pas c’est unreachable. En cas de privilèges insuffisants, une connexion complète est automatiquement utilisée. Si aucun port n’est donné, il le lance sur 80.-PA <ports>: Comme le précédent mais avec ACK, combiner les deux donne de meilleurs résultats.-PU <ports>: L’objectif est l’inverse, ils sont envoyés à des ports qui sont censés être fermés. Certains firewall ne vérifient que les connexions TCP. Si c’est closed on répond avec port unreachable, si on répond avec un autre icmp ou rien on laisse comme destination unreachable.-PE, -PP, -PM: ICMP PINGS : echo replay, timestamp et addresmask. Ils sont lancés pour savoir si la cible est active.-PY<ports>: Envoie des probes SCTP INIT sur 80 par défaut, INIT-ACK(open) ou ABORT(closed) ou rien ou ICMP unreachable(inactive) peuvent être renvoyés.-PO <protocols>: On indique un protocole dans les headers, par défaut 1(ICMP), 2(IGMP) et 4(Encap IP). Pour ICMP, IGMP, TCP (6) et UDP (17) les headers de protocole sont envoyés, pour le reste seul l’en-tête IP est envoyé. Le but est qu’en raison de la malformation des headers, Protocol unreachable ou des réponses du même protocole soient renvoyées pour savoir si c’est up.-n: No DNS-R: DNS always--system-dns: Force le resolver de l’OS au lieu du parallel stub resolver de Nmap. Utile quand/etc/hosts, split-DNS, ou des plugins de resolver retournent des données que les requêtes directes de Nmap ne donnent pas. C’est plus lent, et depuis Nmap 7.96 les forward lookups sont déjà parallélisés, ceci est généralement nécessaire seulement pour compatibilité de resolver.--dns-servers <server[,server],...>: Force des serveurs DNS spécifiques pour les reverse lookups. Utile en assessments internes pour interroger directement des resolvers autoritatifs ou internes, ou pour détourner le trafic-sL/reverse-DNS des resolvers par défaut du testeur.
Port scanning techniques
-sS: Ne complète pas la connexion donc ne laisse pas de trace, très bien si on peut l’utiliser.(privileges) C’est celui utilisé par défaut.-sT: Complète la connexion, donc laisse une trace, mais peut être utilisé sans problème. Par défaut sans privilèges.-sU: Plus lent, pour UDP. Principalement : DNS(53), SNMP(161,162), DHCP(67 and 68), (-sU53,161,162,67,68): open(reply), closed(port unreachable), filtered (another ICMP), open/filtered (nothing). En cas de open/filtered, -sV envoie de nombreuses requêtes pour détecter l’une des versions que nmap supporte et peut détecter le vrai état. Augmente beaucoup le temps.-sY: SCTP protocol échoue à établir la connexion, donc pas de logs, fonctionne comme -PY-sN,-sX,-sF: Null, Fin, Xmas, ils peuvent pénétrer certains firewall et extraire de l’information. Basés sur le fait que les machines conformes devraient répondre avec RST à toutes les requêtes qui n’ont pas SYN, RST ou ACK levés : open/filtered(nothing), closed(RST), filtered (ICMP unreachable). Peu fiables sur Windows, CIsco, BSDI et OS/400. Sur unix oui.-sM: Maimon scan : Envoie FIN et ACK flags, utilisé pour BSD, actuellement retournera tout comme closed.-sA, sW: ACK et Window, utilisé pour détecter les firewall, pour savoir si les ports sont filtered ou non. Le -sW distingue open/closed puisque les open répondent avec une valeur de window différente : open (RST with window other than 0), closed (RST window = 0), filtered (ICMP unreachable or nothing). Tous les ordinateurs ne fonctionnent pas de cette manière, donc si tout est closed, ça ne marche pas, si quelques-uns sont open, ça marche bien, et si beaucoup sont open et peu closed, ça marche à l’inverse.-sI: Idle scan. Pour les cas où il y a un firewall actif mais on sait qu’il ne filtre pas vers une certaine Ip (ou quand on veut simplement anonymat) on peut utiliser le zombie scanner (il fonctionne pour tous les ports), pour chercher des zombies possibles on peut utiliser le scrpit ipidseq ou l’exploit auxiliary/scanner/ip/ipidseq. Ce scanner est basé sur le numéro IPID des paquets IP.--badsum: Envoie le checksum incorrect, les ordinateurs rejetteraient les paquets, mais les firewall pourraient répondre quelque chose, utilisé pour détecter des firewall.-sZ: “Weird” SCTP scanner, en envoyant des probes avec cookie echo fragments ils devraient être drop s’ils sont open ou répondre avec ABORT s’ils sont closed. Peut passer des firewall que init ne passe pas, le mauvais côté est qu’il ne distingue pas entre filtered et open.-sO: Protocol Ip scan. Envoie des headers incorrects et vides où parfois même le protocole ne peut pas être distingué. Si ICMP unreachable protocol arrive c’est closed, si unreachable port arrive c’est open, si une autre erreur arrive, filtered, si rien n’arrive, open|filtered.-b <server>: FTPhost–> Utilisé pour scanner un hôte depuis un autre, cela se fait en se connectant au ftp d’une autre machine et en lui demandant d’envoyer des fichiers vers les ports que vous voulez scanner depuis une autre machine ; selon les réponses on saura s’ils sont open ou non. [<user>:<password>@]<server>[:<port>] Presque tous les ftp servers ne permettent plus ceci et donc c’est peu utile en pratique.
Focus Analysis
-p: Utilisé pour spécifier les ports à scanner. Pour sélectionner les 65,335 ports : -p- ou -p all. Nmap a une classification interne basée sur la popularité. Par défaut, il utilise les 1000 top ports. Avec -F (fast scan) il analyse les 100 top. Avec –top-ports
-sV Version scanning, l’intensité peut être réglée de 0 à 9, par défaut 7.
–version-intensity
–version-light Alias de --version-intensity 2. Très utile pour un premier passage sur de grandes plages ou des services UDP lents.
–version-all Alias de --version-intensity 9. Force toutes les probes et est utile quand un service ne répond qu’à des probes rares.
–allports Force la détection de version sur des ports exclus par nmap-service-probes (notamment TCP/9100). Attention : sur certaines imprimantes ou listeners raw socket cela peut les faire imprimer les données du probe.
-O OS detection
–osscan-limit Pour une détection OS correcte, il faut au moins un port open et un port closed. Si cette condition n’est pas remplie et qu’on a activé ceci, il n’essaiera pas la prédiction OS (gagne du temps)
–osscan-guess Quand la détection OS n’est pas parfaite, cela le fait insister davantage
Scripts
–script
Pour utiliser les scripts par défaut, utilisez -sC ou –script=default
Types disponibles : auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, et vuln
- Auth: exécute tous les scripts d’authentication disponibles
- Default: exécute les scripts de base par défaut de l’outil
- Discovery: récupère des informations de la cible ou de la victime
- External: script pour utiliser des ressources externes
- Intrusive: utilise des scripts considérés intrusive pour la victime ou la cible
- Malware: vérifie des connexions ouvertes par du code malveillant ou des backdoors
- Safe: exécute des scripts non-intrusifs
- Vuln: découvre les vulnérabilités les plus connues
- All: exécute absolument tous les scripts d’extension NSE disponibles
Pour rechercher des scripts :
nmap –script-help=“http-*” -> Ceux commençant par http-
nmap –script-help=“not intrusive” -> Tous sauf ceux-là
nmap –script-help=“default or safe” -> Ceux dans l’un ou l’autre
nmap –script-help=“default and safe” –> Ceux dans les deux
nmap –script-help=“(default or safe or intrusive) and not http-*”
–script-args
–script-args-file
–script-help
–script-trace —> Fournit des infos sur la progression du script
–script-updatedb
Pour utiliser un script, tapez simplement : nmap –script Script_Name target –> Lors de l’utilisation du script, le script et le scanner s’exécuteront, donc des options de scanner peuvent aussi être ajoutées. On peut ajouter “safe=1” pour n’exécuter que les safe.
Time Control
Nmap peut modifier le temps en seconds, minutes, ms: –host-timeout arguments 900000ms, 900, 900s, et 15m font la même chose.
Nmap divise le nombre total d’hôtes à scanner en groupes et analyse ces groupes par blocs, il ne passe pas au bloc suivant tant que tous n’ont pas été analysés (et l’utilisateur ne reçoit aucune mise à jour jusqu’à ce que le bloc soit analysé). De cette façon, il est plus optimal pour Nmap d’utiliser de grands groupes. Par défaut dans une class C, il utilise 256.
Ceci peut être changé avec –min-hostgroup
Vous pouvez contrôler le nombre de scanners parallèles mais il est préférable de ne pas le faire (Nmap intègre déjà un contrôle automatique basé sur l’état du réseau) : –min-parallelism
On peut modifier le timeout RTT, mais en général ce n’est pas nécessaire : –min-rtt-timeout , –max-rtt-timeout , –initial-rtt-timeout
On peut modifier le nombre de tentatives : –max-retries
On peut modifier le temps de scan d’un hôte : –host-timeout
On peut modifier le délai entre chaque test pour le ralentir : –scan-delay ; –max-scan-delay
On peut modifier le nombre de paquets par seconde : –min-rate
Beaucoup de ports prennent longtemps à répondre quand ils sont filtered ou closed. Si on ne s’intéresse qu’aux open, on peut aller plus vite avec : –defeat-rst-ratelimit
Pour définir à quel point on veut que Nmap soit agressif : -T paranoid|sneaky|polite|normal|aggressive|insane
-T (0-1)
-T0 –> Scanne seulement 1 port à la fois et attend 5min avant le suivant
-T1 et T2 –> Très similaires mais n’attendent que 15 et 0.4sec respectivement entre chaque test
-T3 –> Opération par défaut, inclut le scanning parallèle
-T4 –> –max-rtt-timeout 1250ms –min-rtt-timeout 100ms –initial-rtt-timeout 500ms –max-retries 6 –max-scan-delay 10ms
-T5 –> –max-rtt-timeout 300ms –min-rtt-timeout 50ms –initial-rtt-timeout 250ms –max-retries 2 –host-timeout 15m –max-scan-delay 5ms
Firewall/IDS
Ils n’autorisent pas l’accès aux ports et analysent les paquets.
-f Pour fragmenter les paquets, par défaut ils sont fragmentés en 8bytes après l’en-tête, pour spécifier cette taille on utilise ..mtu (avec ceci, ne pas utiliser -f), l’offset doit être multiple de 8. Version scanners and scripts don’t support fragmentation
-D decoy1,decoy2,ME Nmap envoie des scans mais avec d’autres IPs comme origine, ainsi ils vous cachent. Si vous mettez ME dans la liste, Nmap se placera là, mieux vaut mettre 5 ou 6 avant vous pour vous masquer complètement. Des IPs aléatoires peuvent être générées avec RND:
Pour utiliser des IPs aléatoires : nmap -D RND:10 Target_IP
-S IP Pour quand Nmap ne détecte pas votre IP vous devez la fournir. Sert aussi à faire croire qu’une autre cible vous scanne.
-e
Beaucoup d’administrateurs laissent des ports d’entrée ouverts pour que tout fonctionne correctement et c’est plus simple pour eux que de trouver une autre solution. Cela peut être des ports DNS ou FTP… pour trouver cette vulnérabilité Nmap incorpore : –source-port
–data
–data-string
–data-length
Pour configurer complètement le paquet IP utilisez –ip-options
Si vous souhaitez voir les options dans les paquets envoyés et reçus, spécifiez –packet-trace. Pour plus d’informations et des exemples d’utilisation des IP options avec Nmap, voir http://seclists.org/nmap-dev/2006/q3/52.
–ttl
–randomize-hosts Pour rendre l’attaque moins évidente
–spoof-mac <MAC address, prefix, or vendor name> Pour changer le MAC exemples : Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, and Cisco
–proxies
-sP Pour découvrir des hosts dans notre réseau via ARP
Beaucoup d’administrateurs créent une règle de firewall qui autorise tous les paquets venant d’un port particulier à passer (comme 20,53 et 67), on peut dire à Nmap d’envoyer nos paquets depuis ces ports : nmap –source-port 53 IP
Outputs
-oN file Normal output
-oX file XML output
-oS file Script kiddies output
-oG file Greppable output. Ça marche encore, mais il est déprécié ; XML est le meilleur format pour l’automatisation parce que les nouvelles fonctionnalités de Nmap y sont ajoutées en premier. Continuez d’utiliser -oN si vous voulez --resume, et préférez -oX/-oA pour le parsing machine.
-oA file All except -oS
–webxml Change la référence de stylesheet XML vers https://nmap.org/svn/docs/nmap.xsl, rendant le XML plus facile à ouvrir comme HTML sur une autre machine.
–stylesheet <path|url> Utiliser une XSL stylesheet personnalisée. --webxml est juste un raccourci vers la stylesheet officielle hébergée.
-v level verbosity
-d level debugging
–reason Raison de l’état de l’hôte
–stats-every time Toutes les fois indiquées il nous dit comment ça se passe
–packet-trace Pour voir quels paquets sortent, des filtres peuvent être spécifiés comme : –version-trace ou –script-trace
–open montre open, open|filtered et unfiltered
–resume file Reprend un scan interrompu à partir d’un fichier de sortie normal (-oN) ou grepable (-oG). Dans les workflows actuels il est courant de garder -oN pour la reprise et -oX pour le parsing.
Example for parsing/HTML conversion workflows:
# Send only XML to stdout for tooling
nmap -sV -oX - 10.10.10.0/24
# Portable HTML-friendly XML
nmap -sV --webxml -oX scan.xml 10.10.10.10
Divers
-6 Autorise IPv6
-A est équivalent à -O -sV -sC –traceroute
Run time
Pendant que Nmap s’exécute, nous pouvons modifier les options :
v / V Augmenter / diminuer le niveau de verbosité
d / D Augmenter / diminuer le niveau de débogage
p / P Activer / désactiver le traçage des paquets
? Afficher l’aide interactive pendant l’exécution
Vulscan
Script Nmap qui examine les versions des services obtenues dans une base de données hors ligne (téléchargée depuis d’autres très importantes) et renvoie des vulnérabilités possibles
Les bases de données qu’il utilise sont :
- Scipvuldb.csv | http://www.scip.ch/en/?vuldb
- Cve.csv | http://cve.mitre.org
- Osvdb.csv | http://www.osvdb.org
- Securityfocus.csv | http://www.securityfocus.com/bid/
- Securitytracker.csv | http://www.securitytracker.com
- Xforce.csv | http://xforce.iss.net
- Exploitdb.csv | http://www.exploit-db.com
- Openvas.csv | http://www.openvas.org
Pour télécharger et installer dans le dossier Nmap :
wget http://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz && tar -czvf nmap_nse_vulscan-2.0.tar.gz vulscan/ && sudo cp -r vulscan/ /usr/share/nmap/scripts/
Vous devrez également télécharger les packages DB et les ajouter dans /usr/share/nmap/scripts/vulscan/
Utilisation :
To use all: sudo nmap -sV –script=vulscan HOST_TO_SCAN
To use a specific DB: sudo nmap -sV –script=vulscan –script-args vulscandb=cve.csv HOST_TO_SCAN
If you have Internet access, Nmap’s official vulners NSE script is usually the quickest maintained alternative for version-based enrichment:
nmap -sV --script vulners --script-args mincvss=7.0 <IP>
This script belongs to the safe, external, and vuln categories. Because it depends on how accurate -sV was, validate hits manually when the service banner is generic or proxied.
Notes pratiques récentes (7.94+)
- Depuis Nmap 7.94, le scan de ports UDP (
-sU) et la détection de version (-sV) utilisent la même source de payloadnmap-service-probes. Une réponse UDP de la phase de scan peut immédiatement alimenter la correspondance des versions, donc-sU -sV --version-lightest maintenant un bon premier passage contre des plages larges ou sujettes à perte. - Depuis Nmap 7.94,
-sVpeut aussi sonder des services UDP cachés derrière DTLS, ce qui est utile pour les équipements modernes de management/ICS qui encapsulent des protocoles UDP dans DTLS. - Nmap 7.95 a ajouté un large lot de nouvelles empreintes de service, incluant
grpc,mysqlx,remotemouse, ettuya, ainsi que de la couverture NSE orientée ICS commehartip-infoetiec61850-mms. Si vous scannez des environnements OT ou embarqués, mettre à jour Nmap importe plus que d’ajouter des sondes personnalisées trop tôt. - Depuis Nmap 7.96, les résolutions DNS directes sont également parallélisées. Les grandes listes d’hôtes sont beaucoup plus rapides maintenant, donc
--system-dnsdevrait généralement être réservé aux problèmes de compatibilité plutôt qu’à la performance.
Accélérer l’analyse de services Nmap x16
According to this post you can speed up the nmap service analysis by modifying all the totalwaitms values in /usr/share/nmap/nmap-service-probes to 300 and tcpwrappedms to 200.
Moreover, probes which do not have a specifically defined servicewaitms use a default value of 5000. Therefore, we can either add values to each of the probes, or we can compile nmap ourselves and change the default value in service_scan.h.
If you don’t want to change the values of totalwaitms and tcpwrappedms at all in the /usr/share/nmap/nmap-service-probes file, you can edit the parsing code such that these values in the nmap-service-probes file are completely ignored.
Construire un Nmap statique pour des environnements restreints
In hardened or minimal Linux environments (containers, appliances), dynamically linked Nmap binaries often fail due to missing runtime loaders or shared libraries (e.g., /lib64/ld-linux-x86-64.so.2, libc.so). Building your own statically linked Nmap and bundling NSE data allows execution without installing system packages.
Approche générale
- Use a clean amd64 Ubuntu builder via Docker.
- Build OpenSSL and PCRE2 as static libraries.
- Build Nmap linking statically and using the included libpcap/libdnet to avoid dynamic deps.
- Bundle NSE scripts and data directories with the binary.
Découvrir l’architecture cible (exemple)
uname -a
# If building from macOS/ARM/etc., pin the builder arch:
docker run --rm --platform=linux/amd64 -v "$(pwd)":/out -w /tmp ubuntu:22.04 bash -lc 'echo ok'
Étape 1 — Préparer la chaîne d’outils
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update && apt-get install -y --no-install-recommends \
build-essential ca-certificates curl bzip2 xz-utils pkg-config perl python3 file git \
automake autoconf libtool m4 zlib1g-dev
Étape 2 — Construire OpenSSL statique (1.1.1w)
OSSL="1.1.1w"
curl -fsSLO "https://www.openssl.org/source/openssl-$OSSL.tar.gz"
tar xzf "openssl-$OSSL.tar.gz" && cd "openssl-$OSSL"
./Configure no-shared no-zlib linux-x86_64 -static --prefix=/opt/ossl
make -j"$(nproc)" && make install_sw
cd /tmp
Étape 3 — Construire PCRE2 statique (10.43)
PCRE2=10.43
curl -fsSLO "https://github.com/PCRE2Project/pcre2/releases/download/pcre2-$PCRE2/pcre2-$PCRE2.tar.bz2"
tar xjf "pcre2-$PCRE2.tar.bz2" && cd "pcre2-$PCRE2"
./configure --disable-shared --enable-static --prefix=/opt/pcre2
make -j"$(nproc)" && make install
cd /tmp
Étape 4 — Construire Nmap statique (7.98)
NMAP=7.98
curl -fsSLO "https://nmap.org/dist/nmap-$NMAP.tar.bz2"
tar xjf "nmap-$NMAP.tar.bz2" && cd "nmap-$NMAP"
export CPPFLAGS="-I/opt/ossl/include -I/opt/pcre2/include"
export LDFLAGS="-L/opt/ossl/lib -L/opt/pcre2/lib -static -static-libstdc++ -static-libgcc"
export LIBS="-lpcre2-8 -ldl -lpthread -lz"
./configure \
--with-openssl=/opt/ossl \
--with-libpcre=/opt/pcre2 \
--with-libpcap=included \
--with-libdnet=included \
--without-zenmap --without-ndiff --without-nmap-update
# Avoid building shared libpcap by accident
sed -i -e "s/^shared: /shared: #/" libpcap/Makefile || true
make -j1 V=1 nmap
strip nmap
Points clés
- -static, -static-libstdc++, -static-libgcc forcent la liaison statique.
- L’utilisation de –with-libpcap=included/–with-libdnet=included évite les bibliothèques partagées du système.
- Une modification sed neutralise une cible libpcap partagée si elle est présente.
Étape 5 — Regrouper le binaire et les données NSE
mkdir -p /out/nmap-bundle/nmap-data
cp nmap /out/nmap-bundle/nmap-linux-amd64-static
cp -r scripts nselib /out/nmap-bundle/nmap-data/
cp nse_main.lua nmap-services nmap-protocols nmap-service-probes \
nmap-mac-prefixes nmap-os-db nmap-payloads nmap-rpc \
/out/nmap-bundle/nmap-data/ 2>/dev/null || true
tar -C /out -czf /out/nmap-linux-amd64-static-bundle.tar.gz nmap-bundle
Notes de vérification et d’exploitation
- Utilisez file sur l’artéfact pour confirmer qu’il est lié statiquement.
- Conservez les données NSE avec le binaire pour garantir la parité des scripts sur des hôtes sans Nmap installé.
- Même avec un binaire statique, l’exécution peut être bloquée par AppArmor/seccomp/SELinux ; DNS/egress doit toujours fonctionner.
- Des builds déterministes réduisent le risque dans la chaîne d’approvisionnement par rapport au téléchargement de binaires “statiques” opaques.
One-liner (Dockerized)
Construire, regrouper et afficher les infos de l'artéfact
```bash docker run --rm --platform=linux/amd64 -v "$(pwd)":/out -w /tmp ubuntu:22.04 bash -lc ' set -euo pipefail export DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends \ build-essential ca-certificates curl bzip2 xz-utils pkg-config perl python3 file git \ automake autoconf libtool m4 zlib1g-devOSSL=“1.1.1w”; curl -fsSLO “https://www.openssl.org/source/openssl-$OSSL.tar.gz”
&& tar xzf “openssl-$OSSL.tar.gz” && cd “openssl-$OSSL”
&& ./Configure no-shared no-zlib linux-x86_64 -static –prefix=/opt/ossl
&& make -j“$(nproc)“ && make install_sw && cd /tmp
PCRE2=10.43; curl -fsSLO “https://github.com/PCRE2Project/pcre2/releases/download/pcre2-$PCRE2/pcre2-$PCRE2.tar.bz2”
&& tar xjf “pcre2-$PCRE2.tar.bz2” && cd “pcre2-$PCRE2”
&& ./configure –disable-shared –enable-static –prefix=/opt/pcre2
&& make -j“$(nproc)“ && make install && cd /tmp
NMAP=7.98; curl -fsSLO “https://nmap.org/dist/nmap-$NMAP.tar.bz2”
&& tar xjf “nmap-$NMAP.tar.bz2” && cd “nmap-$NMAP”
&& export CPPFLAGS=“-I/opt/ossl/include -I/opt/pcre2/include”
&& export LDFLAGS=“-L/opt/ossl/lib -L/opt/pcre2/lib -static -static-libstdc++ -static-libgcc”
&& export LIBS=“-lpcre2-8 -ldl -lpthread -lz”
&& ./configure –with-openssl=/opt/ossl –with-libpcre=/opt/pcre2 –with-libpcap=included –with-libdnet=included –without-zenmap –without-ndiff –without-nmap-update
&& sed -i -e “s/^shared: /shared: #/” libpcap/Makefile || true
&& make -j1 V=1 nmap && strip nmap
mkdir -p /out/nmap-bundle/nmap-data
&& cp nmap /out/nmap-bundle/nmap-linux-amd64-static
&& cp -r scripts nselib /out/nmap-bundle/nmap-data/
&& cp nse_main.lua nmap-services nmap-protocols nmap-service-probes nmap-mac-prefixes nmap-os-db nmap-payloads nmap-rpc /out/nmap-bundle/nmap-data/ 2>/dev/null || true
&& tar -C /out -czf /out/nmap-linux-amd64-static-bundle.tar.gz nmap-bundle
&& echo “===== OUTPUT =====”; ls -lah /out; echo “===== FILE TYPE =====”; file /out/nmap-bundle/nmap-linux-amd64-static || true
’
</details>
## Références
- [Compiling static Nmap binary for jobs in restricted environments](https://www.pentestpartners.com/security-blog/compiling-static-nmap-binary-for-jobs-in-restricted-environments/)
- [Static Nmap Binary Generator (helper tool)](https://github.com/0x5ubt13/static_nmap_binary_generator)
- [OpenSSL sources](https://www.openssl.org/source/)
- [PCRE2 releases](https://github.com/PCRE2Project/pcre2/releases)
- [Nmap source tarballs](https://nmap.org/dist/)
- [Nmap Change Log](https://nmap.org/changelog.html)
- [Nmap Output Formats](https://nmap.org/book/man-output.html)
> [!TIP]
> Apprenez et pratiquez AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Apprenez et pratiquez GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Apprenez et pratiquez Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Parcourez le [**catalogue complet de HackTricks Training**](https://hacktricks-training.com/courses/) pour les parcours d'évaluation (**ARTA/GRTA/AzRTA**) et [**Linux Hacking Expert (LHE)**](https://hacktricks-training.com/courses/lhe/).
>
> <details>
>
> <summary>Support HackTricks</summary>
>
> - Consultez les [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Rejoignez** 💬 le [**groupe Discord**](https://discord.gg/hRep4RUj7f), le [**groupe telegram**](https://t.me/peass), **suivez** [**@hacktricks_live**](https://twitter.com/hacktricks_live) sur **X/Twitter**, ou consultez la [**page LinkedIn**](https://www.linkedin.com/company/hacktricks/) et la [**chaîne YouTube**](https://www.youtube.com/@hacktricks_LIVE).
> - **Partagez des hacking tricks en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
>
> </details>


