3.9к
0
0
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
Назад

Практическое использование Nmap для пентестеров

Время чтения 5 минут
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
3.9к
0
0
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники

Всем привет! На связи Александр Бархатов — DevSecOps-инженер и специалист по информационной безопасности. Любая атака на целевое устройство или анализ необходимой системы всегда начинается со сбора информации. Один из инструментов для этого — широко известная бесплатная утилита с открытым исходным кодом под названием Nmap.

Nmap представляет собой сетевой сканер, который ищет открытые порты, умеет идентифицировать операционную систему устройства, сервисы и их версии, которые запущены на сканируемом хосте. Также Nmap поддерживает скрипты для проверки сервисов на наличие уязвимостей.

В этой статья я покажу практические примеры, которые будут полезны для пентестеров, а также для всех, кому часто приходится собирать и анализировать информацию об устройствах в сети.

Все команды, которые я использую в статье, необходимо запускать от имени пользователя root или обычного пользователя с правами sudo.

Практическое использование Nmap для пентестеров

Установка Nmap

По умолчанию Nmap не установлен в большинстве дистрибутивов Linux. В этой статье в качестве дистрибутива я использую Ubuntu 22.04. Команду по установке можно также применять в других Debian-based дистрибутивах: Debian, Linux Mint, Astra Linux. Для установки выполняем в терминале следующую команду:

apt update && apt -y install nmap

После завершения установки выведем версию утилиты с помощью команды:

nmap -V

