Как пользоваться Nmap для сканирования сети. Справочное руководство Nmap (Man Page) Показывать Причину Состояния Порта

  • Обнаружение служб и их версий
  • Определение ОС
  • Опции управления временем и производительностью
  • Различные опции
  • Взаимодействие во время выполнения
  • Примеры
  • Информация по скриптам Nmap (на английском):

    Скрыто от гостей


    Самая последня версия документации по Nmap (на английском):

    Скрыто от гостей


    Официальная книга по Nmap от создателей Nmap (на английском):

    Скрыто от гостей

    Преамбула

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

    Nmap (“Network Mapper”) это утилита с открытым исходным кодом для исследования сети и проверки безопасности. Она была разработана для быстрого сканирования больших сетей, хотя прекрасно справляется и с единичными целями. Nmap использует сырые IP пакеты оригинальными способами, чтобы определить какие хосты доступны в сети, какие службы (название приложения и версию) они предлагают, какие операционные системы (и версии ОС) они используют, какие типы пакетных фильтров/брандмауэров используются и еще дюжины других характеристик. В тот время как Nmap обычно используется для проверки безопасности, многие сетевые и системные администраторы находят ее полезной для обычных задач, таких как контролирование структуры сети, управление расписаниями запуска служб и учет времени работы хоста или службы.

    Выходные данные Nmap это список просканированных целей с дополнительной информацией по каждой в зависимости от заданных опций. Ключевой информацией является “таблица важных портов”. Эта таблица содержит номер порта, протокол, имя службы и состояние. Состояние может иметь значение open (открыт), filtered (фильтруется), closed (закрыт) или unfiltered (не фильтруется). Открыт означает, что приложение на целевой машине готово для установки соединения/принятия пакетов на этот порт. Фильтруется означает, что брандмауэр, сетевой фильт или какая-то другая помеха в сети блокирует порт, и Nmap не может установить открыт этот порт или закрыт. Закрытые порты не связаны ни с каким приложение, так что они могут быть открыты в любой момент. Порты расцениваются как не фильтрованные, когда они отвечают на запросы Nmap, но Nmap не может определить открыты они или закрыты. Nmap выдает комбинации открыт|фильтруется и закрыт|фильтруется, когда не может определить, какое из этих двух состояний описывает порт. Эта таблица также может предоставлять детали о версии программного обеспечения, если это было запрошено. Когда осуществляется сканирование по IP протоколу (-sO), Nmap предоставляет информацию о поддерживаемых IP протоколах, а не об открытых портах.

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

    Типичное сканирование с использованием Nmap показано в Примере 1. Единственные аргументы, использованные в этом примере это -A, для определения версии ОС, сканирования с использованием скриптов и трассировки; -T4 для более быстрого выполнения; затем два целевых хоста.

    Пример 1. Типичный пример сканирования с помощью Nmap:

    # nmap -A -T4 scanme.nmap.org playground Starting Nmap (https://nmap.org/) Interesting ports on scanme.nmap.org (64.13.134.52): (The 1663 ports scanned but not shown below are in state: filtered) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 3.9p1 (protocol 1.99) 53/tcp open domain 70/tcp closed gopher 80/tcp open http Apache httpd 2.0.52 ((Fedora)) 113/tcp closed auth Device type: general purpose Running: Linux 2.4.X|2.5.X|2.6.X OS details: Linux 2.4.7 - 2.6.11, Linux 2.6.0 - 2.6.11 Interesting ports on playground.nmap.org (192.168.0.40): (The 1659 ports scanned but not shown below are in state: closed) PORT STATE SERVICE VERSION 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn 389/tcp open ldap? 445/tcp open microsoft-ds Microsoft Windows XP microsoft-ds 1002/tcp open windows-icfw? 1025/tcp open msrpc Microsoft Windows RPC 1720/tcp open H.323/Q.931 CompTek AquaGateKeeper 5800/tcp open vnc-http RealVNC 4.0 (Resolution 400x250; VNC port: 5900) 5900/tcp open vnc VNC (protocol 3.8) MAC Address: 00:A0:CC:63:85:4B (Lite-on Communications) Device type: general purpose Running: Microsoft Windows NT/2K/XP OS details: Microsoft Windows XP Pro RC1+ through final release Service Info: OSs: Windows, Windows XP Nmap finished: 2 IP addresses (2 hosts up) scanned in 88.392 seconds

    Сводка опций

    Использование:
    nmap [Тип(ы) сканирования] [Опции] {заданные_цели}

    ОПРЕДЕЛЕНИЕ ЦЕЛИ СКАНИРОВАНИЯ:

    Может работать с именами хостов, IP адресами, сетями и т.д.
    Например: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
    -iL <ввести_имя_файла>: Импорт из списка хостов/сетей
    -iR <количество хостов>: Выбор случайных целей
    –exclude : Исключить хосты/сети
    –excludefile <файл_с_исключениями>: Исключить список из файла

    ОБНАРУЖЕНИЕ ХОСТОВ:

    SL: Сканирование с целью составления списка – просто составить список целей для сканирования
    -sn: Пинг сканирование – просто определить, работает ли хост
    -Pn: Расценивать все хосты как работающие – пропустить обнаружение хостов
    -PS/PA/PU/PY[список_портов]: TCP SYN/ACK, UDP или SCTP пингование заданных хостов
    -PE/PP/PM: Пингование с использованием ICMP эхо запросов, запросов временной метки и сетевой маски
    -PO[список_протоколов]: Пингование с использованием IP протокола
    -n/-R: Никогда не производить DNS разрешение/Всегда производить разрешение [по умолчанию: иногда]
    –dns-servers <сервер1[,сервер2],…>: Задать собственные DNS сервера
    –system-dns: Использовать системный DNS преобразователь
    –traceroute: Провести трассировку (проследить путь) до каждого хоста

    РАЗЛИЧНЫЕ ПРИЕМЫ СКАНИРОВАНИЯ:

    SS/sT/sA/sW/sM: TCP SYN/с использованием системного вызова Connect()/ACK/Window/Maimon сканирования
    -sU: UDP сканирование
    -sN/sF/sX: TCP Null, FIN и Xmas сканирования
    –scanflags <флаги>: Задать собственные TCP флаги
    -sI <зомби_хост[:порт]>: "Ленивое" (Idle) сканирование
    -sY/sZ: SCTP INIT/COOKIE-ECHO сканирование
    -sO: Сканирование IP протокола
    -b : FTP bounce сканирование

    ОПРЕДЕЛЕНИЕ ПОРТОВ И ПОРЯДКА СКАНИРОВАНИЯ:

    P <диапазон_портов>: Сканирование только определенных портов
    Пример: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
    -F: Быстрое сканирование – Сканирование ограниченного количества портов
    -r: Сканировать порты последовательно – не использовать случайный порядок портов
    –top-ports <количество_портов>: Сканировать <количество_портов> наиболее распространенных портов
    –port-ratio <рейтинг>: Сканировать порты с рейтингом большим чем <рейтинг>

    ОПРЕДЕЛЕНИЕ СЛУЖБ И ИХ ВЕРСИЙ:

    SV: Исследовать открытые порты для определения информации о службе/версии
    –version-intensity <уровень>: Устанавливать от 0 (легкое) до 9 (пробовать все запросы)
    –version-light: Ограничиться наиболее легкими запросами (интенсивность 2)
    –version-all: Использовать каждый единичный запрос (интенсивность 9)
    –version-trace: Выводить подробную информацию о процессе сканирования (для отладки)

    СКАНИРОВАНИЕ С ИПОЛЬЗОВАНИЕМ СКРИПТОВ:

    SC: эквивалентно опции –script=default
    –script=: это разделенный запятыми список директорий, файлов скриптов или категорий скриптов
    –script-args=<имя1=значение1,[имя2=значение2,…]>: Передача аргументов скриптам
    –script-args-file=filename: Передача NSE скриптам аргументов в файле
    –script-trace: Выводить все полученные и отправленные данные
    –script-updatedb: Обновить базу данных скриптов
    –script-help=: Показ помощи о скриптах. разделённый запятой список скриптов или список категорий скриптов.

    ОПРЕДЕЛЕНИЕ ОС:

    O: Активировать функцию определения ОС
    –osscan-limit: Использовать функцию определения ОС только для "перспективных" хостов
    –osscan-guess: Угадать результаты определения ОС

    ОПЦИИ УПРАВЛЕНИЯ ВРЕМЕНЕМ И ПРОИЗВОДИТЕЛЬНОСТЬЮ:

    Опции, принимающие аргумент <время>, задаются в миллисекундах, пока вы не добавите "s" (секунды), "m" (минуты), или "h" (часы) к значению (напр. 30m).
    -T<0-5>: Установить шаблон настроек управления временем (больше – быстрее)
    –min-hostgroup/max-hostgroup <кол_хостов>: Установить размер групп для параллельного сканирования
    –min-parallelism/max-parallelism <кол_хостов>: Регулирует распараллеливание запросов
    –min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <время>: Регулирует время ожидания ответа на запрос
    –max-retries <количество_попыток>: Задает максимальное количество повторных передач запроса
    –host-timeout <время>: Прекращает сканирование медленных целей
    –scan-delay/–max-scan-delay <время>: Регулирует задержку между запросами
    –min-rate <число>: Посылать запросы с интенсивностью не меньше чем <число> в секунду
    –max-rate <число>: Посылать запросы с интенсивностью не больше чем <число> в секунду

    ОБХОД БРАНДМАУЭРОВ/IDS:

    F; –mtu <значение>: Фрагментировать пакеты (опционально с заданным значениме MTU)
    -D <фикт_хост1,фикт_хост2[,ME],…>: Маскировка сканирования с помощью фиктивных хостов
    -S : Изменить исходный адрес
    -e <интерфейс>: Использовать конкретный интерфейс
    -g/–source-port <номер_порта>: Использовать заданный номер порта
    –proxies : Ретранслировать соединения через прокси HTTP/SOCKS4
    –data-length <число>: Добавить произвольные данные к посылаемым пакетам
    –ip-options <опции>: Посылать пакет с заданным ip опциями
    –ttl <значение>: Установить IP поле time-to-live (время жизни)
    –spoof-mac : Задать собственный MAC адрес
    –badsum: Посылать пакеты с фиктивными TCP/UDP/SCTP контрольными суммами

    ВЫВОД РЕЗУЛЬТАТОВ:

    ON/-oX/-oS/-oG Выводить результаты нормального, XML, s| -oA <базовове_имя_файла>: Использовать сразу три основных формата вывода
    -v: Увеличить уровень вербальности (задать дважды или более для увеличения эффекта)
    -d: Увеличить или установить уровень отладки (до 9)
    –reason: Показать причину нахождения порта в определённом состоянии
    –open: Показывать только открытые (или возможно открытые) порты
    –packet-trace: Отслеживание принятых и переданных пакетов
    –iflist: Вывести список интерфейсов и роутеров (для отладки)
    –log-errors: Записывать ошибки/предупреждения в выходной файл нормального режима
    –append-output: Добавлять в конец, а не перезаписывать выходные файлы
    –resume <имя_файла>: Продолжить прерванное сканирование
    –stylesheet <путь/URL>: Устанавливает XSL таблицу стилей для преобразования XML вывода в HTML
    –webxml: Загружает таблицу стилей с Nmap.Org
    –no-stylesheet: Убрать объявление XSL таблицы стилей из XML

    РАЗЛИЧНЫЕ ОПЦИИ:

    6: Включить IPv6 сканирование
    -A: Активировать функции определения ОС и версии, сканирование с использованием скриптов и трассировку
    –datadir <имя_директории>: Определяет место расположения файлов Nmap
    –send-eth/–send-ip: Использовать сырой уровень ethernet/IP
    –privileged: Подразумевать, что у пользователя есть все привилегии
    –unprivileged: Подразумевать, что у пользователя нет привилегий для использования сырых сокетов
    -V: Вывести номер версии
    -h: Вывести эту страницу помощи

    ИНТЕРАКТИВНЫЕ КОМАНДЫ:

    СПРАВКА: Не будет работать с “sudo nmap”, поэтому используйте “sudo –i”
    Во время работы вы можете делать запросы в nmap следующими ключами:
    ? Показать эту информацию
    v/V увеличить/уменьшить вербальность
    d/D увеличить/уменьшить отладку
    p/P включить/отключить трассировку пакетов
    и другие ключи, которые будут напечатаны в статусе

    ПРИМЕРЫ:
    Определение цели сканирования

    В командной строке Nmap все, что не является опцией (или аргументом опции), рассматривается как цель сканирования. В простейшем случае для сканирования используется IP адрес или сетевое имя целевой машины.

    Иногда необходимо просканировать целую сеть. Для этого Nmap поддерживает CIDR адресацию. Вы можете добавить /<кол-во бит> к IP адресу или сетевому имени и Nmap просканирует каждый IP адрес, для которого первые <кол-во бит> такие же как и у заданного хоста. Например, 192.168.10.0/24 просканирует 256 хостов между 192.168.10.0 (бинарное: 11000000 10101000 00001010 00000000) и 192.168.10.255 (бинарное: 11000000 10101000 00001010 11111111) включительно. 192.168.10.40/24 сделает абсолютно то же самое. Зная, что IP адрес scanme.nmap.org 64.13.134.52, при записи типа scanme.nmap.org/16 будет произведено сканирование 65,536 IP адресов между 64.13.0.0 и 64.13.255.255. Наименьшее допустимое значение /0, при котором будет просканирован весь Интернет. Наибольшее значение /32, при котором будет просканирован только заданный хост или IP адрес, т.к. все адресные биты заблокированы.

    CIDR нотация коротка, однако не всегда достаточно гибка. Например, вы хотите просканировать 192.168.0.0/16, но пропустить все IP-ки оканчивающиеся на.0 или.255, т.к. обычно это широковещательные адреса. Nmap может осуществить такое сканирование путем задания диапазонов в октетах. Вместо определния обычного IP адреса, вы можете определить для каждого октета либо разделенный запятыми список чисел, либо диапазон. Например, 192.168.0-255.1-254 пропустит все адреса в диапазоне оканчивающиеся на.0 и.255. Диапазоны не обязательно задавать только в последних октетах: при записи 0-255.0-255.13.37 будет произведено сканирование всех адресов в Интернете оканчивающихся на 13.37. Такой тип сканирования может быть полезен для обозрения просторов Интернета и различных исследований.

    IPv6 адреса могут быть определны только в форме, полностью соответствующей правильной форме записи IPv6 адресов. CIDR и использование диапазонов в октетах не применимо к IPv6 адресам, т.к. они редко используются.

    Вы можете передавать в командной строке Nmap различные варианты определения целей, не обязательно одного типа. Команда nmap scanme.nmap.org 192.168.0.0/16 10.0.0,1,3-7.0-255 сделает то, что вы ожидаете.

    Цели сканирования обычно задаются в командной строке, и существуют различные опции контроля выбора целей:

    IL <имя_файла> (Ввод из списка)

    Считывает цели из <имя_файла>. Хотя передача большого списка хостов для сканирования является обычным явлением, это не удобно. Например, ваш DHCP сервер передают вам список из 10,000 используемых им на данный момент адресов, и вы хотите его просканировать. Или, возможно, вы хотите просканировать все IP адреса, кроме переданных им, чтобы выявить несанкционированное использование статических IP адресов. Просто сгенерируйте список хостов для сканирования и передайте имя файла в Nmap как аргумент для -iL опции. Записи в файле могут находиться в любой приемлимой для Nmap форме (IP адреса, сетевые имена, CIDR, IPv6, или диапазоны в октетах). Каждая запись должна быть отделена пробелом или несколькими, символами табуляции или символами перехода на новую строку. Вы можете передать в качестве аргумента дефис(-) как имя файла, если хотите, чтобы Nmap считывала список хостов из стандартного ввода, а не из файла.

    IR <кол-во хостов> (Выбирает произвольные цели)

    Для сканирования в пределах всего Интернета или каких-либо исследований, вам, возможно, понадобится выбрать цели произвольно. Аргумент <кол-во хостов> определяет сколько необходимо сгенерировать IP адресов. Неподходящие IP адреса, такие как частные, широковещательные или нелокализованные диапазоны адресов автоматически пропускаются. Аргумент 0 может быть передан для бесконечного сканирования. Имейте в виду, что некоторым системным администраторам может не понравиться неразрешенное сканирование их сетей и они могут пожаловаться. Используйте эту опцию на свой страх и риск! Если в дождливый денек вам будет скучно, попробуйте команду nmap -sS -PS80 -iR 0 -p 80 для сканирования произвольных веб-серверов.

    –exclude <хост1>[,<хост2>[,…]] (Исключить хосты/сети)

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

    –excludefile <имя_файла> (Исключить список из файла)

    Эта опция делает то же самое, что и –exclude, за исключением того, что цели для исключения находятся в разделенном пробелами, символами табуляции или символами перехода на новую строку <файле>, а не в командной строке.

    Nmap - культовый сканер, без которого не может обойтись практически ни один хакер, поэтому тема расширения его возможностей, я думаю, интересует многих. Использовать в паре с Nmap другие инструменты - обычная практика. В статье речь пойдет о том, как легко автоматизировать работу Nmap со своими любимыми инструментами. Удобнее же «нажать одну кнопку» и получить результат, чем постоянно проделывать одну и ту же последовательность действий. Использование скриптов в Nmap может помочь хакерам более автоматизированно взламывать системы, а сисадминам проверять системы на наличие дефолтных дыр и своевременно их устранять.

    Пару слов про Nmap

    Уверена, что большинство читателей журнала «Хакер» знают, что такое Nmap, и наверняка не раз использовали его для исследования сети и сбора информации. Для тех же, кто подзабыл или не знает, на всякий случай напомню:

    • Nmap - кросс-платформенный инструмент для сканирования сети, проверки ее безопасности, определения версий ОС и различных сервисов и многого другого. Это очень гибкая и легко расширяемая утилита, а делает ее такой скриптовый движок NSE;
    • NSE (Nmap Scripting Engine) - компонент Nmap, обладающий мощными возможностями, что позволяет пользователям писать скрипты для автоматизации широкого круга сетевых задач: более гибкого взаимодействия с имеющимися возможностями Nmap, обнаружения и эксплуатации уязвимостей и прочего. В основе NSE - интерпретатор языка Lua;
    • Lua - скриптовый язык, похожий на JavaScript.

    Постановка задачи

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

    Допустим, ты активно используешь брутфорсер THC-Hydra для подбора паролей нескольких сервисов (например, HTTP-Basic, SSH, MySQL). В таком случае приходится натравливать гидру на каждый сервис отдельно, нужно запоминать особенности сервисов и необходимые для запуска гидры флаги. А если появится необходимость брутить намного больше, чем пять сервисов?.. Почему бы не автоматизировать это?

    Поэтому давай напишем простенький скрипт, который будет автоматизировать процесс запуска Hydra для подбора логинов/паролей к одному сервису (например, PostgreSQL). Для этого нам понадобятся следующие инструменты:

    • Nmap;
    • THC-Hydra;
    • любой текстовый редактор.

    Если у тебя еще не установлен Nmap и/или Hydra, немедленно исправь это:

    $ sudo apt-get install nmap hydra

    О’кей, начнем. Скрипты для Nmap представляют собой обычные текстовые файлы с расширением *.nse . Поэтому открывай свой любимый текстовый редактор и создавай новый файл. Я буду использовать Vim:

    $ vim hydra.nse

    Структура NSE-скрипта

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

    Описание скрипта (description)

    Данный раздел содержит описание скрипта, комментарии автора, пример отображения результата выполнения скрипта на экран, дополнительные возможности.

    Для нашего скрипта, подбирающего логины/пароли к PostgeSQL, описание будет выглядеть следующим образом:

    Description = [[ Brute force all services running on a target host. The results are returned in a table with each path, detected method, login and/or password. ]] --- -- @usage -- nmap --script hydra [--script-args "lpath=, ppath="] -- -- @output -- PORT STATE SERVICE -- 80/tcp open http -- | hydra: -- | path method login password -- | 127.0.0.1/private/index.html Digest log pass -- |_ 127.0.0.1/simple/index.txt Basic user qwerty -- -- @args hydra.lpath: the path to the file with logins. For example, -- nmap --script hydra --script-args="lpath=/home/my_logins.txt" -- @args hydra.ppath: the path to the file with passwords. For example, -- nmap --script hydra --script-args="ppath=/home/my_pass.txt"

    Комментарий; -- - многострочный комментарий; @usage, @output, @args - пример вызова скрипта, вывода результата на экран, необходимые аргументы при вызове.

    Выше в @usage мы видим формат запуска скрипта. В данном случае указано только имя скрипта (hydra). Это становится возможным, если скрипт положить в директорию //nmap/scripts/ , в противном случае придется указывать абсолютный или относительный путь до него. В последующем сделаем возможным задание аргументов при запуске скрипта. Аргументы задаются с помощью флага --script-args "" . В нашем случае мы будем задавать путь до файла с логинами (lpath) и до файла с паролями (ppath). Аргументы необязательны: по умолчанию будем искать файлы с именами login.txt и password.txt в текущей директории.

    Категории, в которых находится скрипт (categories)

    При написании NSE-скрипта можно указать его категорию (или несколько категорий). Это бывает полезно, когда пользователь Nmap хочет использовать не конкретный скрипт, а набор скриптов, находящихся в одной категории. Примеры некоторых категорий:

    • auth - категория, в которой скрипты определяют аутентификационные данные целевого хоста;
    • brute - категория, скрипты которой помогают определить логины и пароли для различных сервисов;
    • default - категория, которая содержит основные скрипты. Есть некоторые критерии, определяющие принадлежность скрипта к данной категории: скорость сканирования, полезность, надежность, конфиденциальность, наглядный вывод;
    • malware - категория, помогающая определять вредоносные программы.

    Например, если необходимо запустить все скрипты из категории auth, то команда будет выглядеть следующим образом:

    $ nmap --script=auth example.com

    В таком случае скрипты этой категории будут по очереди запускаться для указанного хоста. Наш скрипт относится к категории brute. Добавим следующую строку в файл:

    Categories = {"brute"}

    Информация об авторе (author)

    Каждый скрипт содержит информацию об его авторе. В моем случае:

    Author = "Olga Barinova"

    Информация об использующейся лицензии (license)

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

    License = "Same as Nmap--See http://nmap.org/book/man-legal.html"

    Добавим также и эту строку в наш скрипт.

    Зависимости от других скриптов (dependencies)

    Эта область содержит названия NSE-скриптов, которые должны быть выполнены перед началом работы данного скрипта для получения необходимой информации. Например,

    Dependencies = {"smb-brute"}.

    В нашем случае такая возможность не понадобится, поэтому добавлять dependencies мы не будем.

    Хост и порт (host & port)

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

    • prerule() - скрипт выполняется один раз перед сканированием любого хоста, используется для некоторых операций с сетью;
    • hostrule(host) - скрипт выполняется для каждого хоста из таблицы, которую принимает в качестве аргумента;
    • portrule(host, port) - скрипт выполняется для каждого хоста и для каждого порта из таблиц, которые принимает в качестве аргументов;
    • postrule() - скрипт выполняется один раз после сканирования любого хоста. В основном используется для обработки полученных результатов, подведения статистики и подобного.

    Для формирования таких правил есть библиотеки. В нашем скрипте необходимо только указать номер порта (5432) и имя сервиса (postgresql), и тогда он будет работать лишь для данного порта и сервиса. Существует довольно популярная библиотека shortport , встроенная в NSE, в которую включены различные методы. Мы будем использовать метод

    Port_or_service (ports, services, protos, states)

    где ports - номера портов, services - имена сервисов, protos - имена протоколов (например, udp), states - состояния.

    Этот метод возвращает true в том случае, если в данный момент анализируется сервис, находящийся на одном из портов из списка ports или соответствующий какому-нибудь сервису из списка services , кроме того, проверяется протокол и состояние на соответствие, иначе возвращается false .
    Чтобы наш скрипт работал с PostgreSQL, нужно добавить номер порта и название сервиса:

    Portrule = shortport.port_or_service({5432}, {"postgresql"})

    Подключение библиотек

    Отвлечемся на секунду от структуры скрипта и рассмотрим, как происходит подключение внешних библиотек, к функциональности которых нам потребуется обращаться.

    Продолжение доступно только участникам

    Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

    Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!

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

    Nmap — это популярный и мощный кроссплатформенный сканер сетевой безопасности, запускаемый из командной строки, с помощью которого вы можете чрезвычайно эффективно провести исследование любой сети. Он также может помочь вам получить обзор систем, которые подключились к вашей сети; вы можете использовать его, чтобы узнать IP-адреса всех «живых» хостов, сканировать открытые порты и сервисы, запущенные на этих хостах, а также многое-многое другое.

    Без сомнения, Nmap является самым универсальным сканером портов из существующих ныне. Да, вы можете найти более быстрые сканнеры, но нет ни одного настолько полезного и попросту незаменимого для решения многих-многих ваших задач. И подавляющее большинство профессионалов в области информационной безопасности безапелляционно согласятся с этим утверждением.

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

    Давайте более детально посмотрим на скрипты NSE, и, возможно, их потенциал сможет приятно вас удивить.

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

    Возможности скриптов Nmap Scripting Engine

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

    1. Исследование сети

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

    • осуществление поиска данных WHOIS (сетевой протокол прикладного уровня, базирующийся на протоколе TCP; его основное применение — получение в текстовом виде регистрационных данных о владельцах доменных имен, IP-адресов и автономных систем) по соответствующим доменам;
    • отправка запросов на основные региональные WHOIS-серверы ARIN (Северная Америка), RIPE (Европа и Ближний Восток) или APNIC (Азия и Тихоокеанский регион) для определения владельца конкретного IP-адреса;
    • identd-поиск на открытых портах (позволяет идентифицировать подключенных к ним пользователей);
    • осуществление запросов по протоколу SNMP (интернет-протокол для управления устройствами в IP-сетях на основе архитектур TCP/UDP);
    • составление списков доступных ресурсов и сервисов через сетевые протоколы для удаленного доступа NFS, SMB или RPC.

    2. Более изощренный вариант определения версий

    Система Nmap для определения версий сервисов и приложений способна распознать тысячи различных сервисов с помощью зондов и сопоставления сигнатур регулярных выражений, но и она не всемогуща. К примеру, идентификация сервиса Skype v2 требует два независимо работающих друг от друга зонда, чьи возможности по определению версий не отличаются высокой гибкостью. Также Nmap способен распознать часть SNMP-сервисов, если попытается перебрать несколько сотен community имен методом грубой силы. Для решения обеих вышеприведенных задач не слишком удобно использовать стандартные методы определения версий Nmap, но обе они легко выполняются с помощью NSE. По этой причине система определения версий сейчас вызывает по умолчанию NSE для решения задачи определения версии при обработки некоторых сложных сервисов.

    3. Поиск уязвимостей

    Когда обнаруживается новая уязвимость, она становится общеизвестной, и специалистам по сетевой безопасности нужно срочно просканировать свои сети, чтобы быстро идентифицировать уязвимые системы, до того, как это сделают за них плохие парни. Хотя Nmap и не является полноценным сканером уязвимостей, мощный потенциал NSE позволяет ему осуществлять проверки уязвимостей даже с учетом очень жестких требований. К примеру, когда ошибка Heartbleed в криптографическом программном обеспечении OpenSSL поставила под угрозу сотни тысяч систем по всему миру, разработчики Nmap отреагировали написанием скрипта ssl-heartbleed detection в течение двух дней.

    4. Обнаружение бэкдоров

    Многие киберзлоумышленники, а также некоторые автоматические черви оставляют бэкдоры, чтобы на будущее обеспечить себе лазейку для осуществления более легкого проникновения в вашу систему. Часть из этих бэкдоров можно обнаружить с помощью стандартной процедуры определения версий Nmap на основе сопоставления сигнатур регулярных выражений, но для надежного обнаружения многих более сложных червей и бэкдоров требуются расширенные возможности NSE. В частности, NSE применяется для обнаружения бэкдора DoublePulsar, использующего уязвимость в реализации протокола SMB, бэкдор-версий для IRC-сервера UnrealIRCd, а также FTP-серверов vsftpd и ProFTPd.

    5. Обнаружение уязвимостей

    Реализованный на основе скриптового языка общего назначения, NSE может быть даже использован для создания эксплойтов, которые помогут вам обнаружить уязвимости еще до того, как информация об их существовании станет общедоступной. Такая возможность добавления пользовательских скриптовых эксплойтов может быть чрезвычайна полезна некоторым людям (прежде всего тестерам проникновения). Однако, полноценной платформой для создания сигнатур и эксплойтов, наподобие Metasploit, NSE все же не является.

    Какие категории скриптов NSE существуют?

    В настоящее время существует 598 скриптов NSE, которые вы можете найти в папке «scripts» — поддиректории основного каталога Nmap. Для большей производительности все скрипты проиндексированы в базе данных «scripts/script.db», где указано, к какой категории или категориям принадлежит каждый скрипт.

    В зависимости от целевого применения, а также для упрощения их использования, скрипты NSE сгруппированы по разным категориям. В настоящее время определены следующие категории скриптов NSE: auth, broadcast, brute, default. discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version и vuln (имена категорий не чувствительны к регистру). Ниже приведено более детальное представление каждой категории:

    • auth — эта категория скриптов имеет дело с учетными данными при аутентификации (или обходит их) на целевой системе. Примерами таких скриптов являются «x11-access», «ftp-anon» и «oracle-enum-users». Обратите внимание, что скрипты, которые используют атаку грубой силы для попытки определения учетных данных, отнесены к категории brute.
    • broadcast — скрипты из этой категории обычно служат для обнаружения хостов, не указанных в командной строке, путем ширококанального взаимодействия с локальной сетью. При использовании аргумента скрипта «newtargets» они будут автоматически добавлять хосты, которые обнаружили, в очередь на сканирование.
    • brute — эта категория скриптов используется для проведения атак грубой силы для получения учетных данных аутентификации удаленного сервера. Nmap предлагает скрипты для проведения атак грубой силы для дюжин протоколов. К ним относятся следующие скрипты: «http-brute», «oracle-brute», «snmp-brute» и т. д..
    • default — эта категория скриптов определяет те скрипты, которые отобраны разработчиками Nmap, как полезные для расширения функциональности сканера или оптимизации его работы, и отнесены к базовому набору «по умолчанию». Они запускаются при использовании опций «-sC» или «-A», а не через задание определенного списка скриптов через опцию «--script». Существует возможность явно указать эту категорию скриптов, как и остальные, используя «--script=default». Команда Nmap, при определении того, стоит ли отнести конкретный скрипт к категории default, старается опираться на следующие требования:
      • скорость — сканирование по умолчанию должно завершаться быстро, что исключает включение в эту категорию взломщиков аутентификации с использованием метода грубой силы, веб-пауков, а также любых других скриптов, время сканирования одного сервиса у которых исчисляется в минутах, а то и часах.
      • полезность — проведение сканирования в категории по умолчанию требует получение ценной и актуальной информации. Другими словами, результат сканирования такого скрипта должен быть понятен и полезен среднестатистическому профессионалу в области сетевой безопасности. В противном случае запускать его по умолчанию не имеет смысла.
      • краткость — вывод полученной информации сканером Nmap используется для самых разных целей и нужд, поэтому данная информация должна быть читабельной и краткой. Скрипты, которые зачастую создают множество страниц с полным выводом всей полученной информации, также не место в категории скриптов по умолчанию. Другими словами, скрипты NSE, которые отнесены к категории default, когда не находят никакой важной информации, в отчете не показывают ничего. Это и относится к скриптам по умолчанию, которые ищут скрытые уязвимости, — они выводят результат только при обнаружении этих уязвимостей.
      • надежность — многие скрипты в своей работе могут опираться на данные эвристического анализа и нечеткого совпадения сигнатур, чтобы сделать определенные выводы о целевом хосте или сервисе. Примерами таких скриптов являются «sniffer-detect» и «sql-injection». Такие скрипты не будут относится в категорию по умолчанию, так как результаты их работы зачастую бывают ошибочными, и могут ввести в заблуждение пользователя, который четко не понимает всю специфику их работы.
      • ненавязчивость — некоторые скрипты бывают излишне навязчивыми, когда они используют значительные ресурсы удаленной системы, что может привести к выходу из строя этой системы или сервиса, либо же их действия могут быть расценены удаленными администраторами как атака. Такие скрипты также не включаются в категорию по умолчанию. Однако, некоторые «умеренно агрессивные» скрипты все же были отнесены командой Nmap в категорию default, исходя из их полезности и того, насколько корректно они себя могут вести, учитывая другие факторы.
      • конфиденциальность — многие скрипты могут разглашать конфиденциальную информацию третьим лицам, исходя из самой специфики своей работы. К примеру, скрипты для поиска данных WHOIS должны сообщить целевой IP-адрес региональным регистраторам. Другими словами, в категорию default скриптов NSE команда Nmap старается не добавлять скрипты, которые могут нарушить конфиденциальность.
    • discovery — эта категория скриптов активно пытается узнать больше о сети, отправляя публичные запросы регистратору, устройствам с поддержкой SNMP, службе каталогов и т.д. Примерами таких скриптов являются «html-title» (получает заголовок корневого пути веб-сайтов), «smb-enum-shares» (перечисляет общие ресурсы Windows) и «snmp-sysdescr» (извлекает подробную информацию о системе через стандартный интернет-протокол для управления устройствами SNMP).
    • dos — скрипты этой категории следует использовать крайне осторожно, так как они могут привести к отказу в обслуживании. Иногда их используют тестировщики безопасности для проверки уязвимости системы к атакам методом отказа в обслуживании, но такое тестирование может привести к нежелательным побочным эффектам — к примеру, вызвать сбои в работе некоторых уязвимых сервисов.
    • exploit — эти скрипты нацелены на активное использование определенной уязвимости. Примерами этой категории скриптов являются «jdwp-exec» и «http-shellshock».
    • external — скрипты этой категории могут отправлять данные третьим лицам, контролирующим базы данных или другие сетевые ресурсы. Примером такого скрипта может служить «whois-ip», который осуществляет подключение к WHOIS-серверам, чтобы получить информацию об IP-адресе цели. Всегда существует вероятность того, что операторы сторонней базы данных будут записывать все, что вы им отправляете, что во многих случаях будет включать в том числе информацию о вашем IP-адресе и IP-адресе вашей цели. Большинство скриптов, которые связаны с трафиком исключительно между сканирующим компьютером и клиентом, к этой категории не относятся.
    • fuzzer — эта категория скриптов, которая создана для отправки программному обеспечению сервера неожиданных или рандомизированных полей в каждом пакете. Хотя этот метод может быть полезен для поиска неизвестных ошибок и уязвимостей в программном обеспечении, это медленный процесс, который к тому же интенсивно использует пропускную способность сети. Примером скриптов данной категории является «dns-fuzz», который бомбардирует DNS-сервер частично измененными доменными запросами, пока сервер не ляжет или не истечет установленное пользователем ограничение по времени.
    • intrusive —к этой категории скриптов относятся те, которые нельзя классифицировать как безопасные (safe), так как слишком высоки риски, что под их напором рухнет целевая система, потребуются значительные ресурсы на целевом хосте (например, пропускная способность или процессорное время) либо же каким-нибудь другим образом их выполнение будет воспринято администраторами целевой системы как злонамеренная деятельность. Примерами таких скриптов являются «http-open-proxy» (который пытается использовать целевой сервер в качестве прокси-сервера HTTP) и «snmp-brute» (который пытается угадать так называемую «общую строку» (community string) SNMP-устройств, путем отправки им популярных значений, таких как public, private и cisco). Если скрипт не относится к специальной категории version, он должен быть классифицирован как safe или intrusive.
    • malware — эти скрипты проверяют, заражена ли целевая платформа вредоносными программами или бэкдорами. Примерами скриптов этой категории скриптов является «smtp-strangeport», который следит за SMTP-серверами, запущенными на необычных номерах порта, и «auth-spoof», который обнаруживает подмененных демонов identd (реализующих поддержку протокола идентификации пользователя), которые предоставляют фальшивый ответ еще до того, как получат запрос. Что для первого, что для второго примера такое поведение, будь оно обнаружено, обычно является признаком заражения системы вредоносным программным обеспечением.
    • safe — все скрипты, которые не были созданы для вызывания сбоя сервисов, использования больших объемов пропускной способности сети или других ресурсов, а также не были нацелены на использование дыр в безопасности, категорированы как safe. Они гораздо менее склонны привлекать к себе внимание удаленных администраторов, хотя (как и в случае с любой другой функциональностью Nmap), нельзя на сто процентов гарантировать, что они никогда не привлекут к себе побочное внимание. Большинство из этих скриптов выполняют задачи, связанные с общим исследованием сети. Примерами скриптов данной категории являются «ssh-hostkey» (получает ключ SSH хоста) и «html-title» (захватывает заголовок из веб-страницы). Скрипты из категории version не категорируются как safe, но остальные скрипты, не являющиеся безопасными, должны быть определены как intrusive.
    • version — скрипты из этой специальной категории являются расширением функциональности определения версии и не могут быть выбраны явно. Они выбираются для запуска только при запросе определения версии Nmap («-sV»). Их вывод нельзя отделить от вывода функции определения версии, и они не работают как скрипты хоста или сервиса. Примерами таких скриптов являются «skypev2-version», «pptp-version» и «iax2-version».
    • vuln — скрипты этой категории производят проверки на наличие какой-то определенной известной уязвимости и обычно выдают только те результаты, которые подтверждают, что такая уязвимость найдена. Примерами таких скриптов являются «realvnc-auth-bypass» и «afp-path-vuln».

    Скрипты, в зависимости от их функциональной направленности, а также фазы сканирования, в ходе которой они выполняются, разделены на четыре типа (некоторые скрипты могут поддерживать сразу несколько типов операций):

    • Предварительные скрипты (Prerule scripts) — этот тип скриптов запускается еще до осуществления любых операций Nmap, соответственно, они выполняются до этапа сканирования, когда Nmap еще не собрал никакой информации о цели. Эти скрипты могут быть полезны для выполнения таких задач, которые не зависят от определенных целей сканирования, например, осуществление широковещательных запросов для опроса DHCP- и DNS SD-серверов. Некоторые из этих скриптов могут создавать новые цели для сканирования Nmap (только если вы укажите NSE-аргумент «newtargets»). Так, к примеру, скрипт «dns-zone-transfer» может получить список IP-адресов в домене, используя запрос передачи зоны, а затем автоматически добавить их в список целей для сканирования Nmap. Скрипты типа Prerule scripts идентифицируются с помощью функции prerule.
    • Скрипты хоста (Host scripts) — данные скрипты запускается во время стандартного процесса сканирования Nmap, после того, как сканер Nmap выполнил обычные операции, такие как обнаружение хоста, сканирование портов, определение версий и обнаружение ОС на целевом хосте. Этот тип скрипта вызывается один раз для каждого целевого хоста, который соответствует его функции hostrule. В качестве примера можно привести скрипты «whois-ip», который ищет информацию о владельце для целевого IP-адреса, и «path-mtu», который пытается определить максимальный размер IP-пакета, который может достичь цели, не требуя фрагментации.
    • Скрипты сервисов (Service scripts) — этот тип скриптов запускается тогда, когда обнаруживаются определенные сервисы на целевом хосте. К примеру, Nmap включает в себя более чем 15 скриптов http-сервисов, которые запускаются для работы с веб-серверами. Если на хосте есть веб-сервера, работающие на нескольких портах, эти скрипты могут выполняться несколько раз (по одному для каждого порта). Это наиболее распространенный тип скриптов в Nmap, и они отличаются тем, что содержат функцию portrule для определения того, с каким из обнаруженных сервисов должен запускаться скрипт.
    • Завершающие скрипты (Postrule scripts) — этот тип скриптов запускается один раз, после того, как Nmap просканировал все намеченные цели. Они могут быть полезны для форматирования и представления вывода информации, полученной сканером Nmap. К примеру, скрипт «ssh-hostkey» более известен как сервисный скрипт (с заданной функцией portrule), который подключается к серверам SSH, обнаруживает их открытые ключи и печатает их. Но он также включает в себя функциональность postrule, которая осуществляет проверку на дубликаты ключей среди всех проверенных хостов, а затем печатает все найденные. Другим потенциально возможным примером применения скриптов данного типа является реверсная печать вывода результатов работы сканера Nmap — к примеру, перечисление всех хостов, на которых запущен определенный сервис, а не обычное перечисление всех хостов с запущенными на них сервисами. Скрипты Postrule scripts идентифицируются с помощью функции postrule.

    Примечание : многие скрипты могут запускаться как prerule script, так и как postrule script. В этих случаях рекомендуется использовать функциональность prerule во избежание несогласованности.

    Вечный параноик, Антон Кочуков.


    См. также:

    Nmap - это очень популярный сканер сети с открытым исходным кодом, который может использоваться как в Windows, так и в Linux. Программа Nmap или Network Mapper была разработана Гордоном Луоном и на данный момент используется специалистами по безопасности и системными администраторами по всему миру.

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

    Например, с помощью скриптов можно автоматически обнаруживать новые уязвимости безопасности в вашей сети. Namp может использоваться с хорошими и плохими намерениями, будьте аккуратны, чтобы не использовать nmap против закона. В этой инструкции мы рассмотрим как пользоваться namp для сканирования портов в операционной системе Linux. Но сначала нужно попытаться понять как работает эта утилита.

    В компьютерных сетях все подключенные устройства имеют свой ip адрес. Каждый компьютер поддерживает протокол ping, с помощью которого можно определить подключен ли он к сети. Мы просто отправляем ping запрос компьютеру, и если он отзывается, то считаем, что он подключен. Nmap использует немного иной подход. Компьютеры также определенным образом реагируют на те или иные сетевые пакеты, утилита просто отправляет нужные пакеты и смотрит какие хосты прислали ответ.

    Но об этом вы, наверное, уже знаете. Более интересно то как Nmap узнает какие сервисы запущены на машине. Суть работы всех сетевых программ основана на портах. Чтобы получить сообщение из сети, программа должна открыть порт на вашем компьютере и ждать входящих соединений. А для отправки сообщения по сети нужно подключиться к уже другой программой (адресатом) порту. Затем программе необходимо будет открыть порт, на котором она будет ждать ответа.

    Утилита nmap в процессе сканирования сети перебирает доступный диапазон портов и пытается подключиться к каждому из них. Если подключение удалось, в большинстве случаев, передав несколько пакетов программа может даже узнать версию программного обеспечения, которые ожидает подключений к этому порту. Теперь, после того, как мы рассмотрели основы, рассмотрим как пользоваться nmap для сканирования портов и сети.

    Синтаксис Nmap

    Команда запуска Nmap очень проста для этого достаточно передать ей в параметрах целевой IP адрес или сеть, а также указать опции при необходимости:

    $ nmap опции адрес

    Теперь давайте рассмотрим основные опции, которые понадобятся нам в этой статье.

    • -sL - просто создать список работающих хостов, но не сканировать порты nmap;
    • -sP - только проверять доступен ли хост с помощью ping;
    • -PN - считать все хосты доступными, даже если они не отвечают на ping;
    • -sS/sT/sA/sW/sM - TCP сканирование;
    • -sU - UDP сканирование nmap;
    • -sN/sF/sX - TCP NULL и FIN сканирование;
    • -sC - запускать скрипт по умолчанию;
    • -sI - ленивое Indle сканирование;
    • -p - указать диапазон портов для проверки;
    • -sV - детальное исследование портов для определения версий служб;
    • -O - определять операционную систему;
    • -T - скорость сканирования, чем больше, тем быстрее;
    • -D - маскировать сканирование с помощью фиктивных IP;
    • -S - изменить свой IP адрес на указанный;
    • -e - использовать определенный интерфейс;
    • --spoof-mac - установить свой MAC адрес;
    • -A - определение операционной системы с помощью скриптов.

    Теперь, когда мы рассмотрели все основные опции, давайте поговорим о том, как выполняется сканирование портов nmap.

    Как пользоваться Nmap для сканирования портов в Linux

    Дальше рассмотрим примеры nmap. Сначала давайте рассмотрим как найти все подключенные к сети устройства, для этого достаточно использовать опцию -sL и указать маску нашей сети. в моем случае это 192.168.1.1/24. Маску вашей локальной сети вы можете найти, выполнив команду:

    Из вывода для используемого интерфейса возьмите число после слеша, а до слэша укажите ip вашего роутера. Команда на сканирование сети nmap будет выглядеть вот так:

    nmap -sL 192.168.1.1/24

    Иногда это сканирование может не дать никаких результатов, потому что некоторые операционные системы имеют защиту от сканирования портов. Но это можно обойти, просто использовав для сканирования ping всех ip адресов сети, для этого есть опция -sn:

    nmap -sn 192.168.1.1/24

    Как видите, теперь программа обнаружила активные устройства в сети. Дальше мы можем сканировать порты nmap для нужного узла запустив утилиту без опций:

    sudo nmap 192.168.1.1

    Теперь мы можем видеть, что у нас открыто несколько портов, все они используются каким-либо сервисом на целевой машине. Каждый из них может быть потенциально уязвимым, поэтому иметь много открытых портов на машине небезопасно. Но это еще далеко не все, что вы можете сделать, дальше вы узнаете как пользоваться nmap.

    Чтобы узнать более подробную информацию о машине и запущенных на ней сервисах вы можете использовать опцию -sV. Утилита подключится к каждому порту и определит всю доступную информацию:

    sudo nmap -sV 192.168.1.1

    На нашей машине запущен ftp, а поэтому мы можем попытаться рассмотреть эту службу подробнее с помощью стандартных скриптов nmap. Скрипты позволяют проверить порт более детально, найти возможные уязвимости. Для этого используйте опцию -sC и -p чтобы задать порт:

    sudo nmap -sC 192.168.56.102 -p 21

    Мы выполняли скрипт по умолчанию, но есть еще и другие скрипты, например, найти все скрипты для ftp вы можете командой:

    sudo find /usr/share/nmap/scripts/ -name "*.nse" | grep ftp

    Затем попытаемся использовать один из них, для этого достаточно указать его с помощью опции --script. Но сначала вы можете посмотреть информацию о скрипте:

    sudo nmap --script-help ftp-brute.nse

    Этот скрипт будет пытаться определить логин и пароль от FTP на удаленном узле. Затем выполните скрипт:

    sudo nmap --script ftp-brute.nse 192.168.1.1 -p 21

    В результате скрипт подобрал логин и пароль, admin/admin. Вот поэтому не нужно использовать параметры входа по умолчанию.

    Также можно запустить утилиту с опцией -A, она активирует более агрессивный режим работы утилиты, с помощью которого вы получите большую часть информации одной командой:

    sudo nmap -A 192.168.1.1

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

    Выводы

    В этой статье мы рассмотрели как выполняется сканирование портов nmap, а также несколько простых примеров использования этой утилиты. Эти команды nmap могут быть полезными многим системным администраторам, чтобы улучшить безопасность их систем. Но это далеко не все возможности утилиты. Продолжайте экспериментировать с утилитой чтобы узнать больше только не в чужих сетях!

    Об авторе

    Основатель и администратор сайта сайт, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux интересуюсь всем, что связано с информационными технологиями и современной наукой.

    Публикации по теме