A Complete Guide to Nmap

Sergey Zybnev
7 min readSep 30, 2022

--

Эта статья написана, чтобы стать максимально подробным гайдом по NMAP

Что это такое? Как им пользоваться? Оптимизация процесса сканирования. Примеры обычного и продвинутого сканирования nmap. Советы по его использования при разных обстоятельствах.

Nmap — это очень популярный сканер сети с открытым исходным кодом, который может использоваться как в Windows, так и в Linux. Программа Nmap или Network Mapper была разработана Гордоном Луоном и на данный момент используется специалистами по безопасности и системными администраторами по всему миру.

Эта программа помогает системным администраторам очень быстро понять какие компьютеры подключены к сети, узнать их имена, а также посмотреть какое программное обеспечение на них установлено, какая операционная система и какие типы фильтров применяются. Функциональность программы может быть расширена за счет собственного скриптового языка, который позволяет администраторам автоматизировать много действий.

А как мы используем nmap обычно?

nmap 192.168.1.1 — Сканирование только 1 IP

nmap 192.168.1.1 192.168.2.1 — Сканирование несколько IP

nmap 192.168.1.1–254 — Сканирование список IP адресов

nmap scanme.nmap.org — Сканирование домена

nmap 192.168.1.0/24 — Сканирование с указанием CIDR

А что здесь не так спросите вы? Всё не так! NMAP имеет поистине огромные возможности в расширении своего функционала в зависимости от того, чего вы хотите добиться.

Необходимые базовые флаги для сканирования

-iL <list.txt>: Сканирования список целей(IP, домены)

-exclude <IP/s>: Исключить указанный цели из сканирования

-excludefile <файл>: Исключить указанный цели из списка для сканирования

Дальше мы пройдёмся по отдельным аспектам сканирования и какие флаги/аргументы нужно применять.

Техники сканирования

sS/sT/sA/sW/sM: сканирование с использованием системного вызова TCP SYN/Connect()/ACK/Window/Maimon

-sU: UDP сканирование

-sN/sF/sX: TCP Null, FIN и Xmas сканирование

— scanflags <флаги>: Указать собственные TCP флаги

-sI <зомби_хост[:порт]>: “Ленивое” (Idle) сканирование

-sO: Сканирование IP протокола

— traceroute: Трассировка пути к хосту

— reason: Выводить причину, почему Nmap установил порт в определенном состоянии

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

-sL: Сканирование с целью составления списка — просто составить список целей для сканирования

-sP: Пинг сканирование — просто определить, работает ли хост

-Pn: Пропустить ping хостов. nmap будет считать, что все хосты UP

-PS/PA/PU [список_портов]: TCP SYN/ACK или UDP пингование заданных хостов

-PE/PP/PM: Пингование с использованием ICMP-эхо запросов, запросов временной метки и сетевой маски

-PO [список_протоколов]: Пингование с использованием IP протокола

-PR: ARP сканирование сети

-n: Никогда не делать DNS resolution

— dns-servers <сервер1[,сервер2],…>: Задать собственные DNS сервера для разрешения доменных имён

Определение портов и порядка сканирования

-p- : Сканирование всех портов (1–65535)

-p <диапазон_портов>: Сканирование только определенных портов

Пример: -p22; -p1–65535; -p U:53,111,137,T:21–25,80,139,8080 (U — UDP, T — TCP); -p http, https

-F: Быстрое сканирование — Сканирование ограниченного количества портов (100 портов)

-r: Сканировать порты последовательно — не использовать случайный порядок портов

— top-ports <количество_портов>: Сканировать <количество_портов> наиболее распространенных портов

Пример: — top-ports 100 ; — top-ports 1000

Определение служб и их версий

-sV: Исследовать открытые порты для определения информации о службе/версии

-sV — version-intensity <уровень>: Устанавливать от 0 (легкое) до 9 (пробовать все запросы)

-sV — version-light: Ограничиться наиболее легкими запросами (интенсивность 2)

-sV — version-all: Использовать каждый единичный запрос (интенсивность 9)

Определение OS

-O: Активировать функцию определения ОС

-O — osscan-limit: Использовать функцию определения ОС только для “перспективных” хостов

-O — osscan-guess: Угадать результаты определения ОС

-O -max-os-tries: Сколько раз nmap будет пытаться определить OS

Пример: -O -max-os-tries 1

-A: Включает обнаружение ОС, определение версии, сканирование при помощи скриптов и traceroute.

Управление временем и производительностью

Опции, принимающие аргумент <время>, задаются в миллисекундах, пока вы не добавите ‘s’ (секунды), ‘m’ (минуты), или ‘h’ (часы) к значению.

-T0: Параноик (0) Уклонение от системы обнаружения вторжений

-T1: Незаметный (1) обход системы обнаружения вторжений

-T2: Вежливый (2) замедляет сканирование, чтобы использовать меньшую пропускную способность и меньше ресурсов целевой машины

-T3: Нормальный (3) — скорость по умолчанию

-T4: Агрессивный (4) скорость сканирования; предполагает, что вы находитесь в достаточно быстрой и надежной сети

-T5: Безумный (5) ускоряет сканирование; предполагает, что вы находитесь в чрезвычайно быстрой сети

— min-rate <число>: Посылать запросы с интенсивностью не меньше чем <число> в секунду

— max-rate <число>: Посылать запросы с интенсивностью не больше чем <число> в секунду

— scan-delay/ — max-scan-delay <время>: Регулирует задержку между запросами