Если команда вернула строку, содержащую версию, например Nmap version 7.80 ( https://nmap.org ), то утилита успешно установлена.

Поиск и сканирование хостов

Если вам нужно найти активные хосты, то Nmap позволяет сделать это в заданной подсети. Для этого достаточно указать ее адрес, например:

nmap 172.17.0.1/24

Nmap нашел один активный хост с IP-адресом 172.17.0.1

Если вы не знаете полный адрес подсети, можно указать только его часть:

nmap 172.17.0.*

Также при сканировании подсети можно исключить один или несколько IP-адресов из списка сканирования:

nmap 172.17.0.1/24 --exclude 172.17.0.5

nmap 172.17.0.1/24 --exclude 172.17.0.5 172.17.0.10 172.17.0.21

По умолчанию Nmap сразу отображает открытые порты на сканируемом хосте. Если вам нужно узнать только доступен ли хост без указания списка портов, можно использовать опцию -sn:

nmap -sn 172.17.0.1/24

Если IP-адрес или доменное имя хоста уже известно, то для его сканирования достаточно указать адрес:

nmap 172.17.0.1

У хоста с IP-адресом 172.17.0.1 есть 4 открытых порта: 21 (ftp), 22 (ssh), 80 (http), 3306 (mysql)

Сканирование диапазона портов или конкретного порта

При запуске команды nmap без параметров утилита будет искать первые 1000 портов из максимальных 65 535. Чтобы сэкономить время, можно задать необходимый диапазон поиска, например с 1 по 50. Для этого добавим в команду опцию -p, после которой укажем нужные порты. Опция --open означает, что будут отображены только открытые порты:

nmap 172.17.0.1 -p1-50 --open

Nmap просканировал порты с 1 до 50 и нашел два открытых: 21 и 22

Если вам необходимо просканировать только определенные порты, их также можно обозначить в опции -p:

nmap -p 22,21 172.17.0.1

Определение операционной системы сканируемого хоста

Nmap умеет определять операционную систему сканируемого узла благодаря анализу работы стека TCP/IP. Чтобы при сканировании определить операционную систему, нужно использовать ключ -O:

nmap -O 172.17.0.1

В примере выше у просканированного хоста используется ОС семейства Linux. Отмечу, что функционал по определению версии не всегда работает корректно. Это связано с тем, что, после того как Nmap получил отпечаток (fingerprint) операционной системы, он сравнивает полученный результат со своей базой данных, в которой содержится более 2600 известных отпечатков ОС. Если в базе данных отсутствует такой отпечаток, то Nmap или не сможет определить ОС вовсе, или попытается использовать полученную информацию об открытых портах на сервере, чтобы попытаться ее идентифицировать.

Определение версий найденных сервисов

По умолчанию Nmap только отображает наименования найденных сервисов и не указывает программные компоненты и их версии. Чтобы отобразить версии и название ПО, надо использовать опции -sV:

nmap -sV 172.17.0.1

В отчете по сканированию появился столбец VERSION с названиями и версиями программных компонентов

Использование агрессивного сканирования 

При агрессивном сканировании Nmap определяет операционную систему, отображает версии используемых компонентов, а также производит трассировку (traceroute). Для запуска агрессивного сканирования нужно добавить опцию -A:

nmap -A 172.17.0.1

Сканирование без использования ping

Довольно часто на серверах бывает отключен протокол ICMP, по которому работает утилита ping. Чтобы не тратить время на выполнение ping при сканировании, можно использовать опцию -Pn

nmap -Pn 172.17.0.1

Сканирование хостов из файла

Если нужно просканировать большое количество хостов, можно вписать их в файл и передать его утилите Nmap. Предположим, у нас есть файл host_list.txt, в котором перечислены хосты. Запустим сканирование с опцией –iL:

nmap -iL host_list.txt

Записи в файле могут быть представлены как IP-адресами, так и доменными адресами. Разделять их нужно пробелами или переходами на новую строку.

Сканирование распространенных портов

У Nmap есть опция, которая позволяет просканировать только самые частые открытые порты. Для этой цели утилита использует файл со списком популярных портов, который по умолчанию находится в /usr/share/nmap/nmap-services. Например, если мы зададим для опции --top-ports число 10, то nmap будет сканировать первую десятку распространенных портов:

nmap --top-ports 10 172.17.0.1

Определение протоколов, которые поддерживает сканируемый хост

Nmap умеет определять, какие протоколы поддерживает хост. Это может быть полезно, если нужно узнать, заблокирован ли протокол, например при помощи firewall или другого ПО для обеспечения безопасности:

nmap -sO 172.17.0.1

На хосте с IP адресом 172.17.0.1 используются протоколы icmp и tcp

Сканирование всех портов определенного протокола

Если вам надо просканировать только все TCP-порты без других протоколов, то можно использовать опцию –sT:

nmap -sT 172.17.0.1

Если в выводе команда не отразила ни один порт, то у хоста нет открытых TCP-портов.

Аналогичная опция для поиска только UDP-портов — -sU:

nmap -sU 172.17.0.1

Запись результатов сканирования в файл

По умолчанию Nmap отображает результаты работы только в терминале. Для записи в файл нужно использовать одну из опций в зависимости от требуемого формата. Например, с помощью опции -oN запишем результаты в файл results.txt и проверим содержимое файла после завершения сканирования:

nmap -oN results.txt 172.17.0.1

Чтобы записать результаты работы Nmap в файл в формате .xml, надо использовать опцию –oX:

nmap -oX results.xml 172.17.0.1

Также Nmap поддерживает собственный формат данных под названием grepable, который содержит бо́льшую часть данных о целевом хосте в одной строке. Его разработали, чтобы облегчить работу с утилитой grep. Записать результаты работы Nmap в grepable-формате можно с помощью опции -oG:

nmap -oG results.txt 172.17.0.1

Использование скриптов

Nmap поддерживает работу с файлами скриптов на языке программирования Lua. Расширение файлов со скриптами — .nse.

В комплекте с Nmap уже есть некоторые скрипты, по умолчанию они хранятся в директории /usr/share/nmap/scripts.

Если вы собрали Nmap из исходного кода или стандартной директории со скриптами в вашей системе нет, то для поиска можно воспользоваться командой:

find / -type f -name "*.nse"

Чтобы использовать скрипт, нужно запустить утилиту с опцией --script, после которой указано имя файла скрипта или полный путь до него:

nmap --script ftp-brute.nse 172.17.0.1

или

nmap --script /usr/share/nmap/scripts/ftp-brute.nse 172.17.0.1

Также можно добавить регулярные выражения, чтобы запустить и использовать сразу несколько скриптов. Например, команда для старта всех скриптов, имена которых начинаются с ssh:

nmap -d --script "ssh*" 172.17.0.1

Заключение

Nmap представляет собой мощный инструмент для поиска открытых портов, а также для идентификации используемых программных компонентов. Одно из главных достоинств Nmap — поддержка скриптов, благодаря которым существенно расширяется функционал программы. Это незаменимый инструмент для первоначальной разведки и сбора данных перед подготовкой к потенциальной атаке или для обеспечения защиты.

Комментарии0
Тоже интересно
Комментировать
Поделиться
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники