A Complete Guide to Nmap
Эта статья написана, чтобы стать максимально подробным гайдом по 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 — скрипт ищет уязвимости по найденным сервисам.