Nmap Sažetak (ESP)

Tip

Nauči i vežbaj AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Nauči i vežbaj GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Nauči i vežbaj Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Pregledaj kompletan HackTricks Training katalog za assessment tracks (ARTA/GRTA/AzRTA) i Linux Hacking Expert (LHE).

Podrži HackTricks
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24

Parametri

IP-ovi za skeniranje

  • <ip>,<net/mask>: Navedite IP-ove direktno
  • -iL <ips_file>: list_IPs
  • -iR <number>: Broj slučajnih IP-ova, možete isključiti moguće IP-ove sa --exclude <Ips> ili --excludefile <file>.

Otkrivanje opreme

Po defaultu Nmap pokreće fazu otkrivanja koja se sastoji od: -PA80 -PS443 -PE -PP

  • -sL: Nije invazivan, navodi ciljeve praveći DNS zahteve za razrešavanje imena. Korisno je znati, na primer, da li su svi IP-ovi iz www.prueba.es/24 naši ciljevi.
  • -Pn: Bez pinga. Korisno ako znate da su svi aktivni (ako nisu, možete izgubiti dosta vremena, ali ova opcija takođe proizvodi lažne negativne rezultate govoreći da nisu aktivni), sprečava fazu otkrivanja.
  • -sn : Bez skeniranja portova. Nakon završetka rekognosciranja, ne skenira portove. Relativno je stealth i dozvoljava malo skeniranje mreže. Sa privilegijama šalje ACK (-PA) na 80, SYN (-PS) na 443 i echo request i Timestamp request, bez privilegija uvek završava konekcije. Ako je cilj mreža, koristi samo ARP (-PR). Ako se koristi sa nekom drugom opcijom, samo paketi druge opcije se šalju.
  • -PR: Ping ARP. Koristi se po defaultu kada se analiziraju računari u našoj mreži, brže je od korišćenja pings. Ako ne želite koristiti ARP pakete koristite --send-ip.
  • -PS <ports>: Šalje SYN pakete na koje, ako odgovori SYN/ACK, port je open (na šta odgovori sa RST da ne bi završio konekciju), ako odgovori RST onda je closed, a ako ne odgovori onda je unreachable. U slučaju nedostatka privilegija koristi se potpuna konekcija automatski. Ako nisu dati portovi, koristi 80.
  • -PA <ports>: Kao prethodno, ali sa ACK; kombinacija oba daje bolje rezultate.
  • -PU <ports>: Cilj je suprotan, šalju se ka portovima koji se očekuju zatvorenim. Neki firewalle proveravaju samo TCP konekcije. Ako je zatvoren, odgovori se sa port unreachable; ako odgovori drugim ICMP ili ne odgovori, ostavlja se kao destination unreachable.
  • -PE, -PP, -PM : ICMP PINGS: echo reply, timestamp i addresmask. Pokreću se da bi se saznalo da li je cilj aktivan.
  • -PY<ports>: Šalje SCTP INIT probe na 80 po defaultu, INIT-ACK (open) ili ABORT (closed) ili ništa ili ICMP unreachable (inactive) može biti odgovoreno.
  • -PO <protocols>: Navodi se protokol u headerima, po defaultu 1(ICMP), 2(IGMP) i 4(Encap IP). Za ICMP, IGMP, TCP (6) i UDP (17) protokole šalju se protokol headeri, za ostale se šalje samo IP header. Svrha je da usled malformacije headera stigne Protocol unreachable ili odgovori istog protokola da bi se znalo da li je up.
  • -n: Bez DNS-a
  • -R: Uvek DNS
  • --system-dns: Forsira OS resolver umesto Nmap-ovog parallel stub resolver-a. Korisno kada /etc/hosts, split-DNS, ili resolver pluginovi vraćaju podatke koje Nmap-ove direktne upite ne vraćaju. Sporije je, i od Nmap 7.96 forward lookups su već paralelizovani, obično je potrebno samo za kompatibilnost resolver-a.
  • --dns-servers <server[,server],...>: Forsira specifične DNS servere za reverse lookups. Korisno u internim procenama da se direktno pita autoritativni ili interni resolver, ili da se prebaci -sL/reverse-DNS saobraćaj dalje od podrazumevanih resolver-a testera.

