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:
Скрипты также можно скачать с помощью 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 |
Предоставляют информацию о том, какие уязвимости могут быть эксплуатированы |
Запомни!
Некоторые скрипты могут нанести вред системе, одни будут брутфорсить, другие ддосить, третьи эксплуатировать различные уязвимости.
Запускать скрипты нужно с умом, чтобы не порушить сервис.
Посмотреть то, что делает скрипт можно просто открыв его в удобном редакторе или пейджере.