Visitors have accessed this post 5047 times.

Nmap — 3 часть

4
1
5047
18 сентября 2020 12:52
Автор: Rebrain Me
Linux

Visitors have accessed this post 5047 times.

Часть 3

Автор — Сергей Попов

1 часть статьи
2 часть статьи

Обход IDS/Firewall and spoofing

«А может, тебе еще ключ от квартиры, где деньги лежат?»

Не существует такой магической опции, которая позволяла бы обнаруживать и обходить брандмауэры и IDS (intrusion detection systems). Для этого необходимы навыки и опыт. Ниже только некоторые полезные опции:

-f (фрагментировать пакеты); ––mtu (используя заданное значение MTU)

При задании опции -f все типы сканирования (включая различные типы пингования) будут использовать маленькие фрагментированные IP-пакеты. Идея состоит в том, чтобы разбить TCP заголовок на части и посылать их в различных пакетах для того, чтобы не дать определить пакетным фильтрам и системам обнаружения вторжения, что вы делаете.

Будьте осторожны с этой опцией! Некоторые программы имеют проблемы с обработкой таких маленьких пакетов. Не используйте опцию -f вместе с ––mtu. Размер должен быть кратным 8. В то время, как фрагментированные пакеты не смогут пройти через пакетные фильтры и брандмауэры, которые ставят в очередь все IP-фрагменты, например, с помощью опции CONFIG_IP_ALWAYS_DEFRAG в ядре Linux. Другие могут использовать ее, потому что фрагменты в таких сетях могут идти по разным маршрутам.

Некоторые системы фрагментируют исходящие пакеты прямо в ядре. Linux с включенным модулем отслеживания соединения iptables — тому пример. Произведите сканирование с включенным сниффером Wireshark, чтобы убедиться, что отправляемые пакеты фрагментированы. Если ваша хостовая ОС является причиной проблем, попробуйте опцию ––send-eth для обхода IP уровня и отправки сырых ethernet фреймов.

Фрагментация поддерживается только для сырых пакетных функций Nmap, включая сканирование портов TCP и UDP (кроме connect сканирования и сканирования FTP bounce) и обнаружение ОС. Такие функции, как определение версии и Nmap Scripting Engine, как правило, не поддерживают фрагментацию, поскольку для связи с целевыми службами они используют стек TCP вашего хоста.

-D фиктивный_хост1[,фиктивный_хост2][,ME][,…] (Маскировка сканирования с помощью фиктивных хостов)

Производится сканирование с использованием фиктивных хостов; в этом случае цель сканирования считает, что заданные вами фиктивные хосты также производят ее сканирование. IDS цели могут сообщить о том, что было произведено 5-10 сканирований портов с каждого IP-адреса. Но система не сможет узнать, с какого из этих IP-адресов действительно производилось сканирование, а какие были лишь безвредными ловушками.

Хотя этот тип сканирования может быть распознан путем отслеживания маршрута, сбрасыванием ответа или другими активными методами, в большинстве случае он является эффективным способом сокрытия вашего IP-адреса.

При задании фиктивных хостов разделяйте их запятыми; вы также можете указать ME как один из фиктивных хостов для задания позиции в списке вашего реального IP-адреса. Если вы задаете ME в шестой позиции или дальше, некоторые обычные системы обнаружения сканирования портов (например, Solar Designer’s excellent Scanlogd) вряд ли вообще отобразят ваш IP-адрес. Если вы не задаете флаг ME, Nmap поставит его в произвольную позицию. Вы также можете использовать RND для генерации произвольного зарезервированного IP-адреса или RND:число — для генерации определенного числа адресов.

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

Фиктивные хосты используются и во время фазы обнаружения хостов (используя ICMP, SYN, ACK и что там еще), и во время сканирования портов. Также они используются во время удаленного определения ОС (-O). Эта техника не работает при сканировании с целью определения версии или обнаружения возможности установления TCP соединения. Во время сканирования задержки принудительно устанавливаются между каждой группой обманных запросов. Т.к. ловушки посылаются одной группой сразу, то это может временно нарушить работу системы контроля ограничений нагрузок.

Использование большого количества фиктивных хостов может снизить скорость вашего сканирования и даже сделать его менее точным. Также некоторые ISP будут отфильтровывать ваши обманные пакеты, в то время как некоторые вообще никак не ограничивают такого рода IP-пакеты.

-S IP_адрес (Изменить исходный адрес)

Опция -S, используется, чтобы указать интерфейс, который вы хотите использовать для отправки пакетов.

