Zurück zu den Updates
New releaseAug 18, 2026

nmap-vulners v1.5

Nmap NSE-Skript, das die Vulners-API abfragt, um bekannte Schwachstellen (CVEs) für erkannte Netzwerkdienste zu identifizieren und das standardmäßige Port-Scannen durch automatisierte CVE-Suche und CVSS-Bewertung verbessert.

Teilen

nmap-vulners

Verwandeln Sie einen nmap-Dienstscan in eine Liste von CVEs, CVSS-Werten und bekannten Exploits.

Drei NSE-Skripte nehmen die Software, die nmap bereits identifiziert hat, fragen die Vulners-Datenbank, was darüber bekannt ist, und drucken die Antwort in den Scan-Bericht.

tests license nmap data stars

vulners.nse gegen scanme.nmap.org


Die drei Skripte

SkriptSchlüssel nötigFunktion
vulners.nseneinSendet jedes von nmap gefundene CPE an den öffentlichen Vulners-Endpunkt und gibt aus, was darüber bekannt ist, höchster CVSS zuerst
vulners_enterprise.nsejaDieselbe Abfrage über die Vulners-API v4: CVSS-v3-Werte und die Exploits, die auf jede CVE verweisen
http-vulners-regex.nseneinIdentifiziert Websoftware anhand von HTTP-Headern und Seiteninhalten, damit die anderen beiden etwas nachschlagen können, selbst wenn -sV sie nicht benennen kann

Sie sind unabhängig voneinander. Führen Sie eines aus oder alle drei - das Regex-Skript übergibt seine Ergebnisse automatisch an die anderen beiden.

Installation

macOS, Linux, Kali, WSL - eine Zeile, ohne Argumente:

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

Windows - PowerShell als Administrator:

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

Das Installationsprogramm fragt nmap, wo es seine Daten aufbewahrt, kopiert die Skripte und ihre Datendateien dorthin, baut die Skriptdatenbank neu auf und prüft dann, dass --script vulners wirklich auf das gerade Installierte auflöst - nmap bringt ein eigenes vulners.nse mit, und dieses ersetzt es.

Ohne root und weitere Optionen
# 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 akzeptiert dieselben Optionen: -User, -Prefix, -Ref, -Uninstall.

Aus einem Checkout
git clone https://github.com/vulnersCom/nmap-vulners
cd nmap-vulners
./install.sh

Das Installationsprogramm verwendet die Dateien neben sich, installiert also exakt das, was Sie geklont haben. Die Skripte direkt aus dem Checkout heraus auszuführen funktioniert ebenfalls:

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

Verwenden Sie beim Ausführen aus einem Checkout einen absoluten Pfad. nmap löst einen relativen --script ./vulners.nse zunächst gegen seine eigene script.db auf und führt stillschweigend die mitgelieferte Kopie von nmap aus, statt Ihrer.

Von Hand

Fünf Dateien, zwei Verzeichnisse:

DateiZiel
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/

Dann sudo nmap --script-updatedb.

Das nmap-Datenverzeichnis ist normalerweise /usr/share/nmap (Debian, Ubuntu, Kali), /usr/local/share/nmap (aus dem Quellcode gebaut), /opt/homebrew/share/nmap (Homebrew) oder C:\Program Files (x86)\Nmap (Windows). Um sicherzugehen, fragen Sie nmap:

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

Das Verzeichnis, das nse_main.lua enthält, ist das, das dieses nmap verwendet.

Verwendung

vulners - kein Schlüssel erforderlich

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

Jedes von nmap gemeldete CPE wird nachgeschlagen; jede Schwachstelle wird mit ihrem Wert, der Skala, auf der dieser Wert basiert, und einem Link ausgegeben. Einträge mit bekanntem Exploit sind mit *EXPLOIT* markiert und werden unabhängig vom Schwellenwert angezeigt, denn ein ausgenutzter Fehler mit geringem Schweregrad kann Sie trotzdem kompromittieren.

vulners_enterprise - Vulners-API-Schlüssel

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

vulners_enterprise.nse gegen scanme.nmap.org

Der Enterprise-Endpunkt antwortet mit CVSS-v3-Metriken und den Exploit-Referenzen, die Vulners gesammelt hat, sodass eine ausgenutzte CVE mit *HAS EXPLOIT* markiert ist und der Exploit selbst daneben aufgeführt wird. Alle CPEs eines Ports reisen in einer Anfrage.

http-vulners-regex - erkennen, was -sV nicht benennen kann

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

http-vulners-regex.nse gegen scanme.nmap.org

178 Muster bilden HTTP-Header und Seiten-Markup - Server, X-Powered-By, Generator-Tags, Asset-URLs - auf CPEs ab: Webserver, CMS, Frameworks, WordPress-Plugins, JavaScript-Bibliotheken. Was auch immer es findet, wird für den Port veröffentlicht, sodass vulners und vulners_enterprise es im selben Scan nachschlagen.

Skript-Argumente

vulners

ArgumentStandardBedeutung
vulners.mincvss0Blendet Schwachstellen aus, deren Wert darunter liegt. Nicht bewertete Bulletins und Exploits werden immer angezeigt
vulners.api_hostvulners.comHostname der API
vulners.api_port443Port auf api_host

vulners_enterprise

