Назад к обновлениям
New releaseAug 18, 2026

nmap-vulners v1.5

Скрипт NSE для Nmap, который запрашивает API Vulners для выявления известных уязвимостей (CVE) для обнаруженных сетевых служб, расширяя стандартное сканирование портов автоматизированным поиском CVE и оценкой CVSS.

Поделиться

nmap-vulners

Превращает сканирование сервисов nmap в список CVE, оценок CVSS и известных эксплойтов.

Три NSE-скрипта, которые берут программное обеспечение, уже идентифицированное nmap, спрашивают у базы данных Vulners, что о нём известно, и выводят ответ в отчёт о сканировании.

tests license nmap data stars

vulners.nse против scanme.nmap.org


Три скрипта

СкриптНужен ключЧто делает
vulners.nseнетОтправляет каждый найденный nmap CPE в публичную конечную точку Vulners и выводит всё, что о нём известно, начиная с самого высокого CVSS
vulners_enterprise.nseдаТот же поиск через API Vulners v4: оценки CVSS v3 и эксплойты, ссылающиеся на каждый CVE
http-vulners-regex.nseнетСнимает отпечаток веб-программного обеспечения по HTTP-заголовкам и содержимому страниц, чтобы двум другим было что искать, даже когда -sV не может его назвать

Они независимы. Запустите один или все три — regex-скрипт автоматически передаёт свои находки двум другим.

Установка

macOS, Linux, Kali, WSL — одна строка, без аргументов:

curl -fsSL https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.sh | sh

Windows — PowerShell от имени администратора:

irm https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.ps1 | iex

Установщик спрашивает у nmap, где тот хранит свои данные, копирует туда скрипты и их файлы данных, пересобирает базу скриптов, а затем проверяет, что --script vulners действительно разрешается в только что установленное — у nmap есть собственный vulners.nse, и этот заменяет его.

Без root и другие параметры
# into ~/.nmap, no sudo; the installer prints the NMAPDIR line to add to your profile
curl -fsSL https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.sh | sh -s -- --user

# a specific directory
./install.sh --prefix /usr/local/share/nmap

# a specific release
./install.sh --ref v1.5

# remove everything it installed
./install.sh --uninstall

PowerShell принимает те же параметры: -User, -Prefix, -Ref, -Uninstall.

Из клонированного репозитория
git clone https://github.com/vulnersCom/nmap-vulners
cd nmap-vulners
./install.sh

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

nmap -sV --script "$PWD/vulners.nse" <target>

При запуске из клона используйте абсолютный путь. nmap сначала разрешает относительный --script ./vulners.nse через собственную script.db и незаметно запускает копию, поставляемую с nmap, вместо вашей.

Вручную

Пять файлов, две директории:

ФайлКуда
vulners.nse, vulners_enterprise.nse, http-vulners-regex.nse<nmap data dir>/scripts/
http-vulners-regex.json, http-vulners-paths.txt<nmap data dir>/nselib/data/

Затем sudo nmap --script-updatedb.

Каталог данных nmap обычно находится в /usr/share/nmap (Debian, Ubuntu, Kali), /usr/local/share/nmap (собранный из исходников), /opt/homebrew/share/nmap (Homebrew) или C:\Program Files (x86)\Nmap (Windows). Чтобы быть уверенным, спросите у nmap:

nmap -d2 --script-help probe 2>&1 | grep nse_main.lua

Директория, содержащая nse_main.lua, — та, которую использует этот nmap.

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

vulners — ключ не требуется

nmap -sV --script vulners [--script-args mincvss=<score>] <target>

Каждый CPE, о котором сообщает nmap, проверяется; каждая уязвимость выводится с её оценкой, шкалой, на которой находится эта оценка, и ссылкой. Записи с известным эксплойтом помечаются *EXPLOIT* и показываются независимо от порога, потому что эксплуатируемая уязвимость низкой степени серьёзности всё равно означает, что вас взломали.

vulners_enterprise — ключ API Vulners

export VULNERS_API_KEY=<token>
nmap -sV --script vulners_enterprise [--script-args mincvss=<score>] <target>

vulners_enterprise.nse против scanme.nmap.org

Корпоративная конечная точка отвечает метриками CVSS v3 и ссылками на эксплойты, собранными Vulners, поэтому эксплуатируемый CVE помечается *HAS EXPLOIT*, а сам эксплойт перечисляется рядом. Все CPE порта передаются в одном запросе.

http-vulners-regex — снять отпечаток того, что -sV не может назвать

nmap -sV --script http-vulners-regex [--script-args paths={"/"}] <target>

http-vulners-regex.nse против scanme.nmap.org

178 шаблонов сопоставляют HTTP-заголовки и разметку страниц — Server, X-Powered-By, теги генераторов, URL ресурсов — с CPE: веб-серверы, CMS, фреймворки, плагины WordPress, JavaScript-библиотеки. Всё, что найдено, публикуется для порта, поэтому vulners и vulners_enterprise проверяют это в том же сканировании.

Аргументы скриптов

vulners

АргументПо умолчаниюЗначение
vulners.mincvss0Скрывать уязвимости с оценкой ниже этого значения. Бюллетени и эксплойты без оценки показываются всегда
vulners.api_hostvulners.comИмя хоста API
vulners.api_port443Порт на api_host

vulners_enterprise

АргументПо умолчаниюЗначение
vulners_enterprise.mincvss0Как выше
vulners_enterprise.api_key-Токен API. Предпочтительна переменная окружения, см. ниже
vulners_enterprise.api_key_file-Абсолютный путь к файлу, первая строка которого — токен
vulners_enterprise.api_hostvulners.comИмя хоста API
vulners_enterprise.api_port443Порт на api_host