Также эта опция может быть использована для того, чтобы заставить «думать» цель сканирования, что ее сканирует кто-то другой. Как правило, в этом случае необходимо использовать также опции -e и -Pn. Имейте в виду, что вы не будете получать в ответ никаких пакетов (они будут отправлены на указанный вами IP-адрес), поэтому Nmap не будет выводить какой-либо полезной информации.

-e интерфейс (Использовать указанный интерфейс)

Указывает Nmap, какой интерфейс использовать для отправки и приема пакетов. Nmap в состоянии определить его автоматически, но сообщит вам, если не сможет.

––source-port номер_порта; -g номер_порта (Задать свой номер порта)

Одной из часто встречающихся ошибок при конфигурировании системы безопасности является тенденция доверять трафику, основываясь только на номере исходного порта. Опции -g и ––source-port (они эквиваленты) нужны для того, чтобы воспользоваться такими ошибками. Просто задайте номер порта, и Nmap будет использовать его для отправки пакетов. Большинство TCP вариантов сканирований, которые используют сырые сокеты, включая SYN сканирование, полностью поддерживают эту опцию, как и UDP сканирование. Данная опция не работает для обнаружения ОС. Nmap должна использовать различные номера портов, чтобы точно определить ОС.

––data hex string (Добавить шестнадцатеричные данные к пакету)

Эта опция позволяет вам включать произвольные данные в качестве полезной нагрузки в отправленные пакеты. Шестнадцатеричная строка может быть указана в любом из следующих форматов: 0xAABBCCDDEEFF…, AABBCCDDEEFF…  или \xAA\xBB\xCC\xDD\xEE\xFF…. Например, ––data 0xdeadbeef и ––data \xCA\xFE\x09. Обратите внимание, что если вы укажете число вроде 0x00ff, преобразование порядка байтов не будет выполнено. Убедитесь, что вы указываете информацию в порядке байтов, ожидаемом получателем.

––data-string string (Добавить строку к пакету)

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

Например: ––data-string «Сканирование, проводится службой безопасности, добавочный номер 2222» или ––data-string «FU mzfk». Имейте в виду, что никто, скорее всего, не увидит текст, оставленный этой опцией, если только не будет тщательно контролировать сеть с помощью сниффера или пользовательских правил IDS.

––data-length число (Добавить произвольные данные к посылаемым пакетам)

В обычных условиях Nmap посылает минимальные пакеты, содержащие только заголовок. Так, TCP пакеты составляют 40 байтов, а запросы на ICMP эхо-ответ — всего 28. Эта опция указывает Nmap добавлять заданное число произвольных байтов к большинству посылаемых пакетов. Эта опция не влияет на пакеты, используемые для определения ОС (-O).

––ip-options S|R [маршрут]|L [маршрут]|T|U … ; ––ip-options шестнадцатиричная строка (Посылать пакет с заданными ip-опциями)

Протокол IP предоставляет несколько опций, которые могут быть заданы в заголовке пакета. В отличие от повсеместно используемых TCP-опций, опции IP редко видны из соображений практичности и безопасности. Фактически, большинство роутеров интернета блокируют наиболее опасные опции, как, например, отслеживание источника. И все же опции могут быть полезны для определения и манипулирования сетевым маршрутом к целевым машинам. Например, возможно, вы сможете воспользоваться опцией для определения маршрута до цели, когда более традиционные методы в стиле tracerout будут бесполезны.

Наиболее действенным способом задания IP-опций является передача их значений в качестве аргументов опции ––ip-options. Каждое шестнадцатеричное значение задается с помощью \x, после которого следуют две цифры. Вы можете повторять символы, поставив после них звездочку и указав количество повторений. Например, \x01\x07\x04\x00*36\x01 — это шестнадцатеричная строка, содержащая 36 NUL байтов.Nmap также предоставляет механизм сокращений для задания таких опций. Просто передайте в качестве аргумента букву R, T или U для задания опции записи маршрута, записи временной метки или обеих, соответственно. Ослабление или ужесточение отслеживания источника может быть задано с помощью L или S, затем пробела, а затем разделенного пробелами списка IP-адресов.

––ttl значение (Установить IP поле time-to-live (время жизни))

Устанавливает IPv4 поле time-to-live в посылаемых пакетах в соответствии с заданным значением.

––randomize-hosts (Использовать произвольный порядок целей сканирования)

Указывает Nmap перемешать каждую группу, содержащую до 16384 хостов, перед началом сканирования. Это может сделать сканирование менее заметным для различных систем сетевого мониторинга, особенно если вы используете низкие значения таймингов. Если вы хотите перемешивать большие по размеру группы, то увеличьте значение PING_GROUP_SZ в nmap.h и перекомпилируйте программу.

