🛡️ Cheatsheet по Nmap для пентеста
Основано на анализе официальной документации, лучших практик (SANS, Nmap Network Scanning) и публикаций в области ИБ (Pentest Magazine, SecurityTrails, HackerOne reports).
📌 Оглавление
- Указание целей (Target Specification)
- Техники сканирования (Scan Techniques)
- Обнаружение хостов (Host Discovery)
- Указание портов (Port Specification)
- Обнаружение сервисов и версий (Service and Version Detection)
- Определение ОС (OS Detection)
- Тайминг и производительность (Timing and Performance)
- Сценарии NSE (Nmap Scripting Engine)
- Обход фаерволлов и IDS/IPS (Firewall/IDS Evasion & Spoofing)
- Вывод результатов (Output)
- Практические сценарии использования
- Правовые аспекты и лучшие практики
1. Указание целей (Target Specification)
| Команда/Свитч | Пример использования | Описание и применение | Практический совет |
|---|
| Одиночная цель | nmap 192.168.1.1 | Базовое сканирование. По умолчанию: 1000 TCP-портов, SYN-сканирование (c root) или TCP-connect (без root). | Всегда используйте sudo для SYN-сканирования (-sS). Оно быстрее и создает меньше логов на цели. |
| Диапазон IP | nmap 192.168.1.1-254 | Сканирование всех хостов в диапазоне. | Комбинируйте с -sn для быстрой инвентаризации сети без сканирования портов. |
| CIDR-нотация | nmap 10.0.0.0/24 | Сканирование всей подсети. Удобно для указания сетей. | Основа для картирования сети. Используйте -oX network_map.xml для сохранения результатов. |
Из файла (-iL) | nmap -iL targets.txt | Сканирование списка целей из файла (по одной на строку). Может содержать IP, диапазоны, домены. | Идеально для работы с большими списками из инструментов разведки (Amass, Subfinder). |
Случайные цели (-iR) | nmap -iR 10 -sn | Сканирование N случайных IP-адресов. Используйте с крайней осторожностью. | Практически всегда комбинируйте с -sn. Может быть незаконным без явного разрешения. |
Исключение хостов (--exclude) | nmap 192.168.1.0/24 --exclude 192.168.1.50 | Исключает указанные хосты из сканирования. | Полезно для избежания сканирования критичных систем (сетевые принтеры, VoIP-АТС). Используйте --excludefile для списка. |
2. Техники сканирования (Scan Techniques)
| Команда/Свитч | Пример использования | Описание и применение | Практический совет |
|---|
TCP SYN Scan (-sS) | sudo nmap -sS 192.168.1.1 | Стандартный метод. Отправляет SYN-пакет. SYN/ACK = открыт, RST = закрыт. Не завершает handshake (менее заметно). | Требует прав root. Основной выбор для большинства аудитов. Соответствует фазе Discovery (T1046) в MITRE ATT&CK. |
TCP Connect Scan (-sT) | nmap -sT 192.168.1.1 | Использует системный вызов connect(), завершая TCP handshake. Используется без прав root. | Более заметен для IDS, так как создает полные соединения. Часто логируется сервисами (sshd, httpd). |
UDP Scan (-sU) | sudo nmap -sU -p 53,161,123 192.168.1.1 | Сканирует UDP-порты. Отсутствие ответа (ICMP port unreachable) = open|filtered. | Очень медленный. Используйте --max-retries 1 и --min-rate 100 для ускорения. Критичен для DNS, SNMP, DHCP. |
TCP ACK Scan (-sA) | sudo nmap -sA 192.168.1.1 | Отправляет ACK-пакет для определения, фильтруется ли порт stateful-брандмауэром. Не определяет open/closed. | Если порт unfiltered — трафик ACK проходит. Если filtered — порт защищен. Тестирование правил МЭ. |
TCP Window Scan (-sW) | sudo nmap -sW 192.168.1.1 | Анализирует поле TCP Window Size в ответе RST для определения состояния порта на некоторых системах. | Работает редко (в основном на устаревших ОС: Windows до XP, некоторые BSD). |
TCP Maimon Scan (-sM) | sudo nmap -sM 192.168.1.1 | Отправляет пакеты FIN/ACK. Согласно старому RFC, закрытый порт должен ответить RST. | Устаревший метод. Большинство современных систем не следуют данному поведению. |
3. Обнаружение хостов (Host Discovery)
| Команда/Свитч | Пример использования | Описание и применение | Практический совет |
|---|
Только список (-sL) | nmap -sL 192.168.1.0/24 | Не сканирует, а только выводит список всех хостов, которые могли бы быть просканированы. | "Сухая" проверка целей перед активным сканированием. |
Только Ping (-sn) | nmap -sn 192.168.1.0/24 | Обнаружение живых хостов без сканирования портов (ICMP, TCP SYN/ACK, ARP). | Лучший способ для быстрой инвентаризации сети. ARP-сканирование в локальных сетях (-PR) выполняется автоматически и надежно. |
Пропуск обнаружения (-Pn) | nmap -Pn 192.168.1.1 | Считает все хосты активными, сразу переходит к сканированию портов. Обходит фильтрацию ICMP. | Обязательно используйте при сканировании хостов, блокирующих ping (например, Windows серверы). Ускоряет сканирование защищенных сетей. |
TCP SYN Ping (-PS) | nmap -PS22,80,443 -sn 10.0.0.1 | Обнаружение хоста через отправку TCP SYN-пакетов. Ответ SYN/ACK или RST = хост жив. | Эффективен для обхода блокировки ICMP. Укажите порты, вероятно открытые в целевой среде (80, 443, 22, 3389). |
ARP Ping (-PR) | nmap -PR -sn 192.168.1.0/24 | Использует ARP-запросы для обнаружения в локальной сети L2. Самый быстрый и надежный метод. | Включается автоматически при сканировании локальной сети с правами root. Бесполезен за пределами широковещательного домена. |
Без DNS (-n) | nmap -n 192.168.1.1 | Отключает обратное разрешение имен (PTR-запросы). Ускоряет сканирование. | Всегда используйте при внутренних сканированиях. Ускоряет работу и предотвращает "шум" в DNS-логах. Для внешней разведки может быть полезно -R. |
4. Указание портов (Port Specification)
| Команда/Свитч | Пример использования | Описание и применение | Практический совет |
|---|
Конкретные порты (-p) | nmap -p 22,80,443 192.168.1.1 | Сканирует указанный список портов. | Для веб-серверов: -p 80,443,8000-9000,8080,8443. Всегда проверяйте нестандартные порты. |
Диапазон портов (-p) | nmap -p 1-1024 192.168.1.1 | Сканирует все порты в диапазоне. | -p 1-1024 (системные), -p 1025-49151 (зарегистрированные), -p 49152-65535 (динамические). |
| Смешанные TCP/UDP | nmap -p U:53,T:80,443 192.168.1.1 | Сканирует смешанные TCP и UDP порты. T: для TCP, U: для UDP. | Критично для полного аудита. Пример: DNS (UDP/53) и HTTP (TCP/80) на одном хосте. |
Все порты (-p-) | sudo nmap -p- 192.168.1.1 | Сканирует все 65535 TCP-портов. Полная инвентаризация. | Очень медленно. Используйте -T4, --min-rate 1000. Всегда комбинируйте с -sV и -sC для важных целей. |
Быстрое (-F) | nmap -F 192.168.1.1 | Сканирует 100 наиболее распространенных портов (из nmap-services). | Идеально для начального, быстрого разведывательного сканирования большой сети. |
Топ-N портов (--top-ports) | nmap --top-ports 200 192.168.1.0/24 | Сканирует N самых популярных портов на каждом хосте. | Баланс между скоростью (-F) и полнотой (-p-). --top-ports 1000 — хороший компромисс. |
5. Обнаружение сервисов и версий (Service and Version Detection)
| Команда/Свитч | Пример использования | Описание и применение | Практический совет |
|---|
Определение версий (-sV) | nmap -sV 192.168.1.1 | Определяет сервис и его версию на каждом открытом порту. Сравнивает ответы с nmap-service-probes. | Основа анализа уязвимостей. Версия ПО позволяет искать эксплойты и CVE (напр., CVE-2021-41773 для Apache 2.4.49). |
Интенсивность (--version-intensity) | nmap -sV --version-intensity 9 192.168.1.1 | Задает агрессивность проверки (0-9). | По умолчанию = 7. Используйте 9 для сложных целей, 2 (--version-light) для скорости. |
Агрессивный режим (-A) | sudo nmap -A 192.168.1.1 | Включает -sV, -O, --traceroute и -sC. "Полный пакет" сканирования. | Очень заметно для систем защиты. Используйте осознанно. Дает максимум данных для отчета. |
6. Определение ОС (OS Detection)
| Команда/Свитч | Пример использования | Описание и применение | Практический совет |
|---|
Определение ОС (-O) | sudo nmap -O 192.168.1.1 | Определяет ОС хоста на основе анализа стека TCP/IP. Требует открытый и закрытый порт. | Не всегда точно. Смотрите на Aggressive OS guesses. Требует прав root. |
Ограничение (--osscan-limit) | sudo nmap -O --osscan-limit 192.168.1.0/24 | Определяет ОС только для хостов с подходящими портами (открытый+закрытый). | Экономит время при сканировании больших сетей. |
Агрессивное угадывание (--osscan-guess) | sudo nmap -O --osscan-guess 192.168.1.1 | Заставляет Nmap "догадываться" более агрессивно. | Используйте, когда -O не дало точного результата. Результаты — вероятностные. |
| Команда/Свитч | Пример использования | Описание и применение | Практический совет |
|---|
Шаблоны (-T<0-5>) | nmap -T4 192.168.1.0/24 | Шаблоны скорости. -T3 (Normal) — по умолчанию. -T4 (Aggressive) — рекомендуется для быстрых сетей. -T0/1 (Paranoid/Sneaky) — для скрытности. | Для внутренних сетей почти всегда -T4. Для обхода IDS пробуйте -T2. -T0/1 — задержка 5 мин/15 сек. |
Макс. повторные попытки (--max-retries) | nmap --max-retries 2 192.168.1.1 | Задает число повторных отправок probe. | Снижение с 10 (по умолчанию) до 2-3 сильно ускоряет сканирование filtered портов. |
Таймаут хоста (--host-timeout) | nmap --host-timeout 15m 192.168.1.0/24 | Прекращает сканирование хоста, если не завершилось за указанное время. | Предотвращает "зависание" на медленном или фильтрующем хосте. Формат: 30s, 10m, 2h. |
Минимальная скорость (--min-rate) | sudo nmap --min-rate 500 192.168.1.0/24 | Жестко задает минимальную скорость отправки пакетов (пакетов/сек). | --min-rate 1000 — агрессивно и быстро. sudo часто обязательно для высоких скоростей. |
8. Сценарии NSE (Nmap Scripting Engine)
| Категория/Свитч | Пример использования | Описание и применение | Практический совет |
|---|
Скрипты по умолчанию (-sC) | nmap -sC 192.168.1.1 | Запускает скрипты категории default. Безопасные, информативные скрипты для разведки. | Основа любого серьезного сканирования. Всегда используйте вместе с -sV. |
Выбор скрипта (--script) | nmap --script vuln 192.168.1.1 | Запускает указанный скрипт или все скрипты из категории (vuln, safe, exploit, auth). | Осторожно с intrusive-скриптами (vuln, exploit, dos). Могут нарушить работу сервиса. |
Аргументы скриптов (--script-args) | nmap --script http-headers --script-args http.useragent="Mozilla" 192.168.1.1 | Передает аргументы скриптам для настройки. | Мощный механизм. Например, для brute-скриптов: userdb=users.txt,passdb=passwords.txt. |
| Полезные скрипты (примеры) | | | |
| Перебор директорий | nmap -p80 --script http-enum 192.168.1.1 | Перебор общих веб-директорий (/admin, /backup). | Часто находит скрытые панели управления и бэкапы. |
| Аудит SSL/TLS | nmap -p443 --script ssl-enum-ciphers 192.168.1.1 | Оценка стека шифров, проверка на слабые протоколы (SSLv3). | Критично для compliance (PCI DSS). Показывает уязвимости к MITM. |
| Проверка уязвимости | nmap -p445 --script smb-vuln-ms17-010 192.168.1.1 | Проверка на конкретную уязвимость (EternalBlue, MS17-010). | Точечная проверка критических CVE. Используйте --script vuln для общего сканирования. |
| Брутфорс поддоменов | nmap --script dns-brute domain.com | Брутфорс поддоменов через перебор слов из словаря. | Только для легального тестирования своих активов! Расширяет поверхность атаки. |
9. Обход фаерволлов и IDS/IPS (Firewall/IDS Evasion & Spoofing)
| Команда/Свитч | Пример использования | Описание и применение | Практический совет |
|---|
Фрагментация (-f) | sudo nmap -f 192.168.1.1 | Разбивает TCP-заголовки на мелкие фрагменты, чтобы обойти простые DPI. | Часто комбинируется с --mtu <число> (должно быть кратно 8). |
Обманные IP (-D) | sudo nmap -D RND:10,ME 192.168.1.1 | Маскирует ваше сканирование среди обманных IP-адресов. | В логах цели будут десятки IP-сканеров. Не перестарайтесь с количеством. |
Спуфинг источника (-S) | sudo nmap -S 8.8.8.8 -e eth0 -Pn 10.0.0.1 | Отправляет пакеты с поддельным исходным IP. -e — интерфейс, -Pn — отключает пинг. | Цель отвечает на пакеты поддельного IP. Ваш хост ответы не увидит. Только для проверки реакции сети. |
Исходный порт (-g) | nmap -g 53 192.168.1.1 | Отправляет пакеты с указанного исходного порта (например, 53-DNS). | Эксплуатирует доверие устаревших фаерволлов к ответному трафику с доверенных портов. |
Случайные данные (--data-length) | nmap --data-length 500 192.168.1.1 | Добавляет к пакетам случайные данные, изменяя размер для обхода сигнатур IDS. | Может помочь против примитивных сигнатур, ищущих стандартные размеры пакетов Nmap. |
Неверная контрольная сумма (--badsum) | sudo nmap --badsum 192.168.1.1 | Отправляет пакеты с неверной TCP/UDP контрольной суммой. | Если получен ответ — перед вами IDS/IPS, а не фаервол. Метод обнаружения, а не обхода. |
10. Вывод результатов (Output)
| Команда/Свитч | Пример использования | Описание и применение | Практический совет |
|---|
Нормальный (-oN) | nmap -oN scan.txt 192.168.1.1 | Сохраняет вывод в обычном, читаемом человеком формате. | Основной формат для быстрого просмотра "глазами". |
XML (-oX) | nmap -oX scan.xml 192.168.1.1 | Сохраняет вывод в структурированном XML-формате. | Важнейший формат для отчетности и автоматизации. Может быть обработан другими программами, преобразован в HTML. |
Все форматы (-oA) | nmap -oA full_scan 192.168.1.0/24 | Сохраняет результаты сразу в трех форматах с заданным базовым именем. | Рекомендуемая лучшая практика. Имеет данные и для человека, и для машин. |
Подробный вывод (-v) | nmap -vv -oN scan.txt 192.168.1.1 | Увеличивает детализацию вывода. Показывает прогресс. | Всегда используйте хотя бы -v при сканировании вручную. Помогает понимать, что происходит. |
Показывать причину (--reason) | nmap --reason 192.168.1.1 | Показывает причину состояния порта (syn-ack, reset, no-response). | Крайне полезно для анализа. Позволяет отличить filtered из-за фаервола от filtered из-за сети. |
Только открытые (--open) | nmap --open 192.168.1.0/24 | Показывает только открытые (или возможно открытые) порты. | Идеально для быстрого просмотра уязвимой поверхности после сканирования большой сети. |
Продолжить сканирование (--resume) | nmap --resume partial_scan.xml | Продолжает прерванное сканирование из сохраненного XML-файла. | Спасает при обрыве длительных сканирований. Работает только с XML. |
11. Практические сценарии использования
| Сценарий | Пример команды | Пояснение и цель |
|---|
| Быстрая инвентаризация сети | sudo nmap -sn -T4 192.168.1.0/24 -oA network_inventory | Найти все живые хосты в сети быстро и сохранить результаты. |
| Базовый аудит хоста | sudo nmap -sV -sC -O -T4 <TARGET> -oA basic_audit | Сбор базовой информации: сервисы, версии, ОС, безопасные скрипты. |
| Полный аудит портов хоста | sudo nmap -p- -sV -sC -T4 --max-retries 1 <TARGET> -oA full_port_audit | Исчерпывающее сканирование всех TCP-портов с детализацией. Обязательно для критичных целей. |
| Поиск уязвимостей | sudo nmap -sV --script vuln <TARGET> -oA vuln_scan | Запуск скриптов, проверяющих на известные CVE. Будьте осторожны, может быть деструктивно. |
| Аудит веб-серверов в сети | nmap -p80,443,8000-9000,8080,8443 -sV --script http-security-headers,http-title <RANGE> -oA web_audit | Точечная проверка веб-портов на заголовки безопасности и заголовки страниц. |
| Стелс-сканирование | sudo nmap -sS -T2 -Pn --scan-delay 1s --data-length 50 -f <TARGET> | Медленное, фрагментированное сканирование с задержками для минимизации шансов обнаружения IDS. |
| Сканирование через SOCKS прокси | nmap -sT -Pn --proxies socks4://<PROXY_IP>:1080 <TARGET> | Проведение сканирования через прокси-сервер. Используется только TCP Connect scan (-sT). |
12. Правовые аспекты и лучшие практики
✅ Всегда получайте письменное разрешение перед сканированием любой инфраструктуры, которой вы не владеете или не управляете. Сканирование без разрешения является нарушением законов многих стран (например, ст. 272 УК РФ "Неправомерный доступ к компьютерной информации").
✅ Используйте Nmap в рамках санкционированного тестирования на проникновение (Penetration Test) или внутреннего аудита безопасности. Документируйте цели, время проведения и ответственных лиц.
✅ Соблюдайте принцип минимального воздействия. Начинайте с неинтрузивных методов (-sn, -sS, -sV), переходите к агрессивным (-A, --script vuln) только при явной необходимости и с учетом рисков для стабильности систем.
✅ Ограничивайте скорость и параллелизм (-T2, --max-rate) при сканировании производственных сетей, чтобы не вызвать перегрузку сетевого оборудования или целевых сервисов.
✅ Тщательно документируйте результаты. Используйте XML-вывод (-oX) для последующего анализа и включения в отчеты. Инструменты вроде ndiff помогают отслеживать изменения между сканированиями.
Примечание: Данная шпаргалка составлена на основе официальной документации Nmap (man nmap), книги "Nmap Network Scanning" (Gordon Lyon), а также лучших практик, опубликованных SANS Institute, Pentest Magazine, и опыта сообщества. Цель — образовательная и справочная. Ответственность за применение инструмента лежит на пользователе.