Tehnike skeniranja portova

  • -sS: Ne završava konekciju pa ne ostavlja trag, veoma dobro ako se može koristiti (privilegije). Koristi se po defaultu.
  • -sT: Završava konekciju, pa ostavlja trag, ali se može koristiti bez sumnje. Po defaultu bez privilegija.
  • -sU: Sporije, za UDP. Većinom: DNS(53), SNMP(161,162), DHCP(67 i 68), (-sU53,161,162,67,68): open(reply), closed(port unreachable), filtered (drugi ICMP), open/filtered (ništa). U slučaju open/filtered, -sV šalje brojne zahteve da detektuje koju od verzija koje nmap podržava i može detektovati stvarno stanje. Znatno produžava vreme.
  • -sY: SCTP: ne uspostavlja konekciju, nema logova, radi kao -PY
  • -sN,-sX,-sF: Null, Fin, Xmas — mogu prodrijeti kroz neke firewalle i izvući informacije. Bazirane su na tome da standardno kompatibilne mašine treba da odgovore sa RST na sve zahteve koji nemaju SYN, RST ili ACK flag podignut: open/filtered (ništa), closed (RST), filtered (ICMP unreachable). Nepouzdano na WIndows, CIsco, BSDI i OS/400. Na unix-u da.
  • -sM: Maimon scan: Šalje FIN i ACK flagove, korišćen za BSD, trenutno će vratiti sve kao closed.
  • -sA, sW: ACK i Window, koristi se za detekciju firewalla, da se zna da li su portovi filtrirani ili ne. -sW razlikuje open/closed pošto open odgovaraju sa različitom vrednošću window-a: open (RST sa window ≠ 0), closed (RST window = 0), filtered (ICMP unreachable ili ništa). Ne rade svi računari ovako, pa ako je sve closed, ne funkcioniše; ako je malo open, radi kako treba; a ako je mnogo open i malo closed, radi obrnuto.
  • -sI: Idle scan. Za slučajeve kada postoji aktivan firewall ali znamo da ne filtrira ka određenom IP-u (ili kada želimo anonimnost) možemo koristiti zombie scanner (radi za sve portove). Za pronalaženje mogućih zombie koristimo skriptu ipidseq ili exploit auxiliary/scanner/ip/ipidseq. Ovaj skener se zasniva na IPID broju IP paketa.
  • --badsum: Šalje pogrešan checksum; računari bi odbacili pakete, ali firewall-ovi bi mogli odgovoriti, koristi se za detekciju firewall-a.
  • -sZ: “Weird” SCTP scanner, kada se šalju probe sa cookie echo fragmentima trebalo bi da budu odbačeni ako su open ili odgovoreni sa ABORT ako su closed. Može proći kroz firewalle koje init ne prolazi, loša strana je što ne razlikuje filtered od open.
  • -sO: Protocol IP scan. Šalje loše i prazne headere u kojima ponekad nije moguće ni razlikovati protokol. Ako stigne ICMP unreachable protocol, zatvoren je; ako stigne unreachable port, otvoren je; ako stigne druga greška, filtered; ako ništa, open|filtered.
  • -b <server>: FTPhost –> Koristi se za skeniranje hosta iz drugog hosta, radi se povezivanjem na ftp drugog računara i traženjem da on šalje fajlove na portove koje želite skenirati s druge mašine; po odgovorima ćemo znati da li su otvoreni ili ne. [<user>:<password>@]<server>[:<port>] Većina ftp servera više ne dopušta ovo pa je od malo praktične upotrebe.

Fokus analiza

-p: Koristi se za specificiranje portova za skeniranje. Za selektovanje svih 65.535 portova: -p- ili -p all. Nmap ima internu klasifikaciju baziranu na popularnosti. Po defaultu koristi top 1000 portova. Sa -F (fast scan) analizira top 100. Sa –top-ports analizira taj broj top portova (od 1 do 65.335). Provjerava portove u nasumičnom redu; da biste to sprečili, koristite -r. Takođe možemo izabrati specifične portove: 20-30,80,443,1024- (ovo znači od 1024 nadalje). Možemo grupisati portove po protokolima: U:53,T:21-25,80,139,S:9. Takođe možemo izabrati opseg unutar Nmap-ovih popularnih portova: -p [-1024] analizira do porta 1024 iz onih uključenih u nmap-services. –port-ratio Analizira najčešće portove unutar odnosa između 0 i 1

-sV Version scanning, intenzitet se može regulisati od 0 do 9, default je 7.

–version-intensity Regulišemo intenzitet, što je niže, pokreću se samo najverovatniji probe, ali ne svi. Time možemo znatno skratiti vreme UDP skeniranja.

–version-light Alias za --version-intensity 2. Veoma korisno za prvi prolaz preko velikih opsega ili sporih UDP servisa.

