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

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

Когда мы создавали эту систему, считалось, что она будет использоваться для задач исследования сети, более изощренного варианта определения версии, исследования уязвимостей. NSE может быть исполльзован даже для обнаружения уязвимостей.

Чтобы отразить все многообразие возможностей использования скриптов и при этом упростить выбор необходимого скрипта, каждый из них содержит поле, где указано к какой категории он принадлежит. Сейчас определены следующие категории: safe, (intrusive), malware, version, discovery, vuln, auth и default. Все они описаны в https://nmap.org/book/nse-usage.html#nse-categories.

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

-sC

Осуществляет сканирование на основе скриптов. Эквивалентно опции --script=default. Некоторые их применяемых здесь скриптов относятся к категории intrusive (навязчивые) и не должны быть использованы для сканирования целевой сети без разрешения.

--script <категории-скриптов>|<директория>|<имя_файла>|all

Осуществляет сканирование на основе скриптов (как -sC) используя разделенный запятыми список категорий скриптов, отдельных файлов скриптов или директорий содержащих скрипты вместо стандартного набора скриптов. Сначала Nmap пытается интерпретирует все аргументы как категории, затем (в случае неудачи) как файлы или директории. Файл скрипта или директория скриптов могут быть определны с использованием абсолютного или относительного пути. Абсолютные пути используются так, как вы их зададите. Относительные пути будут определяться относительно: --datadir/; $NMAPDIR/; ~/.nmap/ (не используется в Windows); NMAPDATADIR/ или ./. Также все эти папки будут проверяться на наличие поддиректории scripts/

Если вы определили директорию со скриптами, и она была найдена, то Nmap загружает все NSE скрипты (все файлы с расширением .nse) из этой директории. Файлы без расширения nse игнорируются. Nmap не производит рекурсивный поиск скриптов во всех поддиректориях. Если вы указываете конкретный файл, то его расширение не обязательно должно быть nse.

По умолчанию скрипты Nmap хранятся в папке scripts - поддиректории основного каталого Nmap. Для большей производительности, все скрипты проиндексированы в базе даннных scripts/script.db, где указано к какой категории или категориям принадлежит каждый скрипт. Для исполнения всех скриптов из базы данных Nmap задайте атрибут all.

Злонамеренные скрипты запускатся не в "песочнице" (sandbox) и поэтому могут повредить вашу систему или нарушить вашу анонимность. Никогда не используйте скрипты от третьих лиц до тех пор, пока не будете доверять автору или сами тщательно просмотрите скрипт.

--script-args <имя1>=<значение1>, <имя2>={<имя3>=<значение3>}, <имя4>=<значение4>

Позволяет вам передавать аргументы NSE скриптам. Аргументы передаются как пары имя=значение. Передаваемый аргумент обрабатывается и хранится в Lua таблице, к которой имеют доступ все скрипты. Имена передаются как строки (должны быть буквенно-цифровыми значениями) и используются в качестве ключей в argument-table. Значения могут быть также строками или в свою очередь таблицами (заключенными в ‘{’ и ‘}’). Такие подтаблицы позволяют переопределить аргументы для конкретных скриптов (например, если вы хотите предоставить различным скриптам различные пары login/password). Например, вы можете определить аргументы через запятые: user=bar, password=foo и anonFTP={password=nobody@foobar.com}. Если вы хотите переопределить опцию для скрипта, вы должны проиндексировать подтаблицу с помощью id скрипта, т.к. это единственный способ указать скрипту на наличие специального аргумента.

--script-trace

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

--script-updatedb

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