— host-timeout <время>: Прекращает сканирование целей, которые не отвечают какое-то время

— max-retries <количество_попыток>: Задает максимальное количество количество попыток на запрос

— min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <время>: Регулирует время ожидания ответа на запрос

— min-parallelism/max-parallelism <количество_запросов>: Регулирует распараллеливание запросов

— min-hostgroup/max-hostgroup <кол_хостов>: Установить размер групп для параллельного сканирования

Обход Firewall/IDS

-f: Отправка маленьких IP пакетов(включая ping-сканирование), что может помочь обойти фильтрацию пакетов

— mtu <значение>: Фрагментировать пакеты с указаннием конкретного значения фрагментации

-D <фикт_хост1,фикт_хост2[,ME],…>: Маскировка сканирования с помощью фиктивных хостов

-S <IP_адрес>: Изменить исходный IP адрес

-e <интерфейс>: Использовать конкретный сетевой интерфейс

-g/ — source-port <номер_порта>: Изменить исходный номер порта

— data-length <число>: Добавить произвольные данные к посылаемым пакетам. Число это количество байт

— ip-options <опции>: Посылать пакет с заданным ip опциями

— ttl <значение>: Установить TTL запроса (time-to-live (время жизни пакета))

— spoof-mac <MAC_адрес/префикс/название производителя>: Задать собственный MAC адрес

— badsum: Посылать пакеты с фиктивными TCP/UDP контрольными суммами

-proxies: Передача соединений через HTTP/SOCKS4 прокси

Пример команды для Обход Firewall/IDS

nmap -f -T0 -n -Pn -data-length 200 -D 192.168.1.101,192.168.1.102,192.168.1.103,192.168.1.23 192.168.1.1

Вывод результатов

oN/-oX/-oS/-oG <файл>: Выводить результаты нормальном виде, XML, s|<rIpt kIddi3 и Grepable формата вывода, соответственно, в заданный файл

-oA <базовове_имя_файла>: Использовать сразу три основных формата вывода

-v: Увеличить уровень вербальности (задать дважды или более для увеличения эффекта)

-d[уровень]: Увеличить или установить уровень отладки (до 9)

— open: Показывать только открытые (или возможно открытые) порты

— packet-trace: Отслеживание принятых и переданных пакетов

— iflist: Вывести список интерфейсов и роутеров (для отладки)

— log-errors: Записывать ошибки/предупреждения в выходной файл нормального режима

— append-output: Добавлять выходные данные в конец, а не перезаписывать выходные файлы

— resume <имя_файла>: Продолжить прерванное сканирование

— stylesheet <путь/URL>: Устанавливает XSL таблицу стилей для преобразования XML вывода в HTML

— webxml: Загружает таблицу стилей с Nmap.Org

— no-stylesheet: Убрать объявление XSL таблицы стилей из XML

-reason: Вывести причину, по которой порт находится в определенном состоянии, вывод такой же, как и -vv

NSE скрипты

-sC / -script default: запускает стандартные скрипты

-script: можно указать какой конкретно скрипт/ы использовать

Пример: nmap 192.168.1.1 -script=http,banner; nmap 192.168.1.1 -script=http*

-script-args: NSE скрипты с аргументами

Пример: nmap -script snmp-sysdescr -script-args snmpcommunity=admin 192.168.1.1

Теперь перейдем к разным полезным командами

Примеры nmap команд для вывод/обработки результатов

nmap -p80 -sV -oG — -open 192.168.1.1/24 | grep open 

#Сканирование на наличие веб-серверов и grep на каких IP-адресах запущены веб-серверы

nmap -iR 10 -n -oX out.xml | grep “Nmap” | cut -d “ “ -f5 > live-hosts.txt 

#Генерация списка IP живых хостов

nmap -iR 10 -n -oX out2.xml | grep “Nmap” | cut -d “ “ -f5 >> live-hosts.txt 

#Добавление IP в список живых хостов

ndiff scanl.xml scan2.xml 

#Сравнение результатов двух сканирований с помощью ndiff

xsltproc nmap.xml -o nmap.html 

#Конвертация xml в html

Примеры nmap команд для сканирования

nmap 192.168.1.1–1/24 -PR -sn -vv 

#ARP сканирование локальной сети

nmap -sV — top-ports 5000 -T1 -reason -oG nmap.scan -f -n -Pn -data-length 200 -A — mtu 30 — badsum 

#Скрытное сканирование топ 5000 популярных портов, без ping и резолва DNS; добавление рандомых 200 байт; определение OS; указание причины, почему nmap считает, что порт в том или ином состоянии; фрагментация пакетов; отправка пакетов с фиктивными TCP/UDP контрольными суммами

nmap -sV — version-all -p- -T5 -reason -oG nmap.scan -Pn -min-rate 3000 -host-timeout 2m -max-retries 3 — script vulners 

#Данный режим сканирования больше подходит для лаб, тестовых заданий, CTF и в случаях если не применяются никакие средства защиты от сетевого сканирования. Данный скан будет максимально агрессивным и быстрым; агрессивное распознование сервисов; без ping; nmap будет считать, что хост/ы жив/ы; минимальная скорость сканирования: 3000; сканирование OS и скрипты по умолчанию; если хост не отвечает 2 минуты, то он пропускается; максимум 3 попытки для сканирования; запуститься скрипт vulners — скрипт ищет уязвимости по найденным сервисам.

--

--

Sergey Zybnev

Web Pentester. I have a background in design, web development. Every day learning something new.