http-vulners-regex

АргументПо умолчаниюЗначение
http-vulners-regex.pathshttp-vulners-paths.txt (125 путей)Lua-список путей или одна строка, задающая файл с одним путём в строке

Весь список путей передаётся в одном HTTP-конвейере. Файл, который невозможно прочитать, останавливает скрипт, а не приводит к откату к встроенному списку, поэтому опечатка в имени файла не может превратить сканирование трёх путей в сканирование 125 путей.

Где хранить ключ API

В порядке предпочтения:

  1. VULNERS_API_KEY в окружении
  2. --script-args vulners_enterprise.api_key_file=/absolute/path
  3. --script-args vulners_enterprise.api_key=<token>

Третий способ удобен, но протекает: nmap копирует свою командную строку в каждый отчёт, поэтому токен попадает в атрибут args вывода -oX и в историю вашей оболочки. Сам скрипт нигде не записывает токен, включая свой отладочный вывод — об этом говорит регрессионный тест.

Токены находятся в вашем аккаунте vulners.com. Без него vulners_enterprise молчит и ничего не отправляет.

Как три скрипта работают вместе

nmap -sV
   |
   +-- service fingerprint --> port.version.cpe ------------+
   |                                                        |
   +-- http-vulners-regex.nse                               |
         requests the path list in one pipeline             |
         matches headers and bodies against 178 patterns    |
         publishes the CPEs it found for that port ---------+
                                                            |
                                                            v
                                     vulners.nse / vulners_enterprise.nse
                                        one batched request per port
                                        answers cached for the whole scan
                                        sorted by CVSS, exploits marked

Машиночитаемый вывод

Всё, что выводят скрипты, также структурировано, поэтому вывод -oX можно разбирать, не трогая человекочитаемый текст:

<script id="vulners_enterprise">
  <table key="cpe:/a:apache:http_server:2.4.7">
    <table>
      <elem key="id">CVE-2021-44790</elem>
      <elem key="type">cve</elem>
      <elem key="cvss">9.8</elem>
      <elem key="cvss_type">cvss3.1</elem>
    </table>
    <table>
      <elem key="id">EDB-ID:51193</elem>
      <elem key="type">exploitdb</elem>
      <elem key="cvss">9.8</elem>
      <elem key="cvss_type">cvss3.1</elem>
      <elem key="is_exploit">true</elem>
    </table>
  </table>
</script>

Ключи — id, type, cvss, cvss_type и is_exploit, который присутствует только в записях, у которых он есть. Таблицы результатов ключуются по CPE, для которого они найдены. Бюллетень без оценки не содержит ни cvss, ни cvss_type.

Вежливое сканирование

Сканирование сети обращается к API намного реже, чем кажется:

  • все CPE порта уходят в один пакетный запрос
  • ответы кэшируются на всё сканирование, поэтому сотня одинаковых серверов стоит одного запроса, а не сотни
  • уже выполняющийся запрос ожидается, а не повторяется
  • обход 125 путей выполняется через 5 TCP-соединений, а не 126, и запрашивает сжатые страницы там, где сервер их предлагает
  • ограничение частоты запросов или сбой останавливают запросы сканирования, а не повторяют их для каждого хоста

Разработка

Тесты, контроль качества и CONTRIBUTING.md находятся только в git-репозитории; архив релиза поставляет скрипты и их данные. Три проверки, все офлайн, кроме особо отмеченных:

nmap -sn -Pn --script ./tests/run.nse --script-args testdir=tests,root=. 127.0.0.1
python3 tests/e2e/run_e2e.py
python3 tools/check.py

110 модульных тестов выполняются внутри nmap против реальных библиотек NSE; 33 сквозных теста запускают реальный бинарник nmap против локального веб-сервера и подставного API Vulners; контроль качества не пускает в дерево исходников секреты, вывод сканирования и мусор из редактора. python3 tests/e2e/run_e2e.py --live добавляет шесть проверок против реального сервиса. См. CONTRIBUTING.md.

FAQ

Эксплуатирует ли он что-нибудь? Нет. Скрипты читают баннеры и страницы и обращаются к базе данных. Они находятся в категории safe nmap.

Работает ли без ключа API? Да — vulners и http-vulners-regex не нуждаются в нём. vulners_enterprise — нуждается.

Почему у одной уязвимости cvss2.0, а у другой cvss3.1? Метка называет шкалу, на которой находится оценка. Vulners возвращает ту, которую опубликовал источник; оценка 9.3 по v2 — это не оценка 9.3 по v3.

Почему показывается запись с низкой оценкой, если я задал mincvss? Потому что для неё есть известный эксплойт или потому что источник никогда не присваивал ей оценку. Оба случая намеренны.

На хосте, который, как я знаю, уязвим, ничего не найдено. Запустите с -d2: скрипты записывают в журнал каждый CPE, о котором спрашивали. Обычно nmap называет сервис, но не его версию, а без версии нечего искать.

Лицензия

Скрипты лицензированы так же, как сам Nmap — см. LICENSE для Nmap Public Source License и nmap.org/npsl для того, что это означает.

Данные об уязвимостях поступают от Vulners и подчиняются их условиям.

Связанные проекты


Поддерживается командой Vulners <[email protected]>

#nmap #nse #vulnerability-scanner #cve #cvss #cpe #vulners #security-tools #pentest #infosec #network-scanner #exploit-database #lua #vulnerability-detection #security-automation

Категории