Альтернативным решением является генерация списка целевых IP-адресов (-sL -n -oN имя_файла), обработка его с помощью Perl скрипта и затем передача его Nmap в качестве параметра опции -iL.

––spoof-mac MAC-адрес, префикс или название производителя (Задать собственный MAC-адрес)

Указывает Nmap использовать заданный MAC-адрес для всех отсылаемых сырых ethernet фреймов. Эта опция подразумевает использование, ––send-eth чтобы быть уверенным, что Nmap действительно использует пакеты уровня ethernet. MAC-адрес может быть задан в нескольких форматах. Если это «ноль», то Nmap выбирает полностью произвольный MAC-адрес для сессии. Если задается строка в виде простого набора шестнадцатеричных цифр (можно разделять пары двоеточиями), то Nmap будет использовать эту строку в качестве MAC-адреса. Если задано менее 12-ти шестнадцатеричных цифр, то Nmap заполняет остаток из 6 байтов произвольными значениями. Если в качестве аргумента не передается ни 0, ни шестнадцатеричная строка, то Nmap просматривает nmap-mac-prefixes в поисках названия производителя, содержащего данную строку (нечувствительна к регистру). Если найдено совпадение, то Nmap использует OUI производителя (3-байтный префикс), а оставшиеся 3 байта заполняет произвольно.

Примеры аргументов опции ––spoof-mac: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2 и Cisco.

Эта опция оказывает влияние только на сканирования с использованием сырых пакетов, такие как SYN сканирование или определение ОС, а также не ориентированные на соединение функции, такие как определение версии или Nmap Scripting Engine (NSE).

––proxies Список URL прокси с запятой в качестве разделителя (Передача TCP подключения по цепи прокси)

Позволяет Nmap установить TCP подключения с конечной целью через предоставленную цель из одного или более HTTP или SOCKS4 прокси. Прокси могут помочь спрятать истинный источник сканирования или обойти конкретные ограничения файрвола, но они могут затруднить производительность сканирования, увеличив задержку. Пользователю может понадобиться настроить таймауты Nmap и другие соответствующие параметры сканирования. Особенно понижение ––max-parallelism может помочь, поскольку некоторые прокси отказываются обрабатывать так много одновременных соединений, сколько по умолчанию открывает Nmap.

Эта опция принимает в качестве аргумента список прокси, состоящий из URL в формате proto://host:port. Используйте запятые для разделения узлов URL в цепи. Аутентификация еще не поддерживается. Валидными протоколами являются HTTP и SOCKS4.

––badsum (Посылать пакеты с фиктивными TCP/UDP контрольными суммами)

Указывает Nmap использовать неправильные TCP или UDP контрольные суммы для пакетов, отправляемых на целевой хост. Так как практически все реализации стека IP просто не обрабатывают такие пакеты, то любые ответы скорее всего приходят от брандмауэров или IDS, которые не обременяют себя проверкой контрольной суммы. Более детальное описание этой техники смотрите на https://nmap.org/p60-12.html.

––adler32 (Использовать устаревший Adler32 вместо CRC32C для SCTP контрольных сумм)

Позволяет использовать старый алгоритм расчета контрольных сумм Alder32 вместо CRC32C. Применимо для старых хостов, использующих RFC 2960.

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

«Нажми на кнопку
— Получишь результат».

Любая утилита полезна ровно настолько, насколько полезны выдаваемые ею результаты. Nmap выводит результаты сканирования как в удобной для людей форме, так и в xml — для автоматической обработки сторонним ПО.

-oN имя_файла (Нормальный вывод)

Перенаправляет нормальный вывод в заданный файл. Немного отличается от интерактивного вывода.

-oX имя_файла (XML вывод)

Перенаправляет XML вывод в заданный файл. Nmap включает определение типа документа (DTD), что позволяет XML парсерам использовать XML вывод Nmap.

-oS имя_файла (ScRipT KIdd|3 oUTpuT)

Script kiddie формат практически такой же, как и интерактивный, за тем исключением, что после окончания сканирования он перерабатывается. Больше КАПСА богу КАПСА.

-oG имя_файла (grepable вывод)

Этот формат обсуждается последним, так как он нежелателен для использования. Формат вывода XML намного мощнее, а также особенно удобен для опытных пользователей. XML — это стандарт, для которого доступно множество отличных парсеров, в то время как grepable вывод всего лишь простой формат, который просто описывает каждый хост в одну строку и может быть легко обработан стандартными Unix утилитами, такими как grep, awk, cut, sed, diff и Perl. Даже я иногда использую этот формат вывода.

Поиск хостов, на которых открыт SSH порт или работает Solaris, сводится к простой передаче результатов утилите grep, а затем утилитам типа awk или cut для вывода желаемой информации.

