Главная / Блог / Nmap для начинающих: от первого скана до CTF

13 мин.00

Nmap для начинающих: от первого скана до CTF

Nmap для начинающих: от первого скана до CTF

Первый бокс на HackTheBox — получил IP-адрес машины и полминуты пялился в пустой терминал. Один sudo nmap 10.10.10.5 — через 30 секунд картина ясна: SSH на 22-м, веб-сервер на 80-м, что-то незнакомое на 8080-м. Чёрный ящик превратился в карту с конкретными дверями. Nmap — первое, что запускает любой участник CTF и любой пентестер. Качество начальной разведки определяет, потратите вы на таск два часа или шесть. Здесь — не справочник всех флагов (их больше сотни), а рабочий workflow сканирования портов Nmap: что запускать, в каком порядке и как читать результаты.

Зачем Nmap нужен при сканировании сети

Nmap (Network Mapper) определяет, какие хосты живы в сети, какие порты на них открыты, какие сервисы слушают за этими портами и под какой ОС работает машина. В терминах MITRE ATT&CK это Active Scanning (T1595, Reconnaissance) и Network Service Discovery (T1046, Discovery) — ровно то, что делает атакующий на этапе разведки перед любым проникновением. Подробнее — в нашем руководстве по создание ctf заданий.

В CTF и при подготовке к pwn-таскам Nmap решает три задачи. Первая — обнаружить точки входа: каждый открытый порт — работающий сервис и потенциальный вектор атаки. Пропустили нестандартный порт — пропустили флаг. Вторая — определить стек технологий: версия Apache, тип SSH-сервера, наличие SMB подсказывают, какие эксплойты применимы. Третья — сузить scope и перейти от слепого перебора к прицельной работе по конкретным сервисам.

Русскоязычные руководства из топа поиска перечисляют команды и объясняют флаги. Но ни одно не даёт рабочего алгоритма: что запускать первым, что вторым и что делать с полученным выводом. Я выстроил эту статью как такой алгоритм — от установки до готового плана атаки на CTF-бокс.

Установка Nmap и первый запуск

На Kali Linux и Parrot OS Nmap предустановлен — проверьте через nmap --version. На чистом Debian/Ubuntu: sudo apt update && sudo apt install nmap. На Fedora: sudo dnf install nmap. На macOS через Homebrew: brew install nmap. На Windows — .exe-инсталлятор с nmap.org, после чего сканер доступен из cmd или PowerShell.

Первое правило, которое экономит нервы: запускайте Nmap с sudo. Без root-привилегий Nmap не может отправлять raw-пакеты и вынужденно переключается с SYN-скана (-sS) на TCP Connect (-sT). Увидели в терминале "TCP connect scan requested..." — перезапустите с sudo. SYN-скан быстрее и тише: он не завершает TCP-рукопожатие, а значит в логах целевой машины меньше записей. По документации nmap.org SYN-скан — дефолтный при запуске с правами root.

Самый базовый вызов: sudo nmap 10.10.10.5. Без дополнительных флагов Nmap проверит 1000 самых распространённых TCP-портов (список зашит в файле nmap-services) и выведет таблицу с состоянием каждого. Для первого знакомства хватит за глаза, но для CTF — категорически мало. Почему — объясню дальше.

Как читать вывод Nmap: open, closed, filtered

Прежде чем разбирать типы сканирования, нужно научиться читать результат. Это ключевой навык для nmap-разведки — если путаете filtered и closed, будете тратить время на порты, заблокированные файрволом.

PORT     STATE    SERVICE
22/tcp   open     ssh
80/tcp   open     http
139/tcp  filtered netbios-ssn
445/tcp  closed   microsoft-ds
8080/tcp open     http-proxy

open — на порту слушает сервис, он готов принимать соединения. Это ваша цель в CTF. Каждый open-порт — отдельное мини-расследование.

closed — порт доступен (машина отвечает RST-пакетом, фактически говорит «тут никого нет»), но активного сервиса за ним нет. В CTF обычно неинтересен, но на реальном пентесте закрытый порт может открыться после определённых действий.