–version-all Alias za --version-intensity 9. Forsira sve probe i korisno kada servis odgovara samo na retke probe.

–allports Forsira version detection na portovima izuzetim od nmap-service-probes (značajno TCP/9100). Pažnja: na nekim printerima ili raw socket listener-ima ovo može naterati da isprintaju probe podatke.

-O Detekcija OS-a

–osscan-limit Za ispravno OS skeniranje potrebno je bar jedan open port i jedan closed port. Ako ovo nije ispunjeno i postavili smo ovu opciju, neće pokušavati OS predikciju (štednja vremena)

–osscan-guess Kada OS detekcija nije savršena, ovo ga tera da pokuša više.

Skripte

–script |||[,…]

Za korišćenje default skripti, koristite -sC ili –script=default

Dostupni tipovi su: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, i vuln

  • Auth: izvršava sve dostupne authentication skripte
  • Default: izvršava osnovne default tool skripte
  • Discovery: preuzima informacije sa cilja ili mete
  • External: skripta za korišćenje eksternih resursa
  • Intrusive: koristi skripte koje se smatraju intrusive prema metu ili žrtvi
  • Malware: proverava konekcije otvorene od strane malicioznog koda ili backdoora
  • Safe: izvršava ne-intruzivne skripte
  • Vuln: otkriva najpoznatije ranjivosti
  • All: izvršava apsolutno sve dostupne NSE extension skripte

Za pretragu skripti:

nmap –script-help=“http-*” -> Those starting with http-

nmap –script-help=“not intrusive” -> All except those

nmap –script-help=“default or safe” -> Those in either or both

nmap –script-help=“default and safe” –> Those in both

nmap –script-help=“(default or safe or intrusive) and not http-*”

–script-args =,={=},={,}

–script-args-file

–script-help ||||all[,…]

–script-trace —> Pruža informacije o napretku skripte

–script-updatedb

Da biste koristili skriptu, samo ukucajte: nmap –script Script_Name target –> Prilikom korišćenja skripte, pokrenuće se i skripta i skener, pa se mogu dodati i opcije skenera. Možemo dodati “safe=1” da izvršimo samo sigurne skripte.

Kontrola vremena

Nmap može modifikovati vreme u sekundama, minutima, ms: –host-timeout argumenti 900000ms, 900, 900s, i 15m sve rade isto.

Nmap deli ukupan broj hostova za skeniranje u grupe i analizira te grupe u blokovima, tako da ne prelazi na sledeći blok dok svi nisu analizirani (i korisnik ne dobija ažuriranja dok blok nije obrađen). Na ovaj način je optimalnije da Nmap koristi velike grupe. Po defaultu u class C koristi 256.

Ovo se može menjati sa –min-hostgroup ; –max-hostgroup (Podešavanje veličina paralelnih grupa skenera)

Možete kontrolisati broj paralelnih skenera ali je bolje ne dirati (Nmap već uključuje automatsku kontrolu baziranu na stanju mreže): –min-parallelism ; –max-parallelism

Možemo modifikovati RTT timeout, ali obično nije neophodno: –min-rtt-timeout , –max-rtt-timeout , –initial-rtt-timeout

Možemo modifikovati broj pokušaja: –max-retries

Možemo modifikovati vreme skeniranja hosta: –host-timeout

Možemo modifikovati vreme između svakog testa da ga usporimo: –scan-delay ; –max-scan-delay

Možemo modifikovati broj paketa po sekundi: –min-rate ; –max-rate

Mnogi portovi dugo odgovaraju kada su filtrirani ili zatvoreni. Ako nas zanimaju samo otvoreni, možemo ići brže sa: –defeat-rst-ratelimit

Da definišemo koliko agresivno želimo da Nmap bude: -T paranoid|sneaky|polite|normal|aggressive|insane

-T (0-1)

-T0 –> Skenira samo 1 port u isto vreme i čeka 5min do sledećeg

-T1 i T2 –> Veoma slični ali čekaju 15s odnosno 0.4s između svakog testa

-T3 –> Default, uključuje paralelno skeniranje

-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

Oni ne dozvoljavaju pristup portovima i analiziraju pakete.

-f Fragmentira pakete; po defaultu fragmentuje na 8 bytes posle header-a, da se specificira ta veličina koristimo ..mtu (sa ovim, nemojte koristiti -f), offset mora biti višekratnik od 8. Version scanners i skripte ne podržavaju fragmentaciju

