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
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 аналізує вказану кількість топ-портів (від 1 до 65,535). Порти перевіряються в випадковому порядку; щоб цього уникнути, використайте -r. Також можна вказати конкретні порти: 20-30,80,443,1024- (остання нотація означає від 1024 і далі). Можна групувати порти по протоколах: U:53,T:21-25,80,139,S:9. Можна також вибрати діапазон у межах популярних портів Nmap: -p [-1024] аналізує до порту 1024 з тих, що включені в nmap-services. –port-ratio — аналізує найпоширені порти в межах коефіцієнта між 0 і 1.

-sV Сканування версій; інтенсивність можна регулювати від 0 до 9, за замовчуванням 7.

–version-intensity Регулює інтенсивність: чим нижче, тим менше проб більшість найімовірніших, але не всі. Це дозволяє значно скоротити час UDP-сканування.

–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 ||||all[,…]

–script-trace —> Надає інформацію про прогрес виконання скрипту

–script-updatedb

Щоб використати скрипт, просто введіть: nmap –script Script_Name target –> При використанні скрипту виконаються і сам скрипт, і сканер, тому можна додавати і опції сканера. Можна додати “safe=1” щоб виконати лише безпечні скрипти.

Контроль часу

Nmap може приймати час у секундах, хвилинах, ms: –host-timeout аргументи 900000ms, 900, 900s, і 15m — все те саме.

Nmap ділить загальну кількість хостів для сканування на групи і аналізує ці групи блоками, тому він не переходить до наступного блоку, поки всі в поточному не будуть проаналізовані (і користувач не отримує оновлень до завершення блоку). Завдяки цьому ефективніше використовувати великі групи. За замовчуванням для класу C використовується 256.

Це можна змінити за допомогою –min-hostgroup ; –max-hostgroup (Налаштування розмірів паралельних груп сканування)

Можна контролювати кількість паралельних сканерів, але краще цього не робити (Nmap уже має автоматичне керування залежно від стану мережі): –min-parallelism ; –max-parallelism

Можна змінити RTT timeout, але зазвичай це не потрібно: –min-rtt-timeout , –max-rtt-timeout , –initial-rtt-timeout

Можна змінити кількість повторів: –max-retries

Можна змінити час сканування одного хоста: –host-timeout

Можна змінити затримку між тестами, щоб уповільнити скан: –scan-delay ; –max-scan-delay

Можна змінити кількість пакетів за секунду: –min-rate ; –max-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. Не працює з TCP version detectors без встановлення з’єднання. Якщо ви всередині мережі, краще використовувати активні IP, інакше буде очевидно, що ви єдиний активний хост.

Щоб використати випадкові IP: nmap -D RND:10 Target_IP

-S IP Коли Nmap не бачить ваш IP, вкажіть його цим параметром. Також служить для того, щоб змусити думати, ніби інший хост сканує.

-e Вибрати інтерфейс

Багато адміністраторів залишають деякі порти відкритими для забезпечення роботи (наприклад, DNS або FTP). Щоб знайти цю вразливість, Nmap має: –source-port ; -g _**_ (еквівалентні)

–data Надіслати шістнадцятковий рядок: –data 0xdeadbeef або –data \xCA\xFE\x09

–data-string Надіслати звичайний текст: –data-string “Scan conducted by Security Ops, extension 7192”

–data-length Nmap зазвичай надсилає лише заголовки; з цією опцією додає вказану кількість випадкових байтів

Щоб повністю налаштувати 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 Використовувати проксі; іноді проксі не підтримують таку кількість відкритих з’єднань, як Nmap хоче, тому може знадобитися змінити паралелізм: –max-parallelism

-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:

  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

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

## Посилання

- [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>