Перейти к содержанию

nmap


nmap - Утилита для исследования сети и сканер портов.

Часто используемые ключи

-v - Подробный режим вывода результатов. Для повышения уровня подробности нужно увеличить количество v

-d - Debug режим.

--reason - Отображает информацию о причине принятия решения о состоянии порта

-O - Определение операционной системы хоста, через анализ полученных ответных пакетов и сравнения их с имеющейся базой ОС.

-sV - Определение версии запущенного сервиса. Работает по такому же принципу как и обнаружение ОС. Кроме того, также полезно запускать для тех портов которые помечены open | filtered для того что бы попытаться однозначно определить его состояние.
Можно задавать степень агрессивности определения версий от 0 до 9.
По умолчанию, при использовании -sV или --version lite выбирается уровень 2. Для выбора максимального уровня --version-all, для других уровней: --version-intensity $LEVEL

Запомни!

Для определения версии запущенного сервиса, nmap должен обязательно установить полное TCP соединение.

-A - Агрессивный режим. Равнозначен использованию ключей -O, -sV, -sC, --tracerout

-p - Задать определенный порт. Также можно передавать диапазон и диапазон с типом сканирования (TCP/UDP) или просканировать все порты -p-.

Ключи определяющие методы обнаружения хостов

-sL - Составление списка хостов

-sP -sn - Ping обнаружение, без сканирования портов.

-PR - ARP обнаружение, применяемое в локальной сети.

-PE - ICMP обнаружение (ICMP Type 8) (echo request).

-PP - ICMP Timestamp обнаружение (ICMP Type 13) (может быть полезно при блокировании echo request)

-PM - ICMP Mask обнаружение (ICMP Type 17) (может быть полезно при блокировании echo request)

Ключи определяющие тип сканирования

-sL - Составление списка хостов

-sn - Ping сканирование, без сканирования портов. Так же смотри -sP

-sS - TCP SYN сканирование, так же известно как сканирование через полуоткрытое соединение. Является быстрым и незаметным методом позволяющий миновать firewall'ы

К сведению

Тип сканирования -sS применяется по умолчанию, в случае если nmap был запущен через sudo

-sT - TCP сканирование через системный вызов connect. Хуже чем -sS, оставляет следы, так как полностью устанавливает соединение, но может быть запущен без root прав

К сведению

Тип сканирования -ST применяется по умолчанию, в случае если nmap был запущен без sudo

-sU - UDP сканирование, применяется для обнаружения UDP сервисов (DNS, DHCP, SNMP и т.д.). Гораздо медленнее TCP сканирования, в виду того, что отправляется пустая UDP датаграмма на которую ожидается ответ и если ответа нет, то порт скорее всего открыт. Следует помнить, что так как UDP может потерятся, датаграммы отправляются по нескольку раз.

Можно комбинировать с TCP сканированием. В виду того, что UDP сканирование довольно медленное, имеет смысл использовать его вместе с дополнительным ключем --top-ports <кол-во портов>, который просканирует наиболее популярные <кол-во портов>UDP портов.

Дополнительная информация по выбору типа сканирования

В случае сканирования из под sudo внутри локальной сети, используется сканирование через ARP запросы. В случае сканирования из под sudo не в локальной сети, используется ICMP сканирование, TCP ACK сканирование для 80 портов, TCP SYN сканирование для 443 портов.

-sA - TCP ACK сканирование. Посылает ACK флаг в ответ на который ожидает получить RST. Не может однозначно определить состояние порта, однако получение значения unfiltered означает, что данный порт не блокируется файрволом.

-sW - TCP Window сканирование. Принцип аналогичен TCP ACK, только на неблокируемый файрволом порт показывается как closed

Обрати внимание

TCP ACK и TCP Window сканирования полезны лишь для получения информации о правилах файрвола. Кроме того, не блокированный файрволом порт не означает, что за таким портом обязательно закреплён какой-либо сервис.

-sN, -sF, -sX - Null Scan, FIN Scan, Xmas Scan - Очень похожие типы TCP сканирования, по идее, более скрытые относительно того же TCP SYN, но это не точно. могут быть полезны в редких случаях.

--scanflags - с помощью данного ключа предоставляется возможность самостоятельно задать TCP флаги: URG, ACK, PSH, RST, SYN, FIN

-S $SPOOFEED_IP - Сканирование с подменой IP адреса. В качестве поля source IP будет задан изменённый адрес. Ответы естественно будут отправлятся на такой подменный адрес. Атакующий должен иметь к нему доступ для получения ответных сообщений.
Как правило, для сканирования с подменой адреса необходимо задать дополнительные ключи: -e $ETH_INTERFACE и -Pn для явного указания интерфейса с которого будет проводится сканирование и запрета отправлять ICMP. А для подмены MAC адреса при работе в локальной сети используется ключ --spoof-mac $SPOOFED_MAC

