Nmap Podsumowanie (ESP)
Tip
Ucz się i ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Przeglądaj pełny katalog HackTricks Training dla ścieżek assessment (ARTA/GRTA/AzRTA) oraz Linux Hacking Expert (LHE).
Wsparcie HackTricks
- Sprawdź plany subskrypcji!
- Dołącz do 💬 grupy Discord, grupy telegram, obserwuj @hacktricks_live na X/Twitter, albo sprawdź stronę LinkedIn i kanał YouTube.
- Dziel się hacking tricks, wysyłając PR do repozytoriów github HackTricks i HackTricks Cloud.
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
Parametry
Adresy IP do skanowania
<ip>,<net/mask>: Wskaż adresy IP bezpośrednio-iL <ips_file>: list_IPs-iR <number>: Liczba losowych IP, możesz wykluczyć możliwe IP za pomocą--exclude <Ips>lub--excludefile <file>.
Wykrywanie urządzeń
Domyślnie Nmap uruchamia fazę wykrywania składającą się z: -PA80 -PS443 -PE -PP
-sL: Nieinwazyjne, wypisuje cele wykonując zapytania DNS w celu rozwiązywania nazw. Przydatne, by wiedzieć, czy np. www.prueba.es/24 wszystkie IP są naszymi celami.-Pn: Brak pingów. Przydatne gdy wiesz, że wszystkie są aktywne (w przeciwnym razie możesz stracić dużo czasu, ale ta opcja może także dawać fałszywie negatywne wyniki twierdząc, że nie są aktywne), zapobiega fazie wykrywania.-sn: Brak skanowania portów. Po zakończeniu fazy rozpoznania nie skanuje portów. Relatywnie skryte, pozwala na szybkie skanowanie małej sieci. Z uprawnieniami wysyła ACK (-PA) na 80, SYN(-PS) na 443 oraz echo request i Timestamp request; bez uprawnień zawsze kończy połączenia. Jeśli celem jest sieć, używa tylko ARP(-PR). Jeśli użyte z inną opcją, pakiety innej opcji są pomijane.-PR: Ping ARP. Używane domyślnie przy analizie komputerów w naszej sieci, szybsze niż używanie pingów. Jeśli nie chcesz używać pakietów ARP, użyj--send-ip.-PS <ports>: Wysyła pakiety SYN; jeśli odpowie SYN/ACK to port jest otwarty (odpowiada się RST, aby nie zakończyć połączenia), jeśli odpowie RST to jest zamknięty, a jeśli nie odpowie to jest niedostępny. W przypadku braku uprawnień używane jest automatycznie pełne połączenie. Jeśli nie podano portów, używa 80.-PA <ports>: Jak wyżej, ale z ACK; łączenie obu daje lepsze wyniki.-PU <ports>: Cel jest odwrotny — wysyła się do portów, które spodziewane są zamknięte. Niektóre firewalle sprawdzają tylko połączenia TCP. Jeśli jest zamknięty, odpowiada port unreachable; jeśli odpowie innym ICMP lub nie odpowie, traktowany jest jako destination unreachable.-PE, -PP, -PM: ICMP PINGI: echo reply, timestamp i addresmask. Wysyłane aby sprawdzić, czy cel jest aktywny.-PY<ports>: Wysyła SCTP INIT (domyślnie do 80), może odpowiedzieć INIT-ACK (open) lub ABORT (closed) albo nic/ICMP unreachable (inactive).-PO <protocols>: Wskazuje protokół w nagłówkach, domyślnie 1(ICMP), 2(IGMP) i 4(Encap IP). Dla protokołów ICMP, IGMP, TCP (6) i UDP (17) wysyłane są nagłówki protokołów, dla reszty tylko nagłówek IP. Cel jest taki, że w wyniku sfałszowania nagłówków otrzymuje się Protocol unreachable lub odpowiedzi tego samego protokołu, co pozwala ustalić, czy host jest aktywny.-n: Brak DNS-R: Zawsze DNS--system-dns: Wymusza użycie resolvera systemowego zamiast równoległego stub resolvera Nmapa. Przydatne gdy/etc/hosts, split-DNS lub wtyczki resolvera zwracają dane, których bezpośrednie zapytania Nmapa nie dają. Wolniejsze; od Nmap 7.96 forward lookups są już zrównoleglone, więc zwykle potrzebne tylko dla kompatybilności resolvera.--dns-servers <server[,server],...>: Wymusza konkretne serwery DNS dla reverse lookups. Przydatne w testach wewnętrznych do bezpośredniego zapytania serwerów autorytatywnych lub wewnętrznych resolverów, albo aby przekierować ruch-sL/reverse-DNS z domyślnych resolverów testera.
Techniki skanowania portów
-sS: Nie kończy połączenia, więc nie zostawia śladu — bardzo dobre jeśli można go użyć (wymaga uprawnień). Używane domyślnie.-sT: Kończy połączenie, więc zostawia ślad, ale można go zawsze użyć. Domyślnie bez uprawnień.-sU: Wolniejsze, dla UDP. Głównie: DNS(53), SNMP(161,162), DHCP(67 i 68) — (-sU53,161,162,67,68): open(reply), closed(port unreachable), filtered (inne ICMP), open/filtered (brak odpowiedzi). W przypadku open/filtered, -sV wysyła wiele zapytań aby wykryć wersję obsługiwaną przez nmap i może wykryć rzeczywisty stan. Zwiększa znacząco czas.-sY: SCTP — nie udaje się ustanowić połączenia, więc brak logów; działa jak -PY-sN,-sX,-sF: Null, Fin, Xmas — potrafią ominąć niektóre firewalle i wydobyć informacje. Bazują na tym, że zgodne maszyny powinny odpowiadać RST na żądania bez SYN/RST/ACK: open/filtered (brak odpowiedzi), closed (RST), filtered (ICMP unreachable). Niewiarygodne na Windows, Cisco, BSDI i OS/400. Na Unix działa.-sM: Maimon scan: Wysyła FIN i ACK, używane dla BSD, obecnie zwraca wszystko jako closed.-sA, sW: ACK i Window, używane do wykrywania firewalli, by wiedzieć czy porty są filtrowane. -sW rozróżnia open/closed ponieważ otwarte odpowiadają inną wartością window: open (RST z window ≠ 0), closed (RST window = 0), filtered (ICMP unreachable lub brak odpowiedzi). Nie wszystkie maszyny działają tak samo; jeśli wszystko jest closed, metoda nie działa; jeśli kilka otwartych, działa poprawnie; jeśli dużo otwartych i kilka closed, działa odwrotnie.-sI: Idle scan. Gdy istnieje aktywny firewall, ale wiemy, że nie filtruje do pewnego IP (lub gdy chcemy anonimowości), używamy zombie scanner (działa dla wszystkich portów). Aby znaleźć możliwe zombie można użyć skryptu ipidseq lub exploit auxiliary/scanner/ip/ipidseq. Ten skaner bazuje na numerze IPID pakietów IP.--badsum: Wysyła błędną sumę kontrolną; komputery odrzuciłyby pakiety, ale firewalle mogą odpowiedzieć czymś — używane do wykrywania firewalli.-sZ: “Weird” SCTP scanner — przy wysyłaniu probe’ów z cookie echo fragments powinny być odrzucone jeśli open albo odpowiadać ABORT jeśli closed. Może przechodzić przez firewalle, których init nie przechodzi; wadą jest brak rozróżnienia między filtered a open.-sO: Skan protokołów IP. Wysyła złe i puste nagłówki, w których czasem nie można rozpoznać nawet protokołu. Jeśli przychodzi ICMP protocol unreachable — jest closed; jeśli przychodzi unreachable port — open; jeśli inny błąd — filtered; jeśli nic nie przychodzi — open|filtered.-b <server>: FTPhost –> Używane do skanowania hosta z innego hosta poprzez połączenie z FTP innej maszyny i poproszenie jej o wysłanie plików na porty, które chcemy przeskanować z tamtej maszyny; zgodnie z odpowiedziami wiemy, czy są otwarte. [<user>:<password>@]<server>[:<port>] Prawie wszystkie serwery FTP już tego nie pozwalają, więc ma niewiele praktycznego zastosowania.
Skupiona analiza
-p: Używane do określenia portów do skanowania. Aby wybrać wszystkie 65,335 portów: -p- lub -p all. Nmap ma wewnętrzną klasyfikację opartą na popularności. Domyślnie używa top 1000 portów. Z -F (fast scan) analizuje top 100. Z –top-ports
-sV Skanowanie wersji; intensywność można regulować od 0 do 9, domyślnie 7.
–version-intensity
–version-light Alias --version-intensity 2. Bardzo przydatne na pierwsze przejście przeciw dużym zakresom lub wolnym usługom UDP.
–version-all Alias --version-intensity 9. Wymusza wszystkie probe’y; przydatne gdy usługa odpowiada tylko na rzadkie probe’y.
–allports Wymusza wykrywanie wersji na portach wyłączonych przez nmap-service-probes (np. TCP/9100). Uwaga: na niektórych drukarkach lub nasłuchujących raw socket może to spowodować wydrukowanie danych probe’a.
-O Wykrywanie OS
–osscan-limit Do poprawnego zgadywania hosta potrzebny jest przynajmniej jeden otwarty i jeden zamknięty port. Jeśli ten warunek nie jest spełniony i ustawiliśmy tę opcję, nie będzie próbować przewidywania OS (oszczędza czas)
–osscan-guess Gdy wykrywanie OS nie jest perfekcyjne, to zmusza do dokładniejszych prób
Skrypty
–script
Aby użyć domyślnych skryptów, użyj -sC lub –script=default
Dostępne typy: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, oraz vuln
- Auth: uruchamia wszystkie dostępne skrypty uwierzytelniające
- Default: uruchamia podstawowe domyślne skrypty narzędzia
- Discovery: pobiera informacje z celu lub ofiary
- External: skrypt korzystający z zasobów zewnętrznych
- Intrusive: używa skryptów uznawanych za inwazyjne dla celu/ofiary
- Malware: sprawdza połączenia otwarte przez złośliwe oprogramowanie lub backdoory
- Safe: uruchamia nieinwazyjne skrypty
- Vuln: odkrywa najbardziej znane podatności
- All: uruchamia absolutnie wszystkie dostępne skrypty NSE
Aby wyszukać skrypty:
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
–script-trace —> Dostarcza informacji o postępie działania skryptu
–script-updatedb
Aby użyć skryptu, po prostu wpisz: nmap –script Script_Name target –> Przy użyciu skryptu zarówno skrypt, jak i skaner zostaną uruchomione, więc można dodać również opcje skanera. Możemy dodać “safe=1” aby uruchomić tylko bezpieczne.
Kontrola czasu
Nmap może przyjmować czas w sekundach, minutach, ms: –host-timeout argumenty 900000ms, 900, 900s, i 15m robią to samo.
Nmap dzieli całkowitą liczbę hostów do przeskanowania na grupy i analizuje te grupy blokami, więc nie przechodzi do następnego bloku, dopóki wszystkie w bieżącym nie będą przeanalizowane (i użytkownik nie otrzymuje aktualizacji dopóki blok nie zostanie przetworzony). Dzięki temu efektywniejsze jest używanie dużych grup. Domyślnie w klasie C używa 256.
Można to zmienić za pomocą –min-hostgroup
Możesz kontrolować liczbę równoległych skanerów, ale lepiej tego nie robić (Nmap ma automatyczną kontrolę na podstawie stanu sieci): –min-parallelism
Możemy modyfikować timeout RTT, ale zwykle nie jest to konieczne: –min-rtt-timeout , –max-rtt-timeout , –initial-rtt-timeout
Możemy modyfikować liczbę prób: –max-retries
Możemy modyfikować czas skanowania hosta: –host-timeout
Możemy modyfikować opóźnienie między testami, aby spowolnić: –scan-delay ; –max-scan-delay
Możemy modyfikować liczbę pakietów na sekundę: –min-rate
Wiele portów długo odpowiada gdy są filtrowane lub zamknięte. Jeśli interesują nas tylko otwarte, możemy przyspieszyć: –defeat-rst-ratelimit
Aby zdefiniować jak agresywny ma być Nmap: -T paranoid|sneaky|polite|normal|aggressive|insane
-T (0-1)
-T0 –> Skanuje tylko 1 port na raz i czeka 5 minut do następnego
-T1 i T2 –> Bardzo podobne, ale czekają kolejno 15s i 0.4s między testami
-T3 –> Tryb domyślny, zawiera równoległe skanowanie
-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
Nie pozwalają na dostęp do portów i analizują pakiety.
-f Fragmentuje pakiety, domyślnie dzieli je na 8 bajtów po nagłówku; aby określić rozmiar użyj ..mtu (z tym nie używaj -f), offset musi być wielokrotnością 8. Version scanners and scripts don’t support fragmentation
-D decoy1,decoy2,ME Nmap wysyła skanery z innymi adresami IP jako źródło, w ten sposób cię ukrywa. Jeśli umieścisz ME na liście, Nmap umieści ciebie tam; lepiej dać 5–6 przed tobą, aby całkowicie się zamaskować. Losowe IP można generować z RND:
Aby użyć losowych IP: nmap -D RND:10 Target_IP
-S IP Gdy Nmap nie rozpoznaje twojego IP, trzeba je podać. Służy też do zmylenia, że inny target cię skanuje.
-e
Wielu administratorów zostawia pewne porty wejściowe otwarte dla poprawnego działania usług — łatwiej niż szukać innego rozwiązania. Mogą to być porty DNS lub FTP… aby znaleźć tę podatność Nmap ma: –source-port
–data
–data-string
–data-length
Aby skonfigurować całkowicie pakiet IP użyj –ip-options
Jeśli chcesz zobaczyć opcje w pakietach wysyłanych i odbieranych, określ –packet-trace. Dla więcej informacji i przykładów użycia IP options z Nmap zobacz http://seclists.org/nmap-dev/2006/q3/52.
–ttl
–randomize-hosts Aby uczynić atak mniej oczywistym
–spoof-mac <MAC address, prefix, or vendor name> Aby zmienić MAC przykłady: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, oraz Cisco
–proxies
-sP Aby odkryć hosty w naszej sieci przez ARP
Wielu administratorów tworzy regułę firewalla pozwalającą na przepuszczanie wszystkich pakietów pochodzących z określonego portu (np. 20,53,67); możemy powiedzieć Nmapowi, aby wysyłał pakiety z tych portów: nmap –source-port 53 IP
Wyjścia
-oN file Normalne wyjście
-oX file Wyjście XML
-oS file Script kiddies output
-oG file Greppable output. Dalej działa, ale jest przestarzałe; XML jest lepszy do automatyzacji, bo nowe funkcje Nmap trafiają tam najpierw. Wciąż używaj -oN jeśli chcesz --resume, i preferuj -oX/-oA do parsowania maszynowego.
-oA file Wszystkie oprócz -oS
–webxml Zmienia odwołanie stylesheet w XML na https://nmap.org/svn/docs/nmap.xsl, ułatwiając otwieranie XML jako HTML na innym komputerze.
–stylesheet <path|url> Użyj własnego XSL stylesheet. --webxml to tylko skrót do hostowanej oficjalnej stylesheet.
-v level szczegółowość (verbosity)
-d level debugowanie
–reason Powód stanu hosta i portu
–stats-every time Co dany czas informuje o postępie
–packet-trace Aby zobaczyć jakie pakiety wychodzą; można określić filtry, np. –version-trace lub –script-trace
–open pokazuje open, open|filtered i unfiltered
–resume file Wznawia przerwany skan z normalnego (-oN) lub grepable (-oG) pliku wyjściowego. W obecnych workflowach powszechne jest trzymanie -oN dla wznowienia i -oX dla parsowania.
Przykład do workflowów parsowania/konwersji HTML:
# 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
Różne
-6 Włącza obsługę IPv6
-A jest równoważne z -O -sV -sC –traceroute
Czas działania
Podczas działania Nmap możemy zmieniać opcje:
v / V Zwiększ / zmniejsz poziom szczegółowości
d / D Zwiększ / zmniejsz poziom debugowania
p / P Włącz / wyłącz śledzenie pakietów
? Wyświetl ekran pomocy interakcji w czasie działania
Vulscan
Skrypt Nmap, który analizuje wersje usług uzyskane w bazie offline (pobranej z innych, bardzo ważnych źródeł) i zwraca możliwe podatności
Używane bazy danych to:
- 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
Aby pobrać i zainstalować w katalogu 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/
Musisz również pobrać pakiety bazy danych i dodać je do /usr/share/nmap/scripts/vulscan/
Użycie:
Aby użyć wszystkich: sudo nmap -sV –script=vulscan HOST_TO_SCAN
Aby użyć konkretnej bazy: sudo nmap -sV –script=vulscan –script-args vulscandb=cve.csv HOST_TO_SCAN
Jeśli masz dostęp do Internetu, oficjalny skrypt NSE Nmap vulners jest zwykle najszybszą, utrzymywaną alternatywą dla wzbogacania na podstawie wersji:
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.
Recent Practical Notes (7.94+)
- Since Nmap 7.94, UDP port scan (
-sU) and version detection (-sV) use the samenmap-service-probespayload source. A UDP response from the scan phase can immediately feed version matching, so-sU -sV --version-lightis now a good first pass against large or lossy ranges. - Since Nmap 7.94,
-sVcan 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, andtuya, plus new ICS-focused NSE coverage such ashartip-infoandiec61850-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-dnsshould usually be reserved for compatibility issues instead of performance.
Speed Up 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.
Build a static Nmap for restricted environments
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.
High-level approach
- 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'
Krok 1 — Przygotuj toolchain
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
Krok 2 — Zbuduj statyczne 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
Krok 3 — Zbuduj statyczną wersję 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
Krok 4 — Zbuduj statyczny Nmap (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
Kluczowe punkty
- -static, -static-libstdc++, -static-libgcc wymuszają statyczne linkowanie.
- Użycie –with-libpcap=included/–with-libdnet=included zapobiega korzystaniu ze współdzielonych bibliotek systemowych.
- Modyfikacja sed unieszkodliwia docelową współdzieloną bibliotekę libpcap, jeśli występuje.
Krok 5 — Zapakuj binarkę i dane 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
Notatki weryfikacyjne i operacyjne
- Użyj polecenia file na artefakcie, aby potwierdzić, że jest statycznie linkowany.
- Dołączaj dane NSE razem z binarką, aby zapewnić zgodność skryptów na hostach bez zainstalowanego Nmap.
- Nawet w przypadku statycznej binarki, wykonanie może zostać zablokowane przez AppArmor/seccomp/SELinux; DNS i ruch wychodzący muszą nadal działać.
- Deterministyczne kompilacje zmniejszają ryzyko w łańcuchu dostaw w porównaniu z pobieraniem nieprzejrzystych “static” binarek.
Jednolinijka (Dockerized)
Zbuduj, spakuj i wyświetl informacje o artefakcie
```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ódła
- [Kompilowanie statycznego binarnego pliku Nmap do pracy w ograniczonych środowiskach](https://www.pentestpartners.com/security-blog/compiling-static-nmap-binary-for-jobs-in-restricted-environments/)
- [Static Nmap Binary Generator (narzędzie pomocnicze)](https://github.com/0x5ubt13/static_nmap_binary_generator)
- [Źródła OpenSSL](https://www.openssl.org/source/)
- [Wydania PCRE2](https://github.com/PCRE2Project/pcre2/releases)
- [Archiwa źródłowe Nmap](https://nmap.org/dist/)
- [Dziennik zmian Nmap](https://nmap.org/changelog.html)
- [Formaty wyjściowe Nmap](https://nmap.org/book/man-output.html)
> [!TIP]
> Ucz się i ćwicz 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;">\
> Ucz się i ćwicz 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;">\
> Ucz się i ćwicz 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;">
> Przeglądaj [**pełny katalog HackTricks Training**](https://hacktricks-training.com/courses/) dla ścieżek assessment (**ARTA/GRTA/AzRTA**) oraz [**Linux Hacking Expert (LHE)**](https://hacktricks-training.com/courses/lhe/).
>
> <details>
>
> <summary>Wsparcie HackTricks</summary>
>
> - Sprawdź [**plany subskrypcji**](https://github.com/sponsors/carlospolop)!
> - **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f), [**grupy telegram**](https://t.me/peass), **obserwuj** [**@hacktricks_live**](https://twitter.com/hacktricks_live) na **X/Twitter**, albo sprawdź [**stronę LinkedIn**](https://www.linkedin.com/company/hacktricks/) i [**kanał YouTube**](https://www.youtube.com/@hacktricks_LIVE).
> - **Dziel się hacking tricks, wysyłając PR do** repozytoriów github [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
>
> </details>