ArgumentStandardBedeutung
vulners_enterprise.mincvss0Wie oben
vulners_enterprise.api_key-API-Token. Bevorzugen Sie die Umgebungsvariable, siehe unten
vulners_enterprise.api_key_file-Absoluter Pfad zu einer Datei, deren erste Zeile das Token ist
vulners_enterprise.api_hostvulners.comHostname der API
vulners_enterprise.api_port443Port auf api_host

http-vulners-regex

ArgumentStandardBedeutung
http-vulners-regex.pathshttp-vulners-paths.txt (125 Pfade)Eine Lua-Liste von Pfaden oder eine Zeichenkette, die eine Datei mit einem Pfad pro Zeile benennt

Die gesamte Pfadliste reist in einer einzigen HTTP-Pipeline. Eine Datei, die nicht gelesen werden kann, stoppt das Skript, anstatt auf die mitgelieferte Liste zurückzugreifen, sodass ein Tippfehler im Dateinamen einen Scan mit drei Pfaden nicht in einen mit 125 Pfaden verwandeln kann.

Wo der API-Schlüssel aufbewahrt wird

In bevorzugter Reihenfolge:

  1. VULNERS_API_KEY in der Umgebung
  2. --script-args vulners_enterprise.api_key_file=/absolute/path
  3. --script-args vulners_enterprise.api_key=<token>

Die dritte ist bequem und undicht: nmap kopiert seine eigene Befehlszeile in jeden Bericht, sodass das Token im args-Attribut der -oX-Ausgabe und in Ihrer Shell-Historie landet. Das Skript selbst schreibt das Token nirgendwohin, auch nicht in seine Debug-Ausgabe - es gibt einen Regressionstest, der das belegt.

Tokens befinden sich in Ihrem vulners.com-Konto. Ohne ein solches bleibt vulners_enterprise stumm und sendet nichts.

Wie die drei zusammenarbeiten

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

Maschinenlesbare Ausgabe

Alles, was die Skripte ausgeben, ist auch strukturiert, sodass die -oX-Ausgabe geparst werden kann, ohne den für Menschen bestimmten Text anzufassen:

<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>

Die Schlüssel sind id, type, cvss, cvss_type und is_exploit, wobei letzteres nur bei Einträgen vorhanden ist, die einen haben. Ergebnistabellen sind nach dem CPE benannt, für das sie gefunden wurden. Ein nicht bewertetes Bulletin enthält weder cvss noch cvss_type.

Höfliches Scannen

Ein Netzwerkscan fragt die API weit weniger, als es den Anschein hat:

  • jedes CPE eines Ports geht in eine gebündelte Anfrage
  • Antworten werden für den gesamten Scan zwischengespeichert, sodass hundert identische Server eine Abfrage kosten, nicht hundert
  • auf eine bereits laufende Abfrage wird gewartet, statt sie zu wiederholen
  • die Abfrage der 125 Pfade läuft über 5 TCP-Verbindungen statt 126 und fragt komprimierte Seiten an, wo der Server sie anbietet
  • ein Rate-Limit oder ein Ausfall stoppt die Anfragen des Scans, anstatt sie pro Host zu wiederholen

Entwicklung

Die Tests, das Hygiene-Gate und CONTRIBUTING.md befinden sich nur im Git-Repository; das Release-Archiv enthält die Skripte und ihre Daten. Drei Gates, alle offline, außer wo angegeben:

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 Unit-Fälle laufen innerhalb von nmap gegen die echten NSE-Bibliotheken; 33 End-to-End-Fälle treiben die echte nmap-Binary gegen einen lokalen Webserver und eine Ersatz-Vulners-API; das Hygiene-Gate hält Geheimnisse, Scan-Ausgaben und Editor-Müll aus dem Baum. python3 tests/e2e/run_e2e.py --live fügt sechs Prüfungen gegen den echten Dienst hinzu. Siehe CONTRIBUTING.md.

FAQ

Nutzt es Schwachstellen aus? Nein. Die Skripte lesen Banner und Seiten und fragen eine Datenbank. Sie gehören zur safe-Kategorie von nmap.

Funktioniert es ohne API-Schlüssel? Ja - vulners und http-vulners-regex benötigen keinen. vulners_enterprise schon.

Warum zeigt eine Schwachstelle cvss2.0, während eine andere cvss3.1 zeigt? Das Label benennt die Skala, auf der der Wert basiert. Vulners liefert das zurück, was die Quelle veröffentlicht hat; ein v2-Wert von 9.3 ist kein v3-Wert von 9.3.

Warum wird ein Eintrag mit niedrigem Wert angezeigt, wenn ich mincvss gesetzt habe? Weil er einen bekannten Exploit hat oder weil die Quelle ihn nie bewertet hat. Beides ist beabsichtigt.

Es wurde nichts auf einem Host gefunden, von dem ich weiß, dass er verwundbar ist. Führen Sie es mit -d2 aus: Die Skripte protokollieren jedes CPE, nach dem sie gefragt haben. Normalerweise hat nmap den Dienst benannt, aber nicht dessen Version, und es gibt keine Version, die nachgeschlagen werden könnte.

Lizenz

Die Skripte sind unter derselben Lizenz lizenziert wie Nmap selbst - siehe LICENSE für die Nmap Public Source License und nmap.org/npsl für deren Bedeutung.

Schwachstellendaten stammen von Vulners und unterliegen deren Bedingungen.

Verwandtes


Gepflegt vom Vulners-Team <[email protected]>

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

Kategorien