Инструкция по Nmap. Обнаружение, сканирование, NSE

nmap scanning

Вся информация в данной статье представлена исключительно в образовательных и ознакомительных целях, и не является призывом к действию. Не применяйте полученные знания для исследования систем и сетей, к которым вы не имеете отношения без письменного согласия владельца. Помните, что по законодательству некоторых стран, даже сканирование портов является вмешательством в работу информационной системы и может квалифицироваться как правонарушение.
Вы можете исследовать ресурс с адресом scanme.nmap.org с целью тестирования программы. При этом разрешено использование исключительно программы Nmap и запрещено тестирование эксплойтов и проведение атак отказа в обслуживании (DOS — атак).

Привет, друг. Если ты планируешь изучать всё то, что обобщенно, принято называть информационной безопасностью, то рано или поздно (причем скорее рано) ты услышишь или узнаешь про такую утилиту как Nmap. Кто-то может сказать: «А, да что там? Просто порты посканировать». Не слушай этих людей. Знание возможностей этой утилиты и умение её применять, само по себе уже даёт серьёзные возможности в практике пентеста. И в этой статье я постараюсь показать тебе основы и дать наиболее необходимые рецепты использования Nmap, а также объяснить как он работает.

Как использовать Nmap. Подробная инструкция

Nmap — это бесплатная утилита с открытым исходным кодом, предназначенная для исследования и проверки защищенности сетевых объектов. Причем она может работать как с сетями любых размеров так и с одиночными объектами. При этом возможности её огромны. Начиная от обнаружения открытых портов и определения служб, вплоть до поиска файлов, баз данных, обнаружения уязвимостей, обхода средств защиты и много другого, но обо всём по порядку.

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

sudo apt install nmap

Я не буду углубляться в теоретические глубины принципов работы Nmap. Потому что тогда эта статья получится безразмерной. В глубины мы заглянем в других материалах (или уже заглянули, можешь глянуть статьи на сайте). Но некоторые пояснения о том как Nmap получает те или иные результаты я постараюсь дать там где это, на мой взгляд, важно. А сейчас перейдем сразу к практике и примерам, потому что рассказать и показать предстоит довольно много.

Использование Nmap

Если запустить nmap без каких либо параметров, то мы увидим файл справки:

Nmap 7.60 ( https://nmap.org )
 Использование: nmap [Тип(ы) Сканирования] [Опции] {цель сканирования}
ОПРЕДЕЛЕНИЕ ЦЕЛИ СКАНИРОВАНИЯ:
 Можно использовать сетевые имена, IP адреса, сети и т.д.
 Пример: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
       -iL <имявходногофайла>: Использовать список хостов/сетей из файла
       -iR <количествохостов>: Выбрать произвольные цели       
       --exclude <хост1[,хост2][,хост3],…>: Исключить хосты/сети       
       --excludefile <имяфайла>: Исключить список из файла
ОБНАРУЖЕНИЕ ХОСТОВ:
       -sL: Сканирование с целью составления списка - просто составить список целей для сканирования
       -sP: Пинг сканирование - просто определить, работает ли хост
       -PN: Расценивать все хосты как работающие -- пропустить обнаружение хостов
       -PS/PA/PU [списокпортов]: TCP SYN/ACK или UDP пингование заданных хостов        
       -PE/PP/PM: Пингование с использованием ICMP эхо запросов, запросов временной метки и сетевой маски       
       -PO [списокпротоколов]: Пингование с использованием IP протокола
       -n/-R: Никогда не производить DNS разрешение/Всегда производить разрешение [по умолчанию: иногда]
       --dns-servers <сервер1[,сервер2],…>: Задать собственные DNS сервера
       --system-dns: Использовать системный DNS преобразователь
РАЗЛИЧНЫЕ ПРИЕМЫ СКАНИРОВАНИЯ:
       -sS/sT/sA/sW/sM: TCP SYN/с использованием системного вызова Connect()/ACK/Window/Maimon сканирования
       -sU: UDP сканирование
       -sN/sF/sX: TCP Null, FIN и Xmas сканирования
       --scanflags <флаги>: Задать собственные TCP флаги
       -sI <зомбихост[:порт]>: "Ленивое" (Idle) сканирование       
       -sO: Сканирование IP протокола       
       -b <хост>: FTP bounce сканирование
       --traceroute: Отслеживать путь к хосту
       --reason: Выводить причину нахождения порта в определенном состоянии
ОПРЕДЕЛЕНИЕ ПОРТОВ И ПОРЯДКА СКАНИРОВАНИЯ:
       -p <диапазонпортов>: Сканирование только определенных портов            
          Пример: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080       
       -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-trace: Выводить все полученные и отправленные данные       
       --script-updatedb: Обновить базу данных скриптов 
ОПРЕДЕЛЕНИЕ ОС:       
       -О: Активировать функцию определения ОС       
       --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 <номерпорта>: Использовать заданный номер порта      
      --data-length <число>: Добавить произвольные данные к посылаемым пакетам      
      --ip-options <опции>: Посылать пакет с заданным ip опциями      
      --ttl <значение>: Установить IP поле time-to-live (время жизни)      
      --spoof-mac адрес/префикс/название производителя>: Задать собственный MAC адрес
      --badsum: Посылать пакеты с фиктивными TCP/UDP контрольными суммами
ВЫВОД РЕЗУЛЬТАТОВ:
      -oN/-oX/-oS/-oG <файл>: Выводить результаты нормального, XML, s|: Использовать сразу три основных формата вывода
      -v: Увеличить уровень вербальности (задать дважды или более для увеличения эффекта)
      -d[уровень]: Увеличить или установить уровень отладки (до 9)
      --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: Вывести эту страницу помощи
ПРИМЕРЫ:
       nmap -v -A scanme.nmap.org
       nmap -v -sP 192.168.0.0/16 10.0.0.0/8
       nmap -v -iR 10000 -PN -p 80
ДЛЯ СПРАВКИ ПО ДРУГИМ ОПЦИЯМ, ОПИСАНИЙ И ПРИМЕРОВ СМОТРИТЕ MAN СТРАНИЦУ

Логика использования утилиты довольно проста. Как видно из справки:

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

Запуская утилиту nmap мы сразу можем задать цель сканирования, с нужными нам настройками. Тут важно понимать, что всё что не является функционалом программы т.е. опциями и аргументами, nmap будет расценивать как цель. А значит мы можем вводить несколько объектов в качестве целей. А целями могут быть сетевые адреса, ip адреса, диапазоны ip адресов, сети, подсети и т.д.

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

Статус состояния портов

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

СТАТУСЧТО ОЗНАЧАЕТ
1. открыт
open
Приложение принимает на порт пакет или запросы на соединение
2. закрыт
closed
Порт отвечает на запросы, но не используется ни каким приложением
3. фильтруется
filtered
Запросы не доходят до этого порта, а значит невозможно определить открыт он или нет
4. не фильтруется
unfiltered
Порт доступен, но Nmap не может определить закрыт он или открыт. Как правило помогает использование другого способа сканирования
5. открыт|фильтруется
open|filtered
Не получается определить открыт порт или фильтруется. Возникает если открытый порт не отвечает. Как правило помогает использование другого способа сканирования
6. закрыт|фильтруется
closed|filtered
Не получается определить закрыт порт или фильтруется. Как правило помогает использование другого способа сканирования

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

Начнём с того, что разберем основные команды из справки. Это нужно чтобы научиться основам использования Nmap. В некоторых примерах мы будем использовать в качестве цели сканирования сайт scanme.nmap.org. Это специально созданный разработчиками Nmap сайт для тестирования возможностей программы.

Обнаружение хостов

Как, мы видим из справки Nmap первым пунктом идет обнаружение хостов. Само по себе это понятие довольно широкое, и состоит из первоначального обнаружения активных IP адресов. Этот этап ещё принято называть пинг сканированием. Тут нужно понимать что можно сканировать как, всем привычными, ICMP запросами, так и комбинируя их с TCP, UDP и ARP запросами. Обнаружив хост Nmap автоматически просканирует его порты если не задан параметр отменяющий это действие.

Опции Nmap для обнаружения хостов:

  • -sL
    Сканирование с целью составления списка.
    При выборе данной опции будет перечислен весь диапазона IP адресов в сети с присвоенными им именами (если такие есть). В конце списка будет отображено общее количество найденных IP. Если в качестве цели будет задано доменное имя то будет показан IP и его Reverse DNS.
nmap
  • -sP
    Пинг сканирование.
    Эта опция определяет активные хосты т.е. те которые отвечают на запросы и выводит их список. Если запустить эту опцию с правами root, то, также будут задействованы ARP запросы. Благодаря этому мы узнаем mac-адреса работающих устройств в сети.
пинг сканирование
  • -Pn
    Пропустить пинг сканирование.
    При использовании этой опции Nmap будет считать, что все IP в исследуемой сети активны и будет сканировать весь диапазон IP адресов, в том числе все порты на каждом IP.
  • -PS / -PA / -PU
    Это команды для получения списка портов. Разница только в пакетах, которые будут отправлены хосту: PS — это TCP SYN, PA — это TCP ACK. Принципиальной разницы на самом деле нет. Но если есть вероятность, что соединение блокируется брандмауэр, лучше использовать TCP ACK. Ну, а PU (нужен root) — это UDP пингование. Используется для получения ICMP пакета с ошибкой «порт недостежим». Все остальные ошибки, в том числе отсутствие ответа говорят о том что хост не работает.
    В дополнение к указанным опциям можно указать какие именно типы ICMP пакетов использовать. Делается это опциями -PE; -PP; -PM — это эхо запрос, запрос временной метки и запрос адресной маски соответственно. Останавливаться отдельно на них не буду потому что такие запросы с большой долей вероятности будут заблокированы хостом или брандмауэром.
nmap
  • -PO
    Команда для получения списка протоколов пингованием с использованием IP протокола (для запуска необходим root). В этом случае должны приходить ответы по протоколу указанному в запросе. Это означает что протокол активен. Если приходит ответ что хост не достижим, это даёт понять, что протокол не поддерживается.
nmap
  • -PR
    Это ARP пингование. Наиболее оптимальный способ сканирования, позволяющий определить активные хосты, службы и порты ими использующиеся (для запуска необходим root).
ARP пингование
  • —traceroute
    Опция позволяющая выполнить трасировку т.е. отследить путь к хосту. Она применяется вместе с любым видом сканирования и работает на основании данных полученных в результате него (для запуска необходим root)
трасоровка

Приёмы сканирования

Мы подошли к разделу посвященному приемам сканирования портов. Почти все указанные в этом разделе опции требуют для запуска root, это нужно учитывать. Также единовременно можно использовать только один метод (исключение UDP сканирование (-sU) его можно комбинировать с любым видом TCP сканирования.

  • -sS
    TCP SYN сканирование. Это наиболее популярный и достаточно незаметный тип сканирования т.к. при его использовании TCP соединение никогда не устанавливается до конца. Работает это так: Nmap посылает SYN пакет, для хоста это выглядит как будто с ним хотят установить реальное соединение. Если приходит ответ SYN/ACK — значит порт открыт, а если RST — значит закрыт. Если ответ не приходит или пришло ICMP-сообщение об ошибке — значит порт фильтруется.
TCP SYN сканирование
  • -sU
    UDP сканирование. Позволяет сканировать порты используемые UDP службами, может быть скомбинировано с TCP сканированием (например: -sS -sU). Работает путём отправки пустого UDP заголовка на соответствующие порты. Если приходит ошибка «порт недостижим», то в зависимости от типа ошибки Nmap определяет — порт закрыт или фильтруется. Если в ответ пришел UDP — пакет значит порт открыт, а если ответа нет — будет присвоен статус open|filtered. В этой ситуации чтобы уточнить данные можно использовать опцию определения версии (-sV). Работает UDP сканирование крайне медленно, потому что бы ускорить процесс, есть смысл задать список интересующих портов (например -p U:53)
nmap
  • -sA
    TCP ACK сканирование которое используется для определения правил брандмауэров и фильтруемых ими портов.
nmap
  • -sO
    Сканирование IP протокола, таким способом можно определить какие IP протоколы поддерживаются целью. При получении любого ответа по любому протоколу, такой порт помечается как открытый. Если получена ICMP ошибка «протокол недостежим» он будет помечен как закрытый, а иногда фильтруемый, если ответ не пришел то — «открыт|фильтруется».
nmap

Определение портов и порядка сканирования

Иногда возникает необходимость просканировать какой-то конкретный порт или диапазон портов. Причём если сразу известно какие порты являются целью, лучше так и делать, это может серьёзно сократить время и оставит меньше следов. Если не указывать порты которые мы хотим сканировать, то Nmap, по-умолчанию, будет сканировать все порты до 1024 включительно и все порты указанные в файле */nmap/nmap-services для протокола который будет сканироваться.

Для того чтобы вручную выбрать порты или диапазон портов для сканирования, используется параметр:
-p
означающий, что мы хотим сканировать только определенные порты. Мы должны сначала указать тип сканирования, а потом порты которые хотим сканировать, также можно указать протокол TCP (опция T:) или UDP (опция U:) (если не указывать задействуются оба), при этом не забывай, что чтобы применялось UDP сканирование должна использоваться опция -sU, а для TCP сканирования использоваться опция -sS (или аналогичная), например:

sudo nmap -sS -sU -p 22,80,111,U:53,137 scanme.nmap.org
nmap

Примечание
Также есть чуть менее распространенные способы определения целевых портов, если мы укажем параметр -F, то будет просканировано 100 самых распространенных портов, а если -p-, то все 65535.

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

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

  • -sV
    Определение версий. Обнаружив порт Nmap начинает посылать на него соответствующие запросы, что бы определить какая именно служба этот порт использует. Для этого используется информация из базы данных nmap-service-probes (лежит в папке nmap), где содержаться запросы и и перечислены виды ответов на них, для распознавания соответствующих служб.
nmap
  • —version-intensity
    Опция устанавливающая интенсивность, определяет какие запросы будут использоваться при сканировании. Можно установить значение от 1 до 9. Чем ниже значение, тем быстрее пройдет сканирование. Чем выше — тем медленнее, но больше вероятность правильного определения службы. Если опция не указанна используется значение по умолчанию — 7, которого достаточно в большинстве случаев. Если есть желание использовать максимальную интенсивность, используй параметр —version-all, это гарантирует, что каждый единичный запрос будет направлен на каждый порт (и запасись терпением, это может занять какое-то время)
  • -O
    Включить режим определения ОС. При включении этой опции Nmap посылает несколько TCP и UDP пакетов на хост, а полученные результаты сравниваются с данными из файла nmap-os-db (лежит в папке nmap) и если обнаруживает совпадения, показывает ответ для какой ОС и какой её версии типично такое поведение. По этим же совпадениям Nmap попытается определить тип устройства и его производителя
определение операционной системы

Примечание:
Я рассказал про параметры определения версий и ОС потому, что про них нужно знать и для полноты обзора, при этом на практике, в большинстве случаев, в место них лучше использовать опцию , которая сразу включает определение ОС, версий, трассировку и сканирование с использованием скриптов.

Скриптовый движок Nmap (NSE — Nmap Scripting Engine)

Одна из ключевых возможностей Nmap это использование скриптов при сканировании. Скриптов в комплекте поставляется огромное количество. Их около 600 и лежат они в */nmap/scripts, в том же каталоге лежит база данных скриптов в файле script.db. Для удобства использования все скрипты разбиты на категории. Фишка в том, что можно запускать скрипты сразу по категориям (по одной или по несколько). Это избавляет от необходимости запоминания названий отдельных скриптов, хотя некоторые скрипты стоит запомнить (но об этом позже). Также важно помнить, что некоторые скрипты оставляют много следов на целевой системе, а потому использовать их стоит аккуратно и помня про средства анонимизации.

С полным списком скриптов и их описанием можно ознакомится здесь.

Категории скриптов Nmap:

  • auth
    Категория скриптов которая работает с учетными данными аутентификации на исследуемой системе
  • broadcast
    Эти скрипты нужны для обнаружения хостов не перечисленных в командной строке, путем широковещательной передачи в локальной сети. При использовании аргумента newtargets, найденные хосты будут автоматически добавляться в очередь на сканирование
  • brute
    Скрипты для проведения brute force атак с целью получения учётных данных аутентификации.
  • default
    Базовый набор скриптов, определенных разработчиками как «скрипты по умолчанию» для расширения функционала Nmap. Именно они запускаются командой -sC или -A
  • discovery
    Скрипты этой категории собирают учетные, регистрационные и статистические данные о исследуемой системе
  • dos
    Эти скрипты проверяют исследуемую систему на уязвимости к атакам методом отказа в обслуживании
  • exploit
    Nmap попытается эксплуатировать некоторые известные уязвимости
  • external 
    Эти скрипты отправляют информацию в сторонние базы данных или ресурсы. Например: whois, virus total, robtex, geoplugin, ipinfo ну и т.д. для получения дополнительных данных о исследуемой цели
  • fuzzer
    Скрипты для отправки программному обеспечению сервера неожиданных или рандомизированных полей в каждом пакете. Как правило используется для выявления уязвимостей или ошибок в настройках. Это достаточно агрессивные скрипты, использование которых может повлечь сбои в работе сервера
  • intrusive
    В этой категории находятся наиболее агрессивные скрипты, направленные на выявление многих распространённых уязвимостей, как служб и сервисов, так и аудита паролей. Использование скриптов этой категории оставляет достаточно много следов в целевой системе и, как правило будет расценено администраторами как попытка несанкционированного вмешательства
  • malware
    Эти скрипты проверяют целевую систему на предмет заражения вредоносным ПО и наличия бекдоров.
  • safe
    Скрипты из этой категории предназначены для сбора общей информации и исследования сети. Они не выполняют активных действий направленных на выявление или эксплуатацию уязвимостей, не подразумевают негативных последствий для работоспособности целевой системы
  • version
    Это скрипты расширения функционала опции определения версий. Их нельзя запустить отдельно, они срабатывают по мере необходимости при выборе параметра определения версий (-sV)
  • vuln
    Скрипты проверяющие наличие известных уязвимостей, результаты будут показаны только в случае их обнаружения

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

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

  • -sC
    Сканирование на основе скриптов. Тоже самое, что и script=default, т.е. запускает сканирование с использованием набора скриптов из категории default (как я уже писал выше лучше использовать опцию —А)
Сканирование на основе скриптов
  • —script-help
    Информация о скрипте или категории. При выборе этой опции можно указать конкретный скрипт или категорию. При этом на экран будет выведено описание скрипта (категории) и ссылка на страницу справки по нему.
nmap
  • —script скрипт,категория скриптов,файл
    Используя эту опцию можно указать конкретный скрипт, или через запятую несколько скриптов, которые нужно запустить, также можно указать категорию (или несколько), либо запустить скрипт из указанного файла, например:
    sudo nmap —script whois-domain scanme.nmap.org
    запустит только скрипт whois-domain, а
    sudo nmap —script default,safe,whois-domain scanme.nmap.org
    запустит все скрипты из категорий default и safe и скрипт whois-domain
    Вообщем смысл в том, что можно комбинировать категории и скрипты так как тебя нужно, каких-либо ограничений здесь нет, даже если ты что-то впишешь неправильно Nmap тебе подскажет где ошибка.
  • —script-args имя1=значение1, имя2=значение2
    Эта опция позволяет передавать аргументы скриптам, для более точной настройки. Можно указывать сразу несколько аргументов, перечисляя их через запятую, в качестве значения можно указывать фиксированные значения, либо значения из файла. Например:
nmap -p 3306 --script mysql-audit --script-args mysql-audit.username='nselib/data/usernames.lst',mysql-audit.password='nselib/data/passwords.lst',mysql-audit.filename='nselib/data/mysql-cis.audit' no-jus.com
nmap

Подобная команда проверит настройки сервера базы данных MySQL в сравнении с эталонами CIS Oracle MySQL Benchmarks. При этом перебор имен пользователей будет проводится по списку из из файла usernames.lst, а пароли будут перебираться по словарю passwords.lst (оба словаря — это стандартные словари Nmap, можно указать свои словари или отдельно указать нужные значения).

Примечание:
Обрати внимание, что я не ставил пробелы после запятых. Это нужно для того чтобы Nmap понимал какие аргументы к какой опции относятся. Так происходит потому что командный интерпретатор обрабатывает каждый элемент отдельно. Пробелы можно ставить, но тогда группы аргументов нужно заключать в кавычки, чтобы это воспринималось интерпретатором как один объект. Например так:
—script-args «mysql-audit.username=’nselib/data/usernames.lst’, mysql-audit.password=’nselib/data/passwords.lst’, mysql-audit.filename=’nselib/data/mysql-cis.audit’«

Опции управления временем и производительностью

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

  • шаблон

Самих шаблонов существует 6. Их можно так и выбирать, просто указывая цифру от 0 до 6:

  1. paranoid(паранойдный) (0) — используется для обхода IDS т.е. системы обнаружения вторжений;
  2. sneaky(хитрый) (1) — аналогичен предыдущему;
  3. polite(вежливый) (2) — снижает интенсивность сканирования с целью меньшего потребления пропускной способности и машинных ресурсов;
  4. normal(обычный) (3) — режим используемый по-умолчанию;
  5. aggressive(агрессивный) (4) — режим повышенной интенсивности сканирования, требователен к скорости и надежности соединения;
  6. insane(безумный) (5) — самый быстрый и самый не точный режим

Обход брандмауэров / IDS

Вопрос обхода средств защиты и фильтрации очень обширен и неоднозначен. Всякие системы обнаружения вторжений постоянно развиваются и совершенствуются. Поэтому ты должен понимать что не существует какого-то волшебного рецепта или единого алгоритма обхода брандмауэра или других средств защиты. Каждая новая ситуация в чём-то уникальна, а потому здесь в большей степени решает прямота рук, а в ещё большей опыт и навыки. Но это статья не про это, а про Nmap. Разработчики позаботились о нас и включили в состав программы компоненты позволяющие обмануть средства защиты:

  • -f
    Фрагментация пакетов. При включении этой опции Nmap при всех видах сканирования будет использовать небольшие фрагментированные IP пакеты. Это означает что TCP заголовок будет разбит на части, и эти части будут посылаться цели в различных пакетах. В такой ситуации есть вероятность что фильтр просто не поймёт что мы хотим сделать, а соответственно не будет реагировать. По-умолчанию Nmap разбивает пакеты на части по 8 байт. Это значение можно задать в ручную используя опцию —mtu (размер должен быть кратным 8)
  • -D фиктивный_хост1,фиктивный_хост2,фиктивный_хост3,ME,фиктивный_хост5
    Сканирование с использованием фиктивных хостов. Для цели это будет выглядеть как-будто её сканируют все перечисленные тобой хосты, при этом довольно трудно будет понять откуда происходило настоящее сканирование. Фиктивные хосты нужно указывать через запятую, без пробелов. Параметром ME можно задать каким в списке будет твой настоящий адрес. Если этот параметр не указывать Nmap поставит его рандомно.
nmap
  • —data-length число
    Эта опция добавит к пакету заданное количество байт. Иногда позволяет запутать системы фильтрации
  • —spoof-mac MAC-адрес
    Подмена mac-адреса. В качестве значения можно указать желаемый mac-адрес. Если указать 0 — будет сгенерирован рандомный mac. Также можно указать префикс или название производителя (список префиксов производителей есть в файле nmap-mac-prefixes в папке программы) тогда Nmap будет использовать префикс для первой части mac-адреса и рандомное значение для второй

Вывод результатов Nmap

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

  • -oN имя_файла
    Стандартный вывод. Данные сканирования будут сохранены в указанный файл в таком виде, в каком мы их видим в терминале
  • -oX имя_файла
    XML-вывод. Формат удобный для последующей обработки результатов сторонними парсерами или ZenMap
  • -oG имя_файла
    Grepable вывод. При таком выводе данные каждого хоста будут выведены в одну строку. Он нужен если есть необходимость использовать для обработки утилиты командой строки grep, cut и т.д.
  • —resume имя_файла
    Продолжить прерванное сканирование. Если сканирование, по каким либо причинам, не было завершено, но его результаты сохранялись в файл (только -oN или -oG) его можно продолжить с момента оканочания командой: nmap —resume имя_файла. Другие опции задавать не нужно. Сканирование продолжиться с теми же опциями с которыми было начато изначально

Различные опции Nmap

  • -6
    Включить IPv6 сканирование. При таком сканирование используются такие же опции как и при обычном, с той разницей, что IP адрес нужно указывать в формате IPv6
  • -A
    Опции агрессивного сканирования. Как я упоминал ранее, запускает определение ОС (-O), сканирование с целью определения версии (-sV), сканирование с использованием скриптов (-sC) и трассировку (—traceroute)
  • -v
    Увеличить уровень вербальности. При включении этой опции на экран (и в результатах) будет выводится больше информации т.е. она будет более детальной. При продолжительном сканировании будет показываться приблизительное время завершения. А полученные результаты будут выводится по мере их получения, а не после окончания сканирования.

Сканирование уязвимостей с помощью Nmap. Использование Vulscan

Nmap вполне успешно можно использовать в качестве сканера уязвимостей. Для этого нужно скачать скрипт Vulscan (https://github.com/scipag/vulscan) который, в значительной мере расширит стандартные возможности Nmap.

git clone https://github.com/scipag/vulscan scipag_vulscan 
ln -s `pwd`/scipag_vulscan /usr/share/nmap/scripts/vulscan 

В скрипт уже интегрированы базы данных уязвимостей:

В случае необходимости, их можно обновить с сайта разработчиков:

https://www.computec.ch/projekte/vulscan/download/cve.csv
https://www.computec.ch/projekte/vulscan/download/exploitdb.csv
https://www.computec.ch/projekte/vulscan/download/openvas.csv
https://www.computec.ch/projekte/vulscan/download/osvdb.csv
https://www.computec.ch/projekte/vulscan/download/scipvuldb.csv
https://www.computec.ch/projekte/vulscan/download/securityfocus.csv
https://www.computec.ch/projekte/vulscan/download/securitytracker.csv
https://www.computec.ch/projekte/vulscan/download/xforce.csv

Скачанные обновления нужно будет поместить в каталог: nmap\scripts\vulscan\

Запуск этого скрипта происходит точно также, как и любого другого, единственное что нужно помнить, что его нужно совмещать с командой определения версий (-sV):

nmap -sV --script=vulscan/vulscan.nse 10.0.1.14

Дополнительно, для скрипта Vulscan, командой —script-args можно передать дополнительные аргументы:

  • vulscandb=база_данных
    Использовать указанную базу данных (из списка выше), по умолчанию будут задействованы все существующие базы
  • —script-args vulscaninteractive=1
    Включить интерактивный режим

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

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

Твой Pulse.