-D decoy1,decoy2,ME Nmap šalje skenove ali sa drugim IP adresama kao izvor, na taj način vas skriva. Ako stavite ME u listu, Nmap će vas tamo pozicionirati, bolje je staviti 5 ili 6 pre vas da biste se potpuno zamaskirali. Nasumični IP-ovi se mogu generisati sa RND: da generišete nasumičnih IP-ova. Ne rade sa TCP version detector-ima bez konekcije. Ako ste unutar mreže, zainteresovani ste za korišćenje aktivnih IP-ova, inače će biti lako zaključiti da ste jedini aktivni.

Za korišćenje nasumičnih IP-ova: nmap -D RND:10 Target_IP

-S IP Kada Nmap ne hvata vašu IP adresu morate je dati ovim. Takođe služi da se učini da drugi cilj misli da ga drugi target skenira.

-e Za izbor interfejsa

Mnogi administratori ostave ulazne portove otvorene da bi sve funkcionisalo i lakše im je nego tražiti drugo rešenje. To mogu biti DNS portovi ili FTP portovi… da se nađe ova ranjivost Nmap uključuje: –source-port ;-g Ekivalentno su

–data Za slanje heksadecimalnog teksta: –data 0xdeadbeef i –data \xCA\xFE\x09

–data-string Za slanje običnog teksta: –data-string “Scan conducted by Security Ops, extension 7192”

–data-length Nmap šalje samo header-e, sa ovim dodajemo određeni broj bajtova (koji će biti generisani nasumično)

Da konfigurišete IP paket potpuno koristite –ip-options

Ako želite videti opcije u paketima koji se šalju i primaju, navedite –packet-trace. Za više informacija i primera korišćenja IP opcija sa Nmap-om, vidite http://seclists.org/nmap-dev/2006/q3/52.

–ttl

–randomize-hosts Da napad bude manje očigledan

–spoof-mac <MAC address, prefix, or vendor name> Za promenu MAC-a primeri: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, i Cisco

–proxies Za korišćenje proxy-a, ponekad proxy ne održava toliko otvorenih konekcija koliko Nmap želi pa bi se paralelizam morao modifikovati: –max-parallelism

-sP Za otkrivanje hostova u našoj mreži preko ARP

Mnogi administratori kreiraju firewall pravilo koje dozvoljava sve pakete koji dolaze sa određenog porta da prolaze (kao 20,53 i 67), možemo reći Nmap-u da pošalje naše pakete sa tih portova: nmap –source-port 53 IP

Izlazi

-oN file Normalan izlaz

-oX file XML izlaz

-oS file script kiddies output

-oG file Greppable izlaz. Još uvek radi, ali je deprecated; XML je bolji format za automatizaciju jer se nove Nmap funkcije tamo prvo dodaju. Nastavite koristiti -oN ako želite --resume, i preferirajte -oX/-oA za mašinsko parsiranje.

-oA file Sve osim -oS

–webxml Menja XML stylesheet referencu na https://nmap.org/svn/docs/nmap.xsl, čineći XML lakšim za otvaranje kao HTML na drugoj mašini.

–stylesheet <path|url> Koristi prilagođeni XSL stylesheet. --webxml je samo prečica za hostovani službeni stylesheet.

-v level verbosity

-d level debugging

–reason Razlog za status hosta i stanja

–stats-every time Svaki toliki period izveštava o napretku

–packet-trace Da vidite koje pakete šalje, mogu se specificirati filteri kao: –version-trace ili –script-trace

–open prikazuje open, open|filtered i unfiltered

–resume file Nastavlja prekinuto skeniranje iz normalnog (-oN) ili grepable (-oG) izlaznog fajla. U trenutnim radnim tokovima uobičajeno je držati -oN za resume mogućnost i -oX za parsiranje.

Primer za parsing/HTML konverziju 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

Razno

-6 Omogućava IPv6

-A je isto kao -O -sV -sC –traceroute

Tok izvršavanja

Dok Nmap radi, možemo menjati opcije:

v / V Povećaj / smanji nivo detaljnosti

d / D Povećaj / smanji nivo debugovanja

p / P Uključi / isključi praćenje paketa

? Ispiši ekran pomoći za interakciju tokom izvršavanja

Vulscan

Nmap skripta koja pregleda verzije servisa dobijene iz offline baze podataka (preuzete iz drugih važnih izvora) i vraća moguće ranjivosti

