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