Grepable вывод состоит из комментариев (линий, начинающихся с #) и строк, описывающих цели. Каждая строка включает комбинацию из 6 помеченных полей, разделенных знаками табуляции и оканчивающихся двоеточием. Поля следующие: Хост, Порты, Протоколы, Ignored State, ОС, Seq Index, IP ID и Статус.

––append-output (Добавлять в конец, а не перезаписывать выходные файлы)

Когда вы передаете в качестве аргумента какому-либо флагу формата вывода (например, -oX или -oN) имя файла, то по умолчанию этот файл перезаписывается. Если вы хотите оставить текущее содержание файла, а новые результаты добавлять в конец, используйте опцию ––append-output.

––resume имя_файла (Продолжить прерванное сканирование)

Некоторые варианты сканирования могут занимать очень продолжительное время — порядка нескольких дней. И могут быть прерваны. Запуск целого сканирования с самого начала может быть нежелателен. К счастью, если были сохранены логи нормального (-oN) или grepable формата (-oG), пользователь может продолжить сканирование с того места, на котором оно было остановлено. Просто задайте опцию ––resume и передайте в качестве аргумента имя выходного файла обычного или grepable формата. Никакие другие опции использовать не разрешается, так как Nmap будет продолжать сканирование с заданными ранее опциями. Просто запустите Nmap командой nmap ––resume имя_лог_файла.

––stylesheet путь или URL (Устанавливает XSL таблицу стилей для преобразования XML вывода)

Nmap использует XSL таблицу стилей nmap.xsl для просмотра или перевода XML вывода в HTML. Если вы хотите использовать другой файл таблицы стилей, то передайте имя этого файла в качестве аргумента опции ––stylesheet.

––webxml (Загружает таблицу стилей с Nmap.Org)

Эта опция является просто псевдонимом ––stylesheet https://nmap.org/data/nmap.xsl.

––no-stylesheet (Убрать объявление XSL таблицы стилей из XML)

Задайте эту опцию, чтобы не ассоциировать какую-либо XSL таблицу стилей с XML выводом. В этом случае директива xml-stylesheet опускается.

Опции управления вербальностью и отладкой

«Абыр, Абыр…. Абырвалг»

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

-v (Увеличить уровень вербальности)

Увеличение уровня вербальности. Задайте эту опцию дважды для увеличения количества выводимой информации: -vv или прямо укажите уровень вербальности, например, -v3.

-d [уровень] (Увеличить уровень отладки)

Когда даже вербальный режим не предоставляет вам достаточную информацию, вы можете использовать отладку! Уровень отладки можно передавать как аргумент опции -d. Например, опцией -d9 устанавливается девятый уровень. Это наивысший уровень.

Отладка полезна, если вы предполагаете, что в Nmap есть баг, или если вы просто озадачены тем, что делает Nmap и почему.

––reason (Показать причины состояний портов и хостов)

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

––stats-every time (периодический вывод статуса)

Периодически выводит статус сканирования через определенный интервал времени. Полезно при затяжных сканированиях.

––packet-trace (Отслеживание принятых и переданных пакетов и данных)

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

––open (Показывать только открытые (или возможно открытые) порты)

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

––iflist (Вывести список интерфейсов и роутеров)

Выводит список интерфейсов и системных роутеров, обнаруженных Nmap. Это полезно для отладки проблем с роутерами и неправильного описания устройств (когда, например, Nmap рассматривает PPP соединение как ethernet).

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

В этой секции описываются некоторые важные (и не очень важные) опции, которые не подходят к другим категориям.

-6 (Включает IPv6 сканирование)

Пинг-сканирование, сканирование портов, определение версий и скриптовый движок Nmap — все они имеют поддержку протокола IPv6. Синтаксис команд такой же, как и обычный, за исключением того, что вы добавляете опцию -6. Конечно же, вы должны использовать синтаксис IPv6. Хотя протокол IPv6 еще не завоевал весь мир, в некоторых (обычно азиатских) странах он используется интенсивно, и большинство современных операционных систем поддерживают его.

Чтобы использовать Nmap с протоколом IPv6, и источник, и цель сканирования должны быть настроены на работу с ним. Если ваш ISP (как большинство из них) не предоставляет вам IPv6 адрес, вы можете использовать широко распространенный и работающий с Nmap сервис Tunnel Brokers. Можно использовать бесплатный сервис на http://www.tunnelbroker.net.

-A (Опции агрессивного сканирования)

Этой опцией активируется набор агрессивных опций сканирования. Сейчас этот набор включает определение ОС (-O), сканирование с целью определения версии (-sV), сканирование с использованием скриптов (-sC) и трассировку (––traceroute). Эта опция активирует только возможности, но не устанавливает опции времени (timing) (такие как -T4) или опции вербального вывода (-v), которые вы, возможно, хотели бы использовать.

––datadir имя_директории (Определяет место расположения файлов Nmap)

Во время работы Nmap получает некоторые данные из файлов nmap-service-probes, nmap-services, nmap-protocols, nmap-rpc, nmap-mac-prefixes и nmap-os-db. Если месторасположение какого-либо из этих файлов было задано конкретно (используя опции ––servicedb или ––versiondb), то оно используется для этого файла. Далее Nmap ищет эти файлы в директории, заданной опцией ––datadir (если задана). Если файлы не были найдены там, то Nmap ищет их в директории, определенной переменной окружения NMAPDIR. Далее идет ~/.nmap.  для реальных и действующих в данный момент UIDs

––servicedb файл_служб (Задает определенный файл служб)

Указывает Nmap использовать заданный файл служб вместо файла nmap-services, который поставляется вместе с Nmap. Использование этой опции также подразумевает использование опции быстрого сканирования (-F). Смотрите описание ––datadir для более подробной информации о файлах данных Nmap.

––versiondb файл_запросов_служб (Задает определенный файл запросов для служб)

Указывает Nmap использовать заданный файл запросов для служб вместо файла nmap-service-probes, который поставляется вместе с Nmap. Смотрите описание ––datadir для более подробной информации о файлах данных Nmap.

––send-eth (Использовать сырой уровень ethernet)

Указывает Nmap посылать пакеты с использованием более низкого сырого уровня ethernet, а не с использованием более высокого уровня IP (сетевого). По умолчанию Nmap выбирает тот способ, который больше подходит для используемой платформы. Сырые сокеты (уровень IP) в общем случае более эффективны для Unix машин, в то время как использование ethernet фреймов необходимо для операционных систем Windows, так как Microsoft отключил в них поддержку сырых сокетов. Nmap по-прежнему использует сырые IP пакеты на Unix несмотря на эту опцию, когда нет другого выбора (как в случае с не-ethernet соединениями).

––send-ip (Использовать сырой уровень IP)

Указывает Nmap посылать пакеты с использованием сырых IP-сокетов, а не более низкого уровня ethernet фреймов. Это дополнение к опции ––send-eth? описанной выше.

––privileged (Подразумевать, что у пользователя есть все привилегии)

Указывает Nmap, что у пользователя есть необходимые привилегии для использования сырых сокетов, пакетного сниффинга и сходных операций, которые обычно требуют привилегий пользователя root на Unix системах. По умолчанию Nmap завершает работу, если были запрошены такие операции, но geteuid не нуль.

Опцию ––privileged хорошо использовать на системах с возможностями ядра Linux или подобных, которые могут быть сконфигурированы так, что непривилегированные пользователи смогут осуществлять сканирование с использованием сырых сокетов. Удостоверьтесь, что эта опция указана перед любыми опциями, требующими привилегий (сканирование SYN, определение ОС и т.д.). Переменная окружения NMAP_PRIVILEGED может быть установлена как равнозначная альтернатива опции ––privileged.

––unprivileged (Подразумевать, что у пользователя нет привилегий для использования сырых сокетов)

Эта опция противоположна ––privileged. Указывает Nmap, что у пользователя нет привилегий для использования сырых сокетов и сниффинга. Полезна для тестирования, отладки или когда по какой-то причине на вашей системе не работает механизм сырых сокетов. Переменная окружения NMAP_UNPRIVILEGED может быть установлена как равнозначная альтернатива опции ––unprivileged.

––release-memory (Освободить память перед завершением работы)

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

––interactive (Запустить в интерактивном режиме)

Запускает Nmap в режиме, который предлагает интерактивные подсказки, позволяющие запускать несколько процессов сканирования (параллельно или в фоне). Эта опция полезна для людей, которые запускают сканирование с многопользовательской системы, так как они часто хотят протестировать свою безопасность, при этом не давая узнать кому-либо другому в системе, что является целью их сканирования. Используйте ––interactive, для запуска этого режима, а затем нажмите h для справки. Эта опция используется редко, так как собственные командные оболочки более знакомы и содержат больше возможностей. Включает оператор (!) для запуска команд оболочки, что является одной из многих причин, почему не следует устанавливать Nmap setuid root. setuid root.

-V; ––version (Вывести номер версии)
-h; ––help (Вывести страницу помощи)

Взаимодействие во время выполнения

«А хотите — я его стукну, и он станет фиолетовым в крапинку?»

Во время работы Nmap все нажатые клавиши фиксируются. Это позволяет вам взаимодействовать с программой, не прерывая и не перезапуская ее. С помощью некоторых клавиш можно изменить опции сканирования, при использовании же других будут выведены сообщения о текущем статусе сканирования. Существует договоренность, что строчные буквы увеличивают количество выводимой информации, а прописные буквы уменьшают. Для справки можно нажать ‘?’.

v / V увеличить / уменьшить уровень вербальности

d / D увеличить / уменьшить отладочный уровень

p / P включить / выключить отслеживание пакетов

? вывести справку о взаимодействии во время выполнения

Скриптовый движок (NSE — NMAP SCRIPTING ENGINE)

«Неназываемый, бесспорно, является объектом познания,
тем более интересным для Орлангура, что он является непознаваемым.
Но даже Орлангур не в силах постичь до конца суть Неназываемого».

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

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

Все они описаны в https://nmap.org/book/nse-usage.html#nse-categories.

Список всех доступных скриптов: https://nmap.org/nsedoc/index.html

Скриптовый движок Nmap детально описан на https://nmap.org/book/nse.html и настраивается с помощью следующих опций:

-sC

Осуществляет сканирование на основе дефолтного набора скриптов. Эквивалентно опции ––script=default.

––script имя файла|категории-скриптов|директория|выражение[,…]

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

Есть две специальные функции:

  • Префикс имен скриптов и выражение с + для принудительного их запуска, даже если в обычных условиях они не должны запускаться (например, релевантная служба не была обнаружена на целевом порту).
  • Аргумент all, который означает, что должны использоваться все скрипты в базе данных Nmap. Будьте осторожны с этим, поскольку NSE содержит опасные скрипты, такие как эксплойты, взломщики аутентификации брут-форсом и атаки отказа в обслуживании.

Файлы и директории могут быть относительными или абсолютными. Абсолютные имена используются непосредственно. Относительные пути ищутся в следующих местах, пока скрипт не будет найден:

  • ––datadir $NMAPDIR
  • ~/.nmap (не ищется на Windows)
  • HOME\AppData\Roaming\nmap (только на Windows)
  • директория, содержащая исполняемый файл nmap
  • директория, содержащая исполняемый файл nmap, за которой следует ../share/nmap
  • NMAPDATADIR
  • текущая директория

Когда дано имя директории, Nmap загружает каждый в нее файл, имя которого оканчивается на .nse. Все другие файлы игнорируются, и в директориях не происходит рекурсивный поиск. Когда дано имя файла, ему необязательно иметь расширение .nse; если нужно, оно будет добавлено автоматически. По умолчанию, скрипты Nmap размещены в поддиректории scripts директории данных Nmap (смотрите https://nmap.org/book/data-files.html). Для эффективности скрипты индексируются в базе данных, хранящейся в scripts/script.db, она содержит список категорий, к которым принадлежит скрипт. При упоминании скриптов по имени из script.db вы можете использовать подстановочный символ в стиле ‘*’.

nmap ––script «http-*»

Загрузить все скрипты, имя которых начинается на http-, такие как http-auth и http-open-proxy. Аргумент ––script должен быть заключен в кавычки для защиты от раскрытия подстановочных символов в оболочке.

Более сложный выбор сценария может быть выполнен, если вы используете операторы and, or и not для создания логических выражений. Операторы имеют тот же приоритет, как и в Lua: not — самый высокий, далее следует and, а затем or. Вы можете изменить приоритет, используя скобки. Поскольку выражения содержат символы пробелов, то их необходимо заключить в кавычки.

nmap ––script «not intrusive»

Загружает все скрипты, за исключением тех, которые в категории intrusive.

nmap ––script «default or safe»

Эта функциональность эквивалентна nmap ––script «default,safe». Она загружает все скрипты, которые размещены в категории по умолчанию (default), в safe или в обеих.

nmap ––script «default and safe»

Загружает скрипты, которые есть в обеих категориях: в default и в safe.

nmap ––script «(default or safe or intrusive) and not http-*»

Загружает скрипты из категорий default, safe или intrusive, кроме тех, чьи имена начинаются на http-.

––script-args n1=v1,n2={n3=v3},n4={v4,v5}

Позволяет вам передавать аргументы в NSE скрипты. Аргументы представляют собой разделенный запятыми список из пар имя=значение. Имена и значения могут быть строками, не содержащими пробелы или символы ‘{’, ‘}’, ‘=’, или ‘,’. Для включения этих символов в строку поместите ее в двойные или одиночные кавычки. Внутри закавыченной строки ‘\’ экранирует кавычку. Обратный слэш используется только для экранирования кавычек в этом случае; во всех других случаях обратный слэш понимается буквально.

Значения также могут быть таблицами, заключенными в {}, прямо как в Lua. Таблица может содержать простую строку значений или больше пар имя-значение, включая вложенные таблицы. У многих скриптов их аргументы определяются именем скрипта, как xmpp-info.server_name. Вы можете использовать полностью определенную версию, чтобы воздействовать только на определенный скрипт, или вы можете передать неквалифицированную версию (server_name в этом случае) для оказания эффекта на все скрипты, использующие имя аргумента. Скрипт начнет с проверки полностью определенных имен аргументов (имя указано в документации) перед принятием неквалифицированных имен аргументов. Например: ––script-args ‘user=foo,pass=»,{}=bar»,whois={whodb=nofollow+ripe},xmpp-info.server_name=localhost’. Онлайн портал https://nmap.org/nsedoc/ содержит списки всех аргументов, которые принимает каждый скрипт.

––script-args-file имя_файла

Позволяет вам загружать аргументы для NSE скриптов из файла. Любой аргумент в командной строке вытесняет его значение из файла. Файл может иметь абсолютный путь, или относительный обычного пути поиска Nmap (NMAPDIR и т.д.) Аргументы могут быть разделены запятыми или новыми строками, а в противном случае следуют тем же правилам, что и ––script-args без требования особого заключения в кавычки и экранирования, поскольку они не разбираются в оболочке.

––script-help имя_файла|категория|директория|выражение|all[,…]

Показывает справку по скриптам. Для каждого совпадающего скрипта выдается спецификация, Nmap печатает имя скрипта, его категорию и описание. Имя указывается также, как его принимает ––script; поэтому, например, если вы хотите получить помощь по скрипту ftp-anon, вам следует запустить nmap ––script-help ftp-anon. Помимо получения справки по отдельным скриптам, вы можете использовать это для предварительного просмотра, какие скрипты входят в определенные группы, например, nmap ––script-help default.

––script-trace

Эта опция делает то же самое, что и ––packet-trace, но на один ISO уровень выше. Если задана эта опция, то все входящие и исходящие соединения, осуществляемые скриптом, выводятся на экран. Выводимая информация включает в себя используемый коммуникационный протокол, источник, цель и переданные данные. Если более 5% переданных данных невозможно вывести на экран, то вывод будет представлять собой шестнадцатеричный (hex) дамп. Указание ––packet-trace также включает трассировку скриптов.

––script-updatedb

Этой опцией обновляется база скриптов scripts/script.db, которая используется Nmap для определения доступных скриптов по умолчанию и их категорий. Обновлять базу необходимо, только если вы добавили или удалили NSE скрипты из директории scripts, или поменяли категорию какого-нибудь скрипта. Эта опция обычно используется без аргументов: nmap ––script-updatedb.

Готовые библиотеки NSE

«— Мистер Фикс, у вас есть план?
— У меня целых два плана, Мистер Фикс
».

Все они находятся в папке %nmap%/nselib. Чтобы не изобретать велосипед, придумывая, например, как выполнить запрос к DNS, вот список наиболее часто используемых библиотек:

  • backdoor — простейшая реализация бэкдора в системе;
  • bin — работа с двоичными данными;
  • datafiles — библиотека для работы со встроенными файлами Nmap (например, nmapprotocols — описание и номера портов различных протоколов);
  • default — наиболее часто используемые сетевые сценарии;
  • dns — работа с DNS;
  • http — работа с HTTP;
  • msrpc — библиотека для работы с вызовами MSRPC;
  • mysql — некоторые операции с MySQL;
  • netbios — работа с NetBIOS-трафиком;
  • nmap — взаимодействие с ядром сканера;
  • packer — манипулирование с пакетами в RAW-виде;
  • proxy — работа с прокси;
  • shortport — работа с портами;
  • smb — работа с SMB-протоколом;
  • ssh1/ssh2 — работа с SSH.

Примеры использования скриптов NSE

  • Поиск MySQL серверов, позволяющий вход root без пароля или анонимный вход

Для этого имеется скрипт mysql-empty-password:

nmap ––script-help mysql-empty-password

  • Брутфорс DNS

Скрипт dns-brute пытается перечислить DNS имен хостов, делая запросы по распространенным поддоменам. Обнаружение поддоменов, связанных с доменом организации, во время оценки безопасности может раскрыть новые цели.

nmap -p 80 ––script "dns-brute" digitalocean.com

  • Поиск хостов на одном IP

Другая тактика по расширению площади атаки — это поиск виртуальных хостов на одном IP-адресе, который вы пытаетесь скомпрометировать (или оценить). Это может быть сделано с использованием скриптов hostmap-*. На данный момент в NSE коллекции таких скриптов три: hostmap-bfk, hostmap-ip2hosts, hostmap-robtex.

nmap -sn ––script "hostmap-ip2hosts" spryt.ru

  • Поиск интересных файлов на веб-сервере (веб-сайте)

Это более агрессивный тест. Он пытается найти интересные файлы и каталоги на веб-сервере. Поскольку это осуществляется обычным перебором популярных названий, то он оставляет много следов в веб-логах сервера. Они выглядят как сообщения об ошибках при попытке доступа к несуществующим файлам и каталогам (HTTP 404 not found).

nmap ––script "http-enum" spryt.ru

  • Запуск всех скриптов для сбора информации о веб-сервере и веб-сайте

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

Пример команды:

nmap ––script "auth,discovery,version" -p 80,443 suip.biz

С исправлением надписей на русском:echo -e "$(sudo nmap ––script "auth,discovery,version" -p 80,443 suip.biz)"

Заключение

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

От редакции

Материал получился настолько объемный, что мы решили разделить его на несколько частей. 1 часть можно почитать здесь, 2 часть — здесь.

Если вам интересно посещать бесплатные онлайн-мероприятия по DevOps, Kubernetes, Docker, GitlabCI и др. и задавать вопросы в режиме реального времени, подключайтесь к каналу DevOps by REBRAIN.
*Анонсы мероприятий каждую неделю

Практикумы для специалистов по инфраструктуре и разработчиков — https://rebrainme.com.
Наш Youtube-канал — https://www.youtube.com/channel/UC6uIx64IFKMVmj12gKtSgBQ.

Агентство Fevlake, проектируем и поддерживаем IT-инфраструктуры с 2012 года — https://fevlake.com.

Комментарии (3)
Введено символов из возможных
Не отвечать
Влад

Ссылка на 2 часть — https://rebrainme.com/blog/linux/nmap-2/ резолвится на 1 часть — https://rebrainme.com/blog/linux/nmap/
[code]
wget -O /dev/null https://rebrainme.com/blog/linux/nmap-2/
—2021-08-12 14:39:08— https://rebrainme.com/blog/linux/nmap-2/
Resolving rebrainme.com (rebrainme.com)… 185.206.165.150
Connecting to rebrainme.com (rebrainme.com)|185.206.165.150|:443… connected.
HTTP request sent, awaiting response… 301 Moved Permanently
Location: https://rebrainme.com/blog/linux/nmap/ [following]
—2021-08-12 14:39:08— https://rebrainme.com/blog/linux/nmap/
Reusing existing connection to rebrainme.com:443.
HTTP request sent, awaiting response… 200 OK
[/code]

Вам также может понравится

Nmap — 3 часть
array(1) { [0]=> object(WP_Term)#11555 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(28) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(28) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Часть 3
Автор — Сергей Попов

1 часть статьи
2 часть статьи
Обход IDS/Firewall and spoofing
«А может, тебе еще ключ от квартиры, где деньги лежат?»
Не существует такой магической опции, которая позволяла бы обнаруживать и обходить брандмауэры и IDS (intrusion detection systems). Для этого необходимы навыки и опыт. Ниже только некоторые...

4
1
18 сентября 2020
NMap — часть 2
array(1) { [0]=> object(WP_Term)#10987 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(28) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(28) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Часть 2
Автор — Сергей Попов

1 часть статьи
Сканирование портов
Рассказать вам шутку про UDP?
Только она до вас не дойдет.
Изначально Nmap был эффективным средством сканирования портов, и, несмотря на развитие прочего функционала, он им и остается.

Большинство типов сканирования доступны только привилегированным пользователям, потому...

2
0
11 сентября 2020
ТОП-8 книг по Docker
array(1) { [0]=> object(WP_Term)#11555 (16) { ["term_id"]=> int(8) ["name"]=> string(6) "Docker" ["slug"]=> string(6) "docker" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(8) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(8) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(8) ["category_count"]=> int(8) ["category_description"]=> string(0) "" ["cat_name"]=> string(6) "Docker" ["category_nicename"]=> string(6) "docker" ["category_parent"]=> int(0) } } Docker

Docker появился в 2013 году и до сих пор остается самым популярным инструментом контейнеризации. Так, например, он входит в ТОП-5 технологий, необходимых DevOps-инженеру, по мнению работодателей с hh. Для тех, кто предпочитает академический подход к изучению технологий, мы подготовили список книг, посвященных Docker.
Использование Docker. Моуэт...

9
0
23 октября 2020