filtered — пакет ушёл, ответа нет. Файрвол или сетевой фильтр дропнул запрос молча. Nmap не может определить, открыт порт или закрыт. Видите filtered на порту, который по логике должен быть открыт — попробуйте -Pn или смените тип скана.

open|filtered — характерно для UDP-сканирования. UDP не отправляет подтверждений, и Nmap не уверен: порт открыт или файрвол молча дропнул пакет.

По документации nmap.org существует ещё состояние unfiltered — порт отвечает на запросы, но Nmap не может определить, открыт он или закрыт. Встречается при ACK-скане (-sA), который используется для анализа правил файрвола. На практике в CTF попадается редко.

Сканирование портов Nmap: типы сканирования и когда какой применять

Nmap поддерживает больше десятка типов сканирования: FIN, Xmas, NULL, Idle, Maimon и другие. Большинство заточены под обход специфических файрволов и IDS — ситуации, которые в CTF-тасках встречаются крайне редко. Для nmap-основ хватит трёх.

SYN-скан — основа разведки сети для пентеста

Запускается по умолчанию при наличии root: sudo nmap -sS 10.10.10.5. Механика опирается на TCP-рукопожатие: Nmap шлёт пакет с флагом SYN (первый шаг трёхэтапного handshake). Цель отвечает SYN/ACK — порт открыт, и Nmap тут же кидает RST, обрывая соединение до его установления. Приходит RST — порт закрыт. Тишина — filtered.

Почему SYN лучше полного соединения: быстрее и меньше записей в логах целевой машины (технически соединение не установлено, хотя современные IDS всё равно его видят). По MITRE ATT&CK это Scanning IP Blocks (T1595.001) — отправка зондирующих пакетов для определения активных сервисов.

На практике почти все ваши сканирования в CTF будут SYN-сканом. Исключения — ситуации без root или необходимость проверки UDP.

TCP Connect — когда нет root-привилегий

nmap -sT 10.10.10.5 работает без sudo. Nmap использует системный вызов connect() и устанавливает полное TCP-соединение с каждым портом. Результат аналогичен (open/closed/filtered), но метод медленнее и заметнее — целевой сервер логирует каждое завершённое подключение. В CTF применяется редко: на атакующей машине обычно есть root.

UDP-скан — порты, которые все забывают

sudo nmap -sU --top-ports 50 10.10.10.5 проверяет 50 самых распространённых UDP-портов. UDP-скан принципиально медленнее TCP: протокол не шлёт подтверждений, и Nmap вынужден ждать ICMP-ошибку Port Unreachable (порт закрыт) или молчание (open|filtered).

Зачем это нужно: DNS (53), SNMP (161), TFTP (69), IKE (500) — всё это UDP-сервисы, которые регулярно всплывают в CTF и на пентестах. SNMP с community string "public" может отдать конфигурацию оборудования. DNS бывает уязвим к zone transfer. TFTP позволяет скачивать файлы без аутентификации. Пропустить UDP — пропустить целый класс уязвимостей.

Типичная ошибка: запуск полного UDP-скана (-p-). Это занимает часы. Используйте --top-ports 100 или явно укажите порты: -p 53,69,123,161,500.

Сводная таблица для быстрой ориентации:

Тип скана Флаг Нужен root Скорость Когда использовать
SYN -sS Да Высокая Основной скан в CTF и пентесте
TCP Connect -sT Нет Средняя Нет root-привилегий
UDP -sU Да Низкая Поиск DNS, SNMP, TFTP

Разведка сети Nmap: обнаружение хостов и детекция сервисов

Обнаружение живых хостов в сети

Для network-тасков CTF и внутренних пентестов часто нужно найти все живые машины в подсети. Ping sweep: sudo nmap -sn 192.168.1.0/24. Флаг -sn отключает сканирование портов — Nmap только проверяет доступность хостов через комбинацию ICMP echo, TCP SYN (порт 443) и TCP ACK (порт 80). По MITRE ATT&CK это Remote System Discovery (T1018).

