Nmap Підсумок (ESP)
Tip
Вчіться та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вчіться та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вчіться та практикуйте Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Перегляньте повний каталог HackTricks Training для assessment tracks (ARTA/GRTA/AzRTA) і Linux Hacking Expert (LHE).
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 Discord group, telegram group, слідкуйте за @hacktricks_live на X/Twitter, або перегляньте сторінку LinkedIn і YouTube channel.
- Діліться hacking tricks, надсилаючи PRs до репозиторіїв github HackTricks і HackTricks Cloud.
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
Параметри
IP-адреси для сканування
<ip>,<net/mask>: Вказати IP-адреси безпосередньо-iL <ips_file>: список IP-адрес-iR <number>: Кількість випадкових IP-адрес, можна виключити певні IP за допомогою--exclude <Ips>або--excludefile <file>.
Виявлення обладнання
За замовчуванням Nmap запускає фазу виявлення, що складається з: -PA80 -PS443 -PE -PP
-sL: Неінвазивний режим, перелічує цілі, виконуючи DNS-запити для розв’язування імен. Корисно, щоб дізнатися, чи, наприклад, для www.prueba.es/24 усі IP-адреси є нашими цілями.-Pn: No ping. Корисно, якщо ви знаєте, що всі хости активні (інакше можна втратити багато часу; ця опція також дає хибні негативи, позначаючи хости неактивними). Вимикає фазу виявлення.-sn: No port scan. Після завершення фази розвідки порти не скануються. Відносно прихований режим, підходить для невеликих мереж. З привілеями відправляє ACK (-PA) на 80, SYN (-PS) на 443 та echo request і Timestamp request; без привілеїв встановлює повні з’єднання. Якщо ціллю є мережа, використовує тільки ARP (-PR). Якщо використовується разом з іншою опцією, відправляються лише пакети іншої опції.-PR: Ping ARP. Використовується за замовчуванням при аналізі хостів у нашій мережі, швидший за звичайні ping. Якщо не хочете використовувати ARP-пакети, вкажіть--send-ip.-PS <ports>: Відправляє SYN-пакети: при відповіді SYN/ACK — порт відкритий (відповідає RST, щоб не завершувати з’єднання), при відповіді RST — закритий, при відсутності відповіді — недоступний. Якщо немає привілеїв, автоматично встановлюється повне з’єднання. Якщо порти не вказані, використовується порт 80.-PA <ports>: Як попередній, але з ACK; комбінування обох дає кращі результати.-PU <ports>: Мета — протилежна; відправляється на порти, які очікуються як закриті. Деякі фаєрволи перевіряють лише TCP-з’єднання. Якщо порт закритий — відповідає port unreachable; інша ICMP-помилка або відсутність відповіді трактуються як destination unreachable.-PE, -PP, -PM: ICMP PING-и: echo reply, timestamp та address-mask. Виконуються для визначення, чи активний хост.-PY<ports>: Відправляє SCTP INIT-проби (за замовчуванням на 80); можливі відповіді: INIT-ACK (open), ABORT (closed), нічого або ICMP unreachable (inactive).-PO <protocols>: Вказується протокол у заголовках, за замовчуванням 1 (ICMP), 2 (IGMP) і 4 (Encap IP). Для ICMP, IGMP, TCP (6) і UDP (17) відправляються заголовки протоколу; для інших — лише IP-заголовок. Ідея в тому, що через некоректні заголовки можуть надійти відповіді Protocol unreachable або відповіді того ж протоколу, що дозволяє визначити, чи хост up.-n: Вимкнути DNS-R: Завжди виконувати DNS--system-dns: Примусово використовувати системний резольвер ОС замість паралельного stub-резольвера Nmap. Корисно, коли/etc/hosts, split-DNS або плагіни резольвера повертають дані, які прямі запити Nmap не бачать. Працює повільніше; з версії Nmap 7.96 форвардні запити вже паралелізовані, тому ця опція зазвичай потрібна лише для сумісності резольвера.--dns-servers <server[,server],...>: Примусово використовувати конкретні DNS-сервери для зворотних пошуків. Корисно при внутрішніх оцінках, щоб звертатися напряму до авторитетних чи внутрішніх резольверів або відсапати-sL/reverse-DNS трафік від дефолтних резольверів тестувальника.
Техніки сканування портів
-sS: Не завершує з’єднання, тому залишає менше слідів; дуже корисно, якщо доступні привілеї. Це режим за замовчуванням.-sT: Завершує з’єднання, отже залишає сліди, але може бути використаний без привілеїв.-sU: Повільніший, для UDP. Типові служби: DNS(53), SNMP(161,162), DHCP(67,68). (-sU53,161,162,67,68): open (відповідь), closed (port unreachable), filtered (інша ICMP), open/filtered (відсутність відповіді). У випадку open/filtered-sVнадсилає багато запитів для виявлення версії; це сильно збільшує час.-sY: SCTP — не встановлює з’єднання у журналях, працює подібно до-PY.-sN,-sX,-sF: Null, Fin, Xmas — можуть обійти деякі фаєрволи та витягти інформацію. Засновані на тому, що стандарти сумісні ОС повинні відповідати RST на пакети без встановлених SYN, RST або ACK: open/filtered (відсутність відповіді), closed (RST), filtered (ICMP unreachable). Ненадійні на Windows, Cisco, BSDI та OS/400; на Unix зазвичай працюють.-sM: Maimon scan: відправляє FIN + ACK, використовувався для BSD; наразі зазвичай повертає все як closed.-sA, sW: ACK і Window; використовуються для виявлення фаєрволів, щоб визначити, чи порти фільтруються.-sWвідрізняє open/closed за значенням window: open (RST з window ≠ 0), closed (RST з window = 0), filtered (ICMP unreachable або відсутність відповіді). Не на всіх системах працює однаково; якщо всі порти показують closed — метод не працює, якщо кілька — працює добре, якщо багато open і мало closed — поведінка інша.-sI: Idle scan. Коли є активний фаєрвол, але відомо, що він не фільтрує трафік до певного IP (або для анонімності), можна використовувати zombie-сканер (працює для всіх портів). Щоб знайти можливих zombies, можна використати скрипт ipidseq або модуль exploit auxiliary/scanner/ip/ipidseq. Сканер базується на полі IPID у IP-пакетах.--badsum: Надсилає некоректну контрольну суму — кінцеві системи відкинуть пакети, але фаєрволи можуть відповісти; використовується для виявлення фаєрволів.-sZ: “Weird” SCTP scanner; при відправленні проб із cookie echo fragments вони повинні бути відкинуті якщо порт відкритий або відповідати ABORT якщо закритий. Може проходити через фаєрволи, через якіinitне проходить; недолік — не відрізняє filtered від open.-sO: Сканування IP-протоколів. Відправляє некоректні або порожні заголовки, де іноді навіть протокол не можна розпізнати. Якщо надходить ICMP protocol unreachable — протокол закритий; якщо ICMP port unreachable — відкритий; інша помилка — filtered; відсутність відповіді — open|filtered.-b <server>: FTPhost –> Використовується для сканування хоста через інший хост: підключитись до FTP іншої машини й попросити її надіслати файли на порти, які ви хочете просканувати з боку тієї машини; за відповідями можна визначити, чи відкриті порти. Синтаксис: [<user>:<password>@]<server>[:<port>]. Більшість FTP-серверів вже це забороняють, тому практичне застосування обмежене.
Фокус аналізу
-p: Використовується для вказівки портів для сканування. Щоб обрати всі 65,535 портів: -p- або -p all. Nmap має внутрішню класифікацію популярності портів. За замовчуванням використовується top 1000 портів. З -F (fast scan) аналізує топ-100. З –top-ports
-sV Сканування версій; інтенсивність можна регулювати від 0 до 9, за замовчуванням 7.
–version-intensity
–version-light Синонім --version-intensity 2. Дуже корисно для першого проходу по великих діапазонах або повільних UDP-сервісах.
–version-all Синонім --version-intensity 9. Примусово відправляє всі проби; корисно, коли служба відповідає лише на рідкісні запити.
–allports Примушує визначення версії на портах, виключених nmap-service-probes (наприклад TCP/9100). Увага: на деяких принтерах або сервісах, що слухають raw-сокет, це може призвести до виведення ними даних з проби.
-O Визначення OS
–osscan-limit Для коректного визначення OS потрібен принаймні один відкритий і один закритий порт. Якщо цієї умови немає і увімкнено цю опцію, спроба визначення OS не виконується (зберігає час).
–osscan-guess Коли визначення OS не ідеальне, ця опція примушує спробувати глибше вгадувати.
Скрипти
–script
Для використання стандартних скриптів використайте -sC або –script=default
Доступні типи: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version і vuln
- Auth: виконує всі доступні скрипти аутентифікації
- Default: виконує базові стандартні скрипти
- Discovery: отримує інформацію з цілі або жертви
- External: скрипти для використання зовнішніх ресурсів
- Intrusive: використовує скрипти, які вважаються інвазивними для цілі
- Malware: перевіряє підключення, відкриті шкідливим кодом або бекдорами
- Safe: виконує неінвазивні скрипти
- Vuln: виявляє відомі вразливості
- All: виконує абсолютно всі доступні NSE-скрипти
Для пошуку скриптів:
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 —> Надає інформацію про прогрес виконання скрипту
–script-updatedb
Щоб використати скрипт, просто введіть: nmap –script Script_Name target –> При використанні скрипту виконаються і сам скрипт, і сканер, тому можна додавати і опції сканера. Можна додати “safe=1” щоб виконати лише безпечні скрипти.
Контроль часу
Nmap може приймати час у секундах, хвилинах, ms: –host-timeout аргументи 900000ms, 900, 900s, і 15m — все те саме.
Nmap ділить загальну кількість хостів для сканування на групи і аналізує ці групи блоками, тому він не переходить до наступного блоку, поки всі в поточному не будуть проаналізовані (і користувач не отримує оновлень до завершення блоку). Завдяки цьому ефективніше використовувати великі групи. За замовчуванням для класу C використовується 256.
Це можна змінити за допомогою –min-hostgroup
Можна контролювати кількість паралельних сканерів, але краще цього не робити (Nmap уже має автоматичне керування залежно від стану мережі): –min-parallelism
Можна змінити RTT timeout, але зазвичай це не потрібно: –min-rtt-timeout , –max-rtt-timeout , –initial-rtt-timeout
Можна змінити кількість повторів: –max-retries
Можна змінити час сканування одного хоста: –host-timeout
Можна змінити затримку між тестами, щоб уповільнити скан: –scan-delay ; –max-scan-delay
Можна змінити кількість пакетів за секунду: –min-rate
Багато портів довго відповідають, коли вони filtered або closed. Якщо цікавлять лише відкриті, можна пришвидшити з: –defeat-rst-ratelimit
Щоб задати агресивність Nmap: -T paranoid|sneaky|polite|normal|aggressive|insane
-T (0-1)
-T0 –> Сканує лише по 1 порту за раз і чекає 5 хв до наступного
-T1 і T2 –> Дуже схожі, але чекають 15 с і 0.4 с відповідно між тестами
-T3 –> Робота за замовчуванням, включає паралельне сканування
-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
Вони не дозволяють доступ до портів і аналізують пакети.
-f Щоб фрагментувати пакети; за замовчуванням фрагментує на 8 байт після заголовка, щоб задати інший розмір використовують ..mtu (у цьому випадку не використовуйте -f); зміщення має бути кратним 8. Version scanners and scripts don’t support fragmentation
-D decoy1,decoy2,ME Nmap відправляє сканування з підроблених IP-адрес, щоб приховати ваш. Якщо додати ME в список, Nmap поставить вас туди; краще помістити 5–6 адрес перед вашим, щоб повністю заплутати. Рандомні IP можна згенерувати RND:
Щоб використати випадкові IP: nmap -D RND:10 Target_IP
-S IP Коли Nmap не бачить ваш IP, вкажіть його цим параметром. Також служить для того, щоб змусити думати, ніби інший хост сканує.
-e
Багато адміністраторів залишають деякі порти відкритими для забезпечення роботи (наприклад, DNS або FTP). Щоб знайти цю вразливість, Nmap має: –source-port
–data
–data-string
–data-length
Щоб повністю налаштувати IP-пакет, використовуйте –ip-options
Якщо бажаєте бачити опції в пакетах, що відправляються і отримуються, вкажіть –packet-trace. Для додаткової інформації та прикладів використання IP-опцій з Nmap див. http://seclists.org/nmap-dev/2006/q3/52.
–ttl
–randomize-hosts Щоб зробити атаку менш очевидною
–spoof-mac <MAC address, prefix, or vendor name> Змінити MAC, приклади: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, Cisco
–proxies
-sP Виявлення хостів у нашій мережі через ARP
Багато адміністраторів створюють правило фаєрволу, що дозволяє весь трафік з певного порту (наприклад 20,53,67). Можна попросити Nmap надсилати пакети з цих портів: nmap –source-port 53 IP
Вивід
-oN file Звичайний вивід
-oX file XML-вивід
-oS file Script kiddies output
-oG file Greppable output. Працює, але застаріває; XML — кращий формат для автоматизації, оскільки нові можливості Nmap спочатку додаються туди. Продовжуйте використовувати -oN, якщо хочете --resume, і віддавайте перевагу -oX/-oA для машинного парсингу.
-oA file Усі формати, окрім -oS
–webxml Змінює посилання на XSL-таблицю в XML на https://nmap.org/svn/docs/nmap.xsl, що полегшує відкриття XML як HTML на іншій машині.
–stylesheet <path|url> Використовувати власну XSL-таблицю. --webxml — це просто ярлик для офіційної хостованої таблиці.
-v level Рівень verbosity
-d level Рівень debugging
–reason Показує причину стану хоста
–stats-every time Через кожний вказаний інтервал виводить статус прогресу
–packet-trace Побачити які пакети відправляються; можна вказувати фільтри, наприклад: –version-trace або –script-trace
–open Показує лише open, open|filtered і unfiltered
–resume file Поновлює перерваний скан з нормального (-oN) або grepable (-oG) файлу виводу. У сучасних робочих процесах зазвичай зберігають -oN для можливості resume і -oX для парсингу.
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
Різне
-6 Дозволяє IPv6
-A еквівалентно -O -sV -sC –traceroute
Під час виконання
Під час роботи Nmap можна змінювати опції:
v / V Збільшити / зменшити рівень докладності
d / D Збільшити / зменшити рівень налагодження
p / P Увімкнути / вимкнути трасування пакетів
? Показати екран допомоги для взаємодії під час виконання
Vulscan
Nmap script, який аналізує версії сервісів, отримані з офлайн-бази даних (завантаженої з інших дуже важливих джерел), і повертає можливі vulnerabilities
The DBs it uses are:
- 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
To download and install in the Nmap folder:
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/
You would also need to download the DB packages and add them to /usr/share/nmap/scripts/vulscan/
Usage:
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.
Недавні практичні нотатки (7.94+)
- З початку Nmap 7.94, UDP port scan (
-sU) та визначення версії (-sV) використовують одне джерело payload —nmap-service-probes. Відповідь UDP під час фази сканування може одразу підживлювати підбір версій, тож-sU -sV --version-lightтепер є хорошим першим проходом проти великих або з втратою пакетів діапазонів. - З початку Nmap 7.94,
-sVтакож може опитувати UDP сервіси, приховані за DTLS, що корисно для сучасного management/ICS обладнання, яке упаковує UDP протоколи в DTLS. - Nmap 7.95 додав велику партію нових сигнатур сервісів, включно з
grpc,mysqlx,remotemouseтаtuya, а також нове ICS-орієнтоване покриття NSE, наприкладhartip-infoіiec61850-mms. Якщо ви скануєте OT або вбудовані пристрої, оновлення Nmap важливіше, ніж передчасне додавання кастомних probes. - З початку Nmap 7.96 прямі DNS-запити також виконуються паралельно. Великі списки hostname-ів тепер значно швидші, тож
--system-dnsзазвичай слід резервувати для проблем сумісності, а не для продуктивності.
Прискорення Nmap service scan у 16 разів
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.
Збірка статичного Nmap для обмежених середовищ
У загартованих або мінімальних Linux-середовищах (контейнери, appliances) динамічно зв’язані бінарники Nmap часто не запускаються через відсутні runtime loaders або shared libraries (наприклад, /lib64/ld-linux-x86-64.so.2, libc.so). Збірка власного statically linked Nmap і бандлінг даних NSE дозволяє виконувати його без встановлення системних пакетів.
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'
Крок 1 — Підготувати набір інструментів
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
Крок 2 — Скомпілювати статичний 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
Крок 3 — Збірка статичної 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
Крок 4 — Збірка статичного 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
Ключові моменти
- -static, -static-libstdc++, -static-libgcc змушують статичне лінкування.
- Використання –with-libpcap=included/–with-libdnet=included запобігає використанню системних спільних бібліотек.
- Налаштування sed нейтралізує спільну ціль libpcap, якщо вона присутня.
Крок 5 — Пакування бінарного файлу та даних 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
Примітки з перевірки та експлуатації
- Використайте file на артефакті, щоб підтвердити, що він статично зв’язаний.
- Зберігайте NSE-дані разом із бінарним файлом, щоб забезпечити паритет скриптів на хостах без встановленого Nmap.
- Навіть за наявності статичного бінарного файлу виконання може блокуватися AppArmor/seccomp/SELinux; DNS/egress має й надалі працювати.
- Детерміновані збірки зменшують ризик ланцюга постачання порівняно зі завантаженням непрозорих “static” binaries.
One-liner (Dockerized)
Зібрати, упакувати та вивести інформацію про артефакт
```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>
## Посилання
- [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]
> Вчіться та практикуйте 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;">\
> Вчіться та практикуйте 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;">\
> Вчіться та практикуйте 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;">
> Перегляньте [**повний каталог HackTricks Training**](https://hacktricks-training.com/courses/) для assessment tracks (**ARTA/GRTA/AzRTA**) і [**Linux Hacking Expert (LHE)**](https://hacktricks-training.com/courses/lhe/).
>
> <details>
>
> <summary>Підтримайте HackTricks</summary>
>
> - Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
> - **Приєднуйтесь до** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f), [**telegram group**](https://t.me/peass), **слідкуйте** за [**@hacktricks_live**](https://twitter.com/hacktricks_live) на **X/Twitter**, або перегляньте [**сторінку LinkedIn**](https://www.linkedin.com/company/hacktricks/) і [**YouTube channel**](https://www.youtube.com/@hacktricks_LIVE).
> - **Діліться hacking tricks, надсилаючи PRs до** репозиторіїв github [**HackTricks**](https://github.com/carlospolop/hacktricks) і [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
>
> </details>


