A Complete Guide to Nmap

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 - скрипт ищет уязвимости по найденным сервисам.

Report Page