-D $DECOY_IP1,$DECOY_IP2,..,$DECOY_IPn,ME - сканирование с приманкой. Развивает идею подмены IP адреса, отправляет множество пакетов в source IP которых будут указаны адреса приманок (decoy). ME означает адрес атакующего. Идея состоит в том, чтобы попытаться запутать IDS/IPS системы.

-sI $IDDLE_IP - зомби сканирование (или idle scan) - интересный способ попытки обхода IDS/IPS заключающийся в следующем: в сети находится сетевое устройство которое не ведет активной сетевой деятельности (условный принтер или телефон отпускника) nmap тригерит его (направляя TCP SYN) в ответ получет RST и запоминает порядковый номер полученного IP пакета. Далее nmap сканирует целевую машину подставляя в source IP адрес idle устройства, а затем снова опрашивает idle устройство для сравнения порядкового номера полученного IP пакета. Если номер больше чем на 1 - цель не ответила => порт закрыт или блокируется, если номер > 2 цель ответила => порт открыт.

Прочие ключи

-Pn- Сразу же приступить к сканированию портов, минуя icmp запросы. Полезно в тех сетях, в которых icmp блокируется.

-T{0-5} - Задание скорости сканирования, где: 0 самый медленный, 5 самый быстрый. Чем медленнее, тем меньше возможность обнаружения сканирования. 0 и 1 позволяют обходить IDS, 3 - по умолчанию.

--max-rate - Максимальное количество одновременно посылаемых пакетов

-f - Фрагментирует пакеты на части по 8 бит, что является полезным для обхода IDS/IPS.

--mtu - Позволяет задать mtu пакета, кратное 8, что тоже может быть полезно для обхода IDS/IPS

--scan-delay - Понятно из названия, понятно для чего.

--badsum - Интересный ключ который записывает неверную контрольную сумму пакета. Некоторые файрволы могут среагировать.

-R - nmap опросит DNS серверы даже для отключенных хостов.

-n - не использовать DNS lookup

Ключи определяющие формат выходного файла

-oN $FILE_NAME - нормальный вывод в файл

-oX $FILE_NAME - вывод в xml файл

-oG $FILE_NAME - вывод в grepable файл работать с которым удобно через стандартные инструменты работы с текстом в shell: grep, awk, cut, sed и т.д.

-oA $DIR_NAME - сохранение вывода во всех форматах в указанной директории

Поддерживаются шорткаты %T - время, $D - дата

Обрати внимание

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

Интерпретация вывода

State Description
Open Порт открыт
Close Порт закрыт
Filtered Порт недоступен и скорее всего блокируется файрволом
Unfiltered Порт доступен, но точное состояние не известно
Open|Filtered Либо открыт, либо фильтруется. Точное состояние неизвестно
Close|Filtered Либо закрыт, либо фильтруется. Точное состояние неизвестно

Скрипты

--script Использование скриптов. Подробнее в man. Скрипты можно найти на nmap.org и в /usr/share/nmap/scripts. Просмотреть имеющиеся скрипты можно из файла /usr/share/nmap/scripts/script.db

Для получения информации о скрипте можно использовать ключ --script-help, к примеру следующий код покажет информацию обо всех скриптах в которых фигурирует ssh:

nmap --script-help ssh*

Скрипты также можно скачать с помощью wget:

sudo wget -O /usr/share/nmap/scripts/<script-name>.nse \
<https://svn.nmap.org/nmap/scripts/><script-name>.nse 
# После скачивания скрипта, нужно обновить БД скриптов
nmap --script-updatedb

Скрипты можно запускать как по одному, так и целыми группами сразу. Для запуска группы используется следующая команда: --script GROUP_NAME

Категория скрипта Описание
auth Скрипты связанные с аутентификацией
broadcast Определение хостов с помощью broadcast сообщений
brute Используют проверки типа брутфорс для аутентификационных данных
default Стандартные скрипты, аналог ключа -sC
discovery Извлекают доступную информацию (таблицы БД, DNS имена)
dos Обнаруживают уязвимость к DDoS
exploit Пытаются эксплуатировать различные уязвимые сервисы
external Проверяют с помощью сторонних сервисов (GeoPlugin, Virustotal)
fuzzer Запускают фаззинг атаки
intrusive Запускают брутфорс атаки и различные эксплойты
malware Сканируют на наличие бэкдоров
safe Скрипты из этой категории точно не принесут вреда исследуемому хосту
version Предоставляют информацию о версиях сервисов
vuln Предоставляют информацию о том, какие уязвимости могут быть эксплуатированы

Запомни!

Некоторые скрипты могут нанести вред системе, одни будут брутфорсить, другие ддосить, третьи эксплуатировать различные уязвимости.
Запускать скрипты нужно с умом, чтобы не порушить сервис.

Посмотреть то, что делает скрипт можно просто открыв его в удобном редакторе или пейджере.