Если ICMP заблокирован (частая ситуация в CTF-лабах), добавьте явные TCP-пробы: sudo nmap -sn -PS22,80,443 192.168.1.0/24 — отправит SYN-пакеты на указанные порты.

В CTF, где вам дан конкретный IP-адрес, ping sweep не нужен. Но нужен флаг -Pn: он пропускает фазу host discovery и считает цель живой. Без -Pn Nmap может решить, что хост мёртв (файрвол дропнул пробы), и вообще не начнёт сканирование портов. Одна из самых частых ошибок у тех, кто только осваивает Nmap — я сам на неё наступил в первую неделю.

Детекция версий сервисов и операционной системы

Найти открытые порты — полдела. Нужно понять, что за ними стоит. Флаг -sV включает определение версий: Nmap подключается к каждому открытому порту, шлёт серию зондов и сравнивает ответы с базой сигнатур nmap-service-probes.

Разница ощутимая: без -sV в столбце SERVICE видно просто "http", а с ним — "Apache httpd 2.4.49 ((Ubuntu))". И это уже actionable информация: Apache 2.4.49 содержит известную path traversal уязвимость (CVE-2021-41773). По MITRE ATT&CK определение версий — сбор данных о Software на целевых системах (T1592.002, Reconnaissance).

Параметр --version-intensity (от 0 до 9) управляет количеством отправляемых зондов. 0 — только самые вероятные, 9 — все доступные. Для CTF оставляйте дефолт (7 по данным nmap.org) — баланс между скоростью и точностью.

Флаг -O определяет операционную систему по особенностям TCP/IP-стека: TTL, размер окна TCP, опции TCP, поведение при ICMP. Работает лучше, когда на цели есть и открытые, и закрытые порты — Nmap анализирует разные типы ответов для более точного фингерпринта. Можно добавить --osscan-guess для менее уверенных, но всё же полезных предположений.

Комбинация sudo nmap -sC -sV -O -p <порты> <цель> — рабочая лошадка второго этапа. Есть короткий вариант: -A включает одновременно -sV, -O, дефолтные NSE-скрипты и traceroute. Но -A медленнее, так что в CTF лучше применять точечно — после того как быстрый полный скан уже нашёл интересные порты.

Nmap команды для начинающих: NSE-скрипты и enumeration

Nmap Scripting Engine (NSE) — встроенный движок скриптов на Lua. Скрипты лежат в /usr/share/nmap/scripts/ и покрывают задачи от сбора баннеров до поиска конкретных уязвимостей. Для начинающих критически важны три подхода.

Дефолтные скрипты запускаются через sudo nmap -sC <цель> (эквивалент --script=default). Набор безопасных скриптов: получение SSH host key, HTTP-заголовков, листинг SMB-шар, базовая информация о DNS. В CTF это обязательный шаг после обнаружения портов — дефолтные скрипты часто вытаскивают детали, которые не видны при простом сканировании.

Категория vuln: sudo nmap --script vuln -p 80,443 <цель> проверяет найденные сервисы на известные уязвимости. Не заменяет полноценный vulnerability scanner, но в CTF может мгновенно указать на вектор — обнаружить Heartbleed на порту 443 или ms17-010 на SMB. По MITRE ATT&CK это Vulnerability Scanning (T1595.002).

Конкретный скрипт: sudo nmap --script http-enum -p 80 <цель> перебирает типичные пути на веб-сервере (/admin, /phpmyadmin, /wp-login.php). Для SMB полезен smb-enum-shares, для DNS — dns-zone-transfer, для SSL/TLS — ssl-enum-ciphers. Найти подходящий скрипт: ls /usr/share/nmap/scripts/ | grep <ключевое_слово>.

Nmap для CTF: пошаговый workflow решения network-таска

Конкретная последовательность, которую я запускаю на каждом боксе HackTheBox и TryHackMe. Три этапа — от чёрного ящика до полной карты сервисов. Подходит и для network-тасков CTF, и для подготовки к pwn-категории.

Шаг 1 — быстрый скан всех портов

sudo nmap -sS -p- --min-rate 5000 -Pn 10.10.10.5 -oA nmap/allports

Разберу каждый элемент: -sS — SYN-скан; -p- — все 65535 портов (без этого проверяются только топ-1000, а в CTF флаг часто висит на порту 31337 или 49152); --min-rate 5000 — минимум 5000 пакетов в секунду (в CTF-лабе безопасно, на реальном пентесте уменьшайте); -Pn — считать цель живой; -oA nmap/allports — сохранить результат во всех форматах.

Время: 15-40 секунд. Результат — полный список открытых портов.

Шаг 2 — детальное сканирование с определением версий

Допустим, шаг 1 нашёл порты 22, 80, 3306, 8443. Прицельная детализация: sudo nmap -sC -sV -O -p 22,80,3306,8443 10.10.10.5 -oA nmap/detailed.

PORT     STATE SERVICE  VERSION
22/tcp   open  ssh      OpenSSH 8.2p1 Ubuntu 4ubuntu0.5
80/tcp   open  http     Apache httpd 2.4.41 ((Ubuntu))
3306/tcp open  mysql    MySQL 5.7.38-0ubuntu0.18.04.1
8443/tcp open  ssl/http Apache Tomcat 9.0.31
OS details: Linux 4.15 - 5.6

Из вывода видна атаковая поверхность: Ubuntu, Apache с конкретной версией, MySQL (проверить дефолтные credentials root:root), Tomcat 9.0.31 (проверить Tomcat Manager и пару tomcat:tomcat). Скан занимает 1-3 минуты.

Шаг 3 — enumeration конкретных сервисов через NSE

На каждый интересный сервис — прицельный скрипт. Для веба: sudo nmap --script http-enum,http-title,http-methods -p 80,8443 <IP>. Для MySQL: sudo nmap --script mysql-info,mysql-enum -p 3306 <IP>. Для SMB: sudo nmap --script smb-enum-shares,smb-os-discovery -p 445 <IP>.

После трёх шагов — полная карта: какие порты, какие сервисы, какие версии, какие скрытые пути на веб-сервере. Дальше начинается эксплуатация, но это уже за рамками сканера.

Для ускорения первого шага можно использовать Rustscan: rustscan -a 10.10.10.5 -- -sC -sV. Rustscan находит открытые порты за 3-5 секунд и автоматически передаёт их Nmap для детального скана. На CTF-соревнованиях, где минуты на счету, связка заметно экономит время.

Ошибки новичков при сканировании сети

Грабли, на которые наступают все в первые месяцы. Собрал из собственного опыта и из наблюдений за тиммейтами по CTF.

Забыли -Pn — хост "не найден". Nmap по умолчанию проверяет доступность хоста через ICMP и TCP-пробы. Файрвол дропнул пробы — Nmap считает хост мёртвым и ничего не сканирует. В CTF и при пентестах через VPN всегда добавляйте -Pn.

Сканируют только топ-1000 портов. Дефолтный скан без -p- пропускает более 64000 портов. На CTF-боксах критически важные сервисы регулярно сидят на высоких нестандартных портах. Полный скан обязателен.

Путают filtered и closed. Closed — машина ответила RST, порт доступен, но пуст. Filtered — тишина, пакет дропнут файрволом. При filtered попробуйте ACK-скан (-sA) для анализа правил файрвола: он не покажет open/closed, но покажет, какие порты файрвол фильтрует, а какие пропускает.

Не сохраняют результаты. Через час повторный скан может дать другие результаты (сервис перезапустился, таймаут изменился). Всегда используйте -oA <префикс> — сохранение в трёх форматах: текстовом, XML и grepable. Создайте папку mkdir nmap и складывайте всё туда. Будущий вы скажет спасибо.

Запускают -A сразу на все порты. Aggressive-скан включает детекцию версий, ОС, скрипты и traceroute. На 65535 портах это может занять 15-20 минут. Двухэтапный подход (быстрый -sS -p-, потом точечный -sC -sV на найденные порты) работает в разы быстрее.

