
nmap-vulners v1.5
Скрипт NSE для Nmap, который запрашивает API Vulners для выявления известных уязвимостей (CVE) для обнаруженных сетевых служб, расширяя стандартное сканирование портов автоматизированным поиском CVE и оценкой CVSS.
nmap-vulners
Превращает сканирование сервисов nmap в ранжированный список CVE, эксплойтов и того, что атакуется в дикой природе.
Один NSE-скрипт, который берёт программное обеспечение, уже идентифицированное nmap, запрашивает базу данных Vulners о том, что о нём известно, и выводит ответ внутри отчёта сканирования — сначала худшее, по тому, что реально эксплуатируемо.
Реальные сканирования хостов, опубликованных для сканирования. Без ключа, затем с ключом, затем веб-порт: nmap -sV сообщает о баннере Coyote, а обход называет Tomcat и jQuery за ним.
Что он делает
Для каждого открытого порта он ищет программное обеспечение, идентифицированное nmap — CPE, которые создал -sV, — и выводит то, что Vulners знает о нём: сначала худшее по тому, что эксплуатируется, а не только по оценке, и каждая строка — ссылка на страницу за ней.
На HTTP-порту он также снимает отпечатки самого веб-стека, что называет программное обеспечение, которое -sV не может увидеть — фреймворк приложения, CMS, версию PHP за обратным прокси. 721 правило читает части ответа, несущие версию: заголовок Server, X-Powered-By, cookie, заголовок страницы, теги <meta>, имена файлов <script src> и тело. Эти идентичности также ищутся и публикуются на порту, чтобы остальная часть сканирования могла их использовать.
Две вещи, которые он делает помимо обхода:
- он читает собственный баннер сервиса nmap. Когда
-sVне смог назвать сервис, сырой баннер сопоставляется с правилами для FTP, SMTP, SSH, MySQL, DNS, NTP, LDAP и других. Это не стоит дополнительного запроса, и это тот случай, когда порт в противном случае не сообщил бы вообще ничего. - он спрашивает продукт, который не скажет. CMS, которая называет себя и скрывает свою версию, — обычное дело, и никакое сопоставление с образцом не извлечёт число, которого нет на странице. Когда продукт распознан, а версия нет, один запрос идёт в место, которое отвечает —
/CHANGELOG.txtдля Drupal,/administrator/manifests/files/joomla.xmlдля Joomla. Хосту, на котором не запущен ни один из шести проверяемых продуктов, ничего лишнего не отправляется.```sh nmap -sV --script vulners
Это весь интерфейс. Он работает без API-ключа; с ним он сообщает вам больше информации. Режима переключения нет.```
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
| vulners: cpe:/a:apache:http_server:2.4.7 272 findings, 56 exploitable
| SEVERITY CVSS AI FLAGS LINK
| ======== ==== ==== ======= ==============================================================
| CRITICAL 10.0 8.8 EXP https://vulners.com/gitee/3E6BA608-776F-5B1F-9BA5-589CD2A5A351
| CRITICAL 9.8 9.9 EXP https://vulners.com/zdt/1337DAY-ID-39214
| CRITICAL 9.8 9.6 EXP https://vulners.com/packetstorm/PACKETSTORM:171631
| CRITICAL 9.8 9.9 https://vulners.com/cve/CVE-2021-44790
| CRITICAL 9.8 9.8 https://vulners.com/cve/CVE-2023-25690
|_ 262 more not shown; -v shows all, -vv adds where each was found
С ключом один и тот же скан одного и того же хоста отвечает по-разному — KEV означает, что CISA зафиксировала эксплуатацию уязвимости в реальных атаках, а EPSS — это опубликованная вероятность того, что она будет эксплуатироваться:```
| vulners: cpe:/a:apache:http_server:2.4.7 272 findings, 78 exploitable
| SEVERITY CVSS EPSS FLAGS LINK
| ======== ==== ==== ======= ==============================================================
| CRITICAL 9.1 >99% KEV EXP https://vulners.com/cve/CVE-2024-38475
| CRITICAL 9.0 >99% KEV EXP https://vulners.com/cve/CVE-2021-40438
| CRITICAL 9.1 >99% KEV https://vulners.com/cnvd/CNVD-2024-36387
| CRITICAL 10.0 71% EXP https://vulners.com/gitee/3E6BA608-776F-5B1F-9BA5-589CD2A5A351
| CRITICAL 9.8 97% EXP https://vulners.com/cve/CVE-2021-44790
|_ 262 more not shown; -v shows all, -vv adds where each was found
Те же 272 находки, другой порядок, другая верхняя строка — и ещё 22 из них
известно как эксплуатируемые, потому что ключ связывает каждый эксплойт с CVE,
которые он эксплуатирует. Оба этих ответа — реальные результаты с vulners.com,
полученные против локального сервера, показывающего этот баннер.
## Ранжирование
Факты важнее прогнозов. Находки упорядочены:
1. **CISA KEV** — зафиксировано как эксплуатируемое в дикой природе
2. **SSVC `active`** — суждение координатора о том, что эксплуатация происходит
3. **существует эксплойт** — код опубликован, для этой уязвимости или для CVE, которое она называет
4. **высокий EPSS** — модель ожидает эксплуатации
5. всё остальное
CVSS разрешает ничьи внутри группы, а не между ними: эксплуатируемая 7.5 — это
худшая проблема, чем неэксплуатируемая 9.8, и именно такой порядок это отражает.
Колонки следуют за данными. Сигнал, который ответ не нёс, теряет свою колонку,
а не показывает пустую ячейку, потому что пустой EPSS читается как «тихо»,
а это утверждение, которое отсутствующее поле не может поддержать.
## Что добавляет ключ API
| | |
|---|---|
| **Без ключа** | Каждый CPE, найденный nmap, проверяется на бесплатном endpoint. Находки, оценки, флаги эксплойтов и собственный AI-скор Vulners. Без кредитов, без аккаунта |
| **Ключ, без кредитов** | Каждая находка получает то, что знает id endpoint: заголовки, даты, ссылку на upstream-совет или страницу эксплойта, связь эксплойт-к-CVE, CISA KEV и — в зависимости от лицензии — EPSS и SSVC |
| **Ключ, один кредит** | ПО, которое бесплатный путь вообще не мог назвать, идентифицируется по его сырому баннеру. Это единственное здесь, что что-то стоит, и только для сервиса без CPE |
Порт, который уже несёт CPE, никогда не стоит кредита: по замерам на четырёх
продуктах бесплатный поиск возвращает те же **CVE**, что и платный, для CPE.
Что покупает кредит — это идентификация, а не больше уязвимостей.
Бесплатные ключи — на [vulners.com/userinfo](https://vulners.com/userinfo).
## Установка
**macOS, Linux, Kali, WSL** — одна строка, без аргументов:```sh
curl -fsSL https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.sh | sh
Windows — PowerShell от имени администратора:```powershell irm https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.ps1 | iex
Установщик спрашивает nmap, где он хранит свои данные, копирует туда скрипты и их файлы данных, пересобирает базу данных скриптов, а затем проверяет, что `--script vulners` действительно разрешается в то, что он только что установил — nmap поставляется с собственным `vulners.nse`, и этот заменяет его.
<details>
<summary><b>Без root и другие параметры</b></summary>```sh
# 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 v2.0