A Complete Guide to Nmap

Professional pentester, technical writer, telegram channel owner
Эта статья написана, чтобы стать максимально подробным гайдом по 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; -pU:53,111,T:21-25,80,8080 (U - UDP, T - TCP);
-p http, https
-F: Быстрое сканирование - Сканирование ограниченного количества портов (100 портов)
-r: Сканировать порты последовательно - не использовать случайный порядок портов
--top-ports <количество_портов>: Сканировать <количество_портов> наиболее распространенных портов
Пример: --top-ports 1000 ; --top-ports 5000

Определение служб и их версий
-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,443,8080,8443,8081 -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 -oA nmap.scan -Pn –min-rate 3000 –host-timeout 2m –max-retries 3 --script vulners --min-parallelism 10 : Данный режим сканирования больше подходит для лаб, тестовых заданий, CTF и в случаях если не применяются никакие средства защиты от сетевого сканирования. Данный скан будет максимально агрессивным и быстрым; агрессивное распознование сервисов; без ping; nmap будет считать, что хост/ы жив/ы; минимальная скорость сканирования: 3000; сканирование OS и скрипты по умолчанию; если хост не отвечает 2 минуты, то он пропускается; максимум 3 попытки для сканирования; запуститься скрипт vulners - скрипт ищет уязвимости по найденным сервисам.
Дополнительный материал
Отличная подробка репозиторием с различными NSE скриптами под разным цели, системы, CVE и т.д.