Игнорируют UDP. Большинство новичков сканируют только TCP. SNMP на 161/udp может отдать community string и конфигурацию оборудования. DNS на 53/udp бывает уязвим к zone transfer. TFTP на 69/udp позволяет скачивать файлы без аутентификации. Минимум --top-ports 50 для UDP — обязательная часть разведки.

Не читают вывод скриптов. NSE-скрипты выдают результат прямо в консоль, но новички пролистывают его, фокусируясь только на таблице портов. А http-title может показать "Tomcat Manager", smb-os-discovery — точную версию Windows, ssh-hostkey — тип ключа, по которому уточняется ОС. Не ленитесь читать — там бывает золото.

От сканирования к эксплуатации: что делать с результатами Nmap

Nmap — первый инструмент в цепочке, не единственный. После сканирования портов и определения сервисов начинается глубокий enumeration. По MITRE ATT&CK это переход от Reconnaissance к подготовке Initial Access (T1190, Exploit Public-Facing Application).

Направления дальнейшей работы зависят от найденных сервисов: для веб-сервера на 80/443 — перебор директорий через gobuster или feroxbuster, поиск уязвимостей через nikto; для SMB на 445 — листинг шар через smbclient -L //<IP> -N и enum4linux; для SSH — проверка версии на наличие username enumeration; для MySQL или PostgreSQL — попытка дефолтных credentials.

Каждый открытый порт — отдельное расследование. Nmap даёт карту, enumeration превращает карту в план атаки. Чем точнее начальный скан — тем меньше возни на следующих этапах.

Полтора года решения CTF-боксов параллельно с пентестами веб-инфраструктуры дали одно наблюдение: новички зацикливаются на коллекционировании флагов Nmap, будто количество знакомых опций — мерило квалификации. Встречал людей, которые наизусть знали разницу между FIN-сканом и Maimon-сканом, но не могли объяснить, что делать с выводом "Apache httpd 2.4.49" в результатах обычного -sV. FIN, Xmas, NULL, Idle — всё это нужно в единичных ситуациях для обхода конкретного файрвола. В CTF они почти не встречаются.

Настоящий навык — не знание флагов, а умение читать вывод и мгновенно переводить его в следующее действие. "OpenSSH 7.2" — username enumeration. "Apache 2.4.49" — path traversal. SNMP на UDP — проверить community string "public". Это приходит только с практикой: нужно руками прогнать десятки боксов и каждый раз записать, что увидели и что предприняли. Если хочется системного трека от основ до первых задач — на IB Basics на codeby.school эту цепочку проходят с лабами, без академического тона.

🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «pentest-machines».

Поделиться

0 комментариев

Пожалуйста, войдите, чтобы оставить комментарий.

Загрузка комментариев...

Читайте также

Command injection эксплуатация в CTF-тасках

12 мин.

2

Command injection эксплуатация в CTF-тасках

Пошаговый разбор OS command injection в CTF: операторы цепочки, blind injection через sleep и DNS, обход фильтров ANSI-C quoting и ${IFS} — от находки до shell.

14 ОКТЯБРЬ, 2026

SSRF уязвимость: как эксплуатировать в CTF-задачах

12 мин.

5

SSRF уязвимость: как эксплуатировать в CTF-задачах

452% рост SSRF-атак за год. Разбор обхода фильтров через DNS rebinding, decimal IP и gopher-цепочки — пошаговый workflow CTF-решения с payloads и инструментами.

13 ОКТЯБРЬ, 2026

JWT уязвимости в CTF: none, брутфорс и confusion

14 мин.

5

JWT уязвимости в CTF: none, брутфорс и confusion

5 атак на JWT в CTF: алгоритм none, брутфорс секрета hashcat, confusion RS256→HS256, kid-инъекция и JWK-спуфинг. Команды jwt_tool и чек-лист действий.

13 ОКТЯБРЬ, 2026