
На второй машине HackTheBox я набрал nmap -A -p- -T5 10.10.10.x и ушёл за чаем. Вернулся — FTP на порту 21 не отвечает, кастомный сервис лёг от потока NSE-проб. Машину пришлось сбрасывать, 40 минут в трубу. В учебной среде это обошлось дёшево. На реальном пентесте агрессивное сканирование портов nmap роняет production-сервис клиента — и тогда разговор уже не про флаги, а про акт и объяснительную. Проблема не в инструменте. Nmap достаточно гибкий, чтобы работать деликатно. Проблема в подходе: новички пытаются вытянуть всё за один запуск вместо того, чтобы думать поэтапно. Разберём стратегию разведки сети nmap для CTF — от быстрого обнаружения портов до точечного enumeration сервисов. Каждый флаг объясню, типичные грабли покажу.
Ни одно русскоязычное руководство не объясняет простую вещь: сканирование — это не одна команда, а последовательность шагов, где каждый опирается на результат предыдущего. Команда nmap -A -p- target формально рабочая, но на практике порождает три проблемы. Подробнее — в нашем руководстве по создание ctf заданий.
Время. Полное сканирование 65 535 TCP-портов с определением версий и скриптами может тянуться от нескольких минут до часа — зависит от сети, тайминга и количества открытых портов. На CTF-соревновании, где счёт идёт на минуты, это непозволительная роскошь.
Шум. Агрессивный скан генерирует тысячи пакетов в секунду. В терминологии MITRE ATT&CK это Active Scanning (T1595, Reconnaissance) — именно по такой активности blue team ловит начальный этап атаки. Если в задании есть IDS-компонент, ваш IP забанят раньше, чем вы увидите результат.
Нестабильность целей. Уязвимые сервисы в CTF-лабах часто крутятся на кастомных бинарниках с ограниченным пулом потоков. Десятки одновременных подключений от nmap — и процесс падает до начала эксплуатации. На HackTheBox и TryHackMe это регулярная история для машин Easy и Medium.
Рабочая стратегия разведки сети nmap строится из трёх фаз.
Фаза 1 — быстрый скан топ-портов. Запускаем nmap --top-ports 1000 -T4 target — тысяча самых частых TCP-портов за 15-30 секунд. Этого хватает за глаза, чтобы обнаружить SSH на 22, HTTP на 80/443, SMB на 445 и прочие стандартные сервисы. Тысяча портов — дефолтный набор nmap, и по данным nmap.org он покрывает подавляющее большинство реальных сервисов.
Фаза 2 — полное сканирование портов. Если фаза 1 не дала достаточно зацепок или задание подразумевает нестандартные порты — запускаем nmap -p- -T4 target. На выходе полный список открытых портов без детализации.
Фаза 3 — точечный enumeration. Берём конкретные порты из фазы 1 или 2 и прицельно определяем версии: nmap -sV -sC -p 22,80,8080,9999 target. Скрипты и пробы уходят только на нужные порты — быстро, точно, без лишней нагрузки на хост.
Понимание этой последовательности полезно не только для документирования, но и для понимания того, как вашу активность видит defensive-сторона.
Nmap поддерживает больше десятка методов сканирования. Новички пытаются решить любую задачу дефолтным SYN-сканом, хотя выбирать метод нужно под ситуацию. Для начала критически важны три типа.
SYN-скан (-sS) — дефолтный метод при запуске с root-правами. Его часто называют «полуоткрытым» или скрытым сканированием портов. Механика: nmap отправляет TCP SYN-пакет, получает SYN/ACK от открытого порта и тут же отвечает RST — трёхстороннее рукопожатие не завершается. Полноценное TCP-соединение не устанавливается, и большинство сервисов не логируют такую попытку.
На практике: sudo nmap -sS 10.10.10.5. Ключевое — sudo: для отправки сырых (raw) TCP-пакетов нужны привилегии root. Без них nmap тихо переключится на TCP Connect.
SYN-скан работает против любого RFC-совместимого TCP-стека и чётко различает три состояния порта: open (SYN/ACK), closed (RST) и filtered (нет ответа или ICMP unreachable). На быстрой сети он перемалывает тысячи портов в секунду. Для CTF — оптимальный выбор: быстро, точно, минимум следов.
Нюанс, который стоит держать в голове: слово «stealth» в названии nmap stealth scan не означает невидимость. Современные IDS (Snort, Suricata) детектируют SYN-сканирование без проблем — оно лишь оставляет меньше следов в логах сервисов по сравнению с полным подключением.
Если работаете без sudo — в ограниченном контейнере, на shared-хосте или в среде без raw-socket доступа — nmap использует TCP Connect (-sT). Вместо сырых пакетов он вызывает системный connect() — тот же механизм, через который работают браузеры и любые сетевые приложения. Соединение устанавливается полностью: SYN → SYN/ACK → ACK.
Команда: nmap -sT 10.10.10.5.
Минусы прямые: каждое подключение попадает в логи целевого хоста, сканирование требует больше пакетов и времени. Некоторые сервисы пишут в syslog каждую попытку, которая завершается без передачи данных — администратор увидит серию странных подключений от одного IP. В CTF Connect-скан работает нормально, просто имейте в виду: он оставляет больше следов.
UDP-сканирование (-sU) — самая недооценённая часть разведки сети nmap. Новички пропускают UDP целиком, а потом часами ищут вектор атаки среди TCP-портов, не подозревая, что ключ к машине лежит на SNMP (порт 161) или TFTP (69). DNS на 53, DHCP на 67/68 — все эти сервисы работают по UDP.
Главная боль — скорость. UDP не имеет механизма подтверждения: если порт открыт, ответа может не быть вовсе, и nmap маркирует его как open|filtered. Закрытые порты возвращают ICMP Port Unreachable (Type 3, Code 3), но многие ОС (особенно Linux) жёстко ограничивают частоту ICMP-ответов, что растягивает сканирование на десятки минут.
Практический рецепт: не сканируйте все UDP-порты. Команда sudo nmap -sU --top-ports 50 10.10.10.5 покроет самые частые UDP-сервисы за разумное время. UDP-скан можно комбинировать с TCP SYN в одном запуске: sudo nmap -sS -sU --top-ports 200 10.10.10.5 — проверит оба протокола одновременно.
Список открытых портов — отправная точка, не результат. Настоящая ценность в версиях ПО: Apache httpd 2.4.49 с path traversal и Apache 2.4.62 без него — два разных мира. Именно enumeration сервисов превращает разведку в план атаки.
Флаг -sV заставляет nmap подключаться к открытым портам, отправлять специальные пробы и сопоставлять ответы с базой nmap-service-probes. Там тысячи шаблонов для сотен протоколов.
Типичная команда для CTF: nmap -sV -p 22,80,445 10.10.10.5. Вывод может выглядеть так:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2
80/tcp open http Apache httpd 2.4.38 ((Debian))
445/tcp open smb Samba smbd 4.9.5-Debian
Из этого уже можно искать CVE для конкретных версий OpenSSH и Apache. Версия — это первое, за что цепляется глаз.
Параметр, который большинство руководств для начинающих игнорирует — --version-intensity. Он контролирует, сколько проб nmap отправляет для определения версии сервиса. Диапазон от 0 (только самые вероятные пробы) до 9 (все доступные). Дефолт — 7, а при --version-all — 9. Для CTF оптимально значение 5: nmap -sV --version-intensity 5 -p 22,80 target — покрывает стандартные сервисы без лишних задержек. Если nmap не определил версию — повторите с --version-intensity 9 только для проблемного порта.
Флаг -O активирует fingerprinting операционной системы. Nmap анализирует особенности TCP/IP-стека цели: значения TTL, размеры TCP-окон, поведение при нестандартных запросах. Результат сравнивается с базой nmap-os-db. Метод лучше всего работает, когда на цели есть и открытые, и закрытые порты — чем разнообразнее ответы, тем точнее идентификация.
Команда: sudo nmap -O -p 22,80 10.10.10.5. Если уверенность низкая, добавьте --osscan-guess — nmap выдаст наиболее вероятный вариант.
Агрессивный флаг -A объединяет -sV, -O, -sC (default-скрипты) и traceroute. Удобно для финальной фазы, но опасно как первая команда. -A запускает скрипты, которые могут быть шумными и нагружать хост. Используйте -A только в фазе 3, на уже известных портах. Никогда — как стартовую команду на незнакомой цели.
NSE (Nmap Scripting Engine) превращает nmap из сканера портов в платформу для полноценной сетевой разведки. Скрипты написаны на Lua и покрывают задачи от перечисления SMB-шар до детектирования конкретных уязвимостей.
Флаг -sC запускает скрипты из категории default — они не должны ломать работу сервисов. Примеры: получение баннера SSH, перечисление HTTP-заголовков, базовая информация о SMB-домене.
Все NSE-скрипты разделены на категории: safe, default, discovery, vuln, brute, intrusive и другие. Категория intrusive может вызвать отказ в обслуживании — скрипты из неё отправляют exploit-подобные запросы. На CTF-машинах с нестабильными кастомными сервисами запуск --script intrusive — лотерея: либо полезная информация, либо упавший сервис и ресет машины. Я на этом обжигался не раз.
Правило для nmap для начинающих: используйте -sC для общей разведки и конкретные скрипты по имени для углублённого анализа.
Вместо запуска целой категории эффективнее вызывать скрипты точечно. Несколько примеров для частых сценариев.
SMB enumeration (порты 139, 445): nmap --script smb-enum-shares,smb-enum-users -p 445 target — покажет сетевые ресурсы (shares) и список пользователей. На машинах с Active Directory это часто первый шаг к начальному доступу.
HTTP enumeration (порты 80, 443, 8080): nmap --script http-enum -p 80 target — проверяет наличие типовых путей: /admin, /phpmyadmin, /robots.txt. По сути — быстрый directory bruteforce без дополнительных инструментов.
Поиск уязвимостей: nmap --script vuln -p 445 target — проверит SMB на известные дыры. Скрипт шумный, используйте только на конкретном порту, когда знаете, что ищете.
FTP anonymous: nmap --script ftp-anon -p 21 target — мгновенная проверка анонимного доступа на FTP. Одна из самых частых зацепок на Easy-машинах.
Полный набор скриптов лежит в /usr/share/nmap/scripts/ — их более 600. Имена говорящие: http-sql-injection, ssh-brute, dns-zone-transfer. Можно просто ls по директории и выбрать нужный.
Скорость сканирования — компромисс между временем, точностью и заметностью. Nmap даёт инструменты для управления и тем, и другим.
Nmap поддерживает шесть шаблонов тайминга. Выбор влияет на интервал между пакетами, количество параллельных проб и таймауты ожидания.
Для CTF-платформ оптимален -T4. Соединение через OpenVPN достаточно стабильно, а скорость на порядок выше дефолтного T3. Переходите на -T3, если замечаете пропуски портов или результаты нестабильны при повторном сканировании.
На CTF-машинах с IDS-компонентом или в заданиях на скрытность пригодятся техники маскировки.
Decoy scan (-D): nmap подставляет «ложные» IP-адреса в качестве источников пакетов наряду с вашим реальным: sudo nmap -sS -D 192.168.1.100,192.168.1.101,ME target. В логах IDS появятся пакеты от нескольких адресов, и выделить реальный сканер станет сложнее. Маркер ME указывает позицию вашего IP — без него nmap поставит его в случайное место списка.
Фрагментация (-f): разбивает TCP-заголовки на фрагменты по 8 байт, усложняя сборку пакета на стороне IDS. Двойной флаг -ff — на 16-байтные фрагменты. Современные IDS справляются с реассемблированием, но в CTF-заданиях со старыми правилами файрвола это может сработать.
Спуфинг исходного порта (--source-port): некоторые файрволы пропускают трафик с «доверенных» портов. Команда nmap --source-port 53 target может обойти простые правила, разрешающие DNS-трафик. Грубо, но на Easy-машинах попадается.
ACK scan (-sA): техника, которую редко объясняют в материалах nmap для начинающих. Она не определяет открытые порты, но выявляет правила файрвола. Nmap отправляет пакеты с флагом ACK: если приходит RST — порт не фильтруется (unfiltered); нет ответа — файрвол блокирует (filtered). ACK-скан никогда не покажет порт как open или closed — только unfiltered или filtered. Полезно для маппинга firewall-правил перед основным сканированием. ACK-скан работает в связке с SYN-сканом: сначала -sA для карты фильтрации, потом -sS на нефильтрованные порты.
Результаты нужно сохранять. Для writeup, для повторного анализа, для передачи напарнику. Nmap поддерживает три формата вывода: -oN (текст как в терминале), -oX (XML для Metasploit и Burp), -oG (grepable-формат для поиска через grep).
Комбинированный флаг -oA basename сохраняет во всех трёх форматах одновременно. Рекомендую именно его с осмысленным именем: nmap -sV -sC -p 22,80 -oA nmap/targeted 10.10.10.5. Потом не придётся пересканировать цель, потому что забыли сохранить.
Полезная привычка — единая структура директорий для каждой машины:
htb-box1/
├── nmap/
│ ├── initial.nmap
│ ├── full.nmap
│ └── targeted.nmap
├── exploit/
└── loot/
Такая структура позволяет работать над несколькими машинами параллельно и не путать результаты. Категория #14 Port Scan — одна из самых частых в IP-reputation сервисах вроде AbuseIPDB, так что при работе на внешних CTF-платформах ваш IP может быть зарегистрирован. Сохранённые результаты помогут доказать легитимность действий.
Несколько граблей, на которые наступают почти все. Я наступил на каждые.
Начинать с -p-. Полное сканирование всех портов — последний шаг, а не первый. Сначала --top-ports 1000, потом -p- если нужно.
Забывать про UDP. На Easy-машинах CTF-платформ регулярно встречаются задачи, где ключевой сервис — SNMP на UDP 161. Через snmpwalk можно вытащить пароли, имена пользователей и конфигурацию системы (Remote System Discovery, T1018). Часами ковыряешь TCP — а ответ на UDP валяется.
Использовать -T5 через VPN. Канал до CTF-платформы идёт через OpenVPN, потери пакетов неизбежны. T5 с минимальными таймаутами будет пропускать ответы и помечать открытые порты как filtered. T4 — потолок для VPN-сценариев.
Не сохранять результаты. Без -oA приходится пересканировать цель каждый раз, когда нужно свериться. Потеря времени и дополнительный шум.
Запускать vuln-скрипты на все порты. Категория vuln выполняет реальные проверки — отправляет exploit-подобные запросы. Это и долго, и рискованно: --script vuln -p 445 — да, --script vuln без -p — нет.
Игнорировать вывод filtered. Статус filtered означает, что файрвол блокирует порт. Это не «закрыт» — за фильтром может скрываться рабочий сервис. Комбинация ACK-скана и изменения source-порта иногда позволяет пробиться через простые правила.
Не проверять nmap-версию. В старых версиях nmap (до 7.80) отсутствуют актуальные fingerprints для современных ОС и сервисов. Команда nmap --version занимает секунду, а экономит часы неточных результатов.
Большинство материалов по nmap для начинающих написаны как справочник флагов: вот -sS, вот -sV, вот -A, применяйте. Но знание двадцати флагов без стратегии — как знание двадцати дебютов в шахматах без понимания позиции. Я прошёл через этап, когда мог перечислить все типы сканирования, но стабильно терял время на CTF: сканировал всё подряд, пропускал UDP, ронял нестабильные сервисы. Переломный момент наступил, когда перестал думать командами и начал думать фазами: что хочу узнать → какой минимальный запрос для этого нужен → что делать с результатом.
Nmap — инструмент начального уровня, а методика сканирования — уже навык. Между «умею запускать nmap» и «умею проводить разведку» — пропасть, которая закрывается только практикой на реальных (пусть и лабораторных) целях. На IB Basics на codeby.school этот принцип заложен в основу: не «запомните синтаксис», а «поймите логику».
🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «pentest-machines».
0 комментариев
Пожалуйста, войдите, чтобы оставить комментарий.
Загрузка комментариев...