Baze podataka koje koristi su:

  1. Scipvuldb.csv | http://www.scip.ch/en/?vuldb
  2. Cve.csv | http://cve.mitre.org
  3. Osvdb.csv | http://www.osvdb.org
  4. Securityfocus.csv | http://www.securityfocus.com/bid/
  5. Securitytracker.csv | http://www.securitytracker.com
  6. Xforce.csv | http://xforce.iss.net
  7. Exploitdb.csv | http://www.exploit-db.com
  8. Openvas.csv | http://www.openvas.org

Za preuzimanje i instalaciju u Nmap direktorijum:

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/

Takođe treba da preuzmete DB pakete i dodate ih u /usr/share/nmap/scripts/vulscan/

Upotreba:

Da biste koristili sve: sudo nmap -sV –script=vulscan HOST_TO_SCAN

Da biste koristili određenu DB: sudo nmap -sV –script=vulscan –script-args vulscandb=cve.csv HOST_TO_SCAN

Ako imate pristup Internetu, zvanična Nmap vulners NSE skripta je obično najbrže održavana alternativa za obogaćivanje zasnovano na verzijama:

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.

Nedavne praktične napomene (7.94+)

  • Since Nmap 7.94, UDP port scan (-sU) and version detection (-sV) use the same nmap-service-probes payload source. A UDP response from the scan phase can immediately feed version matching, so -sU -sV --version-light is now a good first pass against large or lossy ranges.
  • Since Nmap 7.94, -sV can also probe UDP services hidden behind DTLS, which is useful for modern management/ICS gear that wraps UDP protocols in DTLS.
  • Nmap 7.95 added a large batch of new service fingerprints, including grpc, mysqlx, remotemouse, and tuya, plus new ICS-focused NSE coverage such as hartip-info and iec61850-mms. If you are scanning OT or embedded estates, updating Nmap matters more than adding custom probes too early.
  • Since Nmap 7.96, forward DNS lookups are parallelized too. Large hostname lists are much faster now, so --system-dns should usually be reserved for compatibility issues instead of performance.

Ubrzajte Nmap service scan 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.

Izgradite statički Nmap za ograničena okruženja

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.

Visok nivo pristupa

  • 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.

Discover target architecture (example)

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'

Korak 1 — Pripremite alatni lanac

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

Korak 2 — Izgraditi statički OpenSSL (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

Korak 3 — Kompajliranje statičkog PCRE2 (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

Korak 4 — Kompajliranje statičkog Nmap-a (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

Ključne tačke

  • -static, -static-libstdc++, -static-libgcc prisiljavaju statičko linkovanje.
  • Korišćenje –with-libpcap=included/–with-libdnet=included izbegava sistemske deljene biblioteke.
  • sed podešavanje neutralizuje ciljni deljeni libpcap ako postoji.

Korak 5 — Pakovanje binarnog fajla i NSE podataka

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

Napomene za verifikaciju i operacije

  • Koristite file na artefaktu da potvrdite da je statički linkovan.
  • Sačuvajte NSE podatke uz binarni fajl da obezbedite paritet skripti na hostovima bez instaliranog Nmap-a.
  • Čak i sa statičkim binarnim fajlom, izvršavanje može biti blokirano od strane AppArmor/seccomp/SELinux; DNS/egress i dalje mora funkcionisati.
  • Determinističke izgradnje smanjuju rizik u lancu snabdevanja u odnosu na preuzimanje neprozirnih “static” binarnih fajlova.

Jednolinijski (Dockerized)

Sastavi, spakuj i ispiši informacije o artefaktu ```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-dev

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

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>

## Reference

- [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]
> Nauči i vežbaj 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;">\
> Nauči i vežbaj 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;">\
> Nauči i vežbaj 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;">
> Pregledaj [**kompletan HackTricks Training katalog**](https://hacktricks-training.com/courses/) za assessment tracks (**ARTA/GRTA/AzRTA**) i [**Linux Hacking Expert (LHE)**](https://hacktricks-training.com/courses/lhe/).
>
> <details>
>
> <summary>Podrži HackTricks</summary>
>
> - Pogledaj [**pretplatničke planove**](https://github.com/sponsors/carlospolop)!
> - **Pridruži se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f), [**telegram grupi**](https://t.me/peass), **prati** [**@hacktricks_live**](https://twitter.com/hacktricks_live) na **X/Twitter**, ili pogledaj [**LinkedIn stranicu**](https://www.linkedin.com/company/hacktricks/) i [**YouTube kanal**](https://www.youtube.com/@hacktricks_LIVE).
> - **Deli hacking trikove slanjem PR-ova u** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
>
> </details>