
nmap-vulners v1.5
Script NSE di Nmap che interroga l'API di Vulners per identificare vulnerabilità note (CVE) per i servizi di rete rilevati, migliorando la scansione delle porte standard con ricerca automatica di CVE e punteggio CVSS.
nmap-vulners
Trasforma una scansione dei servizi di nmap in un elenco di CVE, punteggi CVSS ed exploit noti.
Tre script NSE che prendono il software che nmap ha già identificato, interrogano il database di Vulners per sapere cosa è noto al riguardo e stampano la risposta nel report di scansione.

I tre script
| Script | Richiede una chiave | Funzione |
|---|---|---|
vulners.nse | no | Invia ogni CPE trovato da nmap all'endpoint pubblico di Vulners e stampa ciò che è noto, a partire dal CVSS più alto |
vulners_enterprise.nse | sì | La stessa ricerca tramite l'API v4 di Vulners: punteggi CVSS v3 ed exploit che citano ogni CVE |
http-vulners-regex.nse | no | Rileva il software web da intestazioni HTTP e contenuto delle pagine, così le altre due hanno qualcosa da cercare anche quando -sV non riesce a identificarlo |
Sono indipendenti. Eseguine uno o tutti e tre: lo script regex passa automaticamente i suoi risultati alle altre due.
Installazione
macOS, Linux, Kali, WSL - una riga, senza argomenti:
curl -fsSL https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.sh | sh
Windows - PowerShell come amministratore:
irm https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.ps1 | iex
Il programma di installazione chiede a nmap dove conserva i suoi dati, copia
gli script e i loro file dati in quella posizione, ricostruisce il database
degli script e poi verifica che --script vulners risolva davvero a ciò che ha
appena installato: nmap include una propria vulners.nse, e questo la
sostituisce.
Senza root, e altre opzioni
# 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 accetta le stesse opzioni: -User, -Prefix, -Ref, -Uninstall.
Da un checkout
git clone https://github.com/vulnersCom/nmap-vulners
cd nmap-vulners
./install.sh
Il programma di installazione usa i file che lo accompagnano, quindi installa esattamente ciò che hai clonato. Eseguire gli script direttamente dal checkout funziona anche:
nmap -sV --script "$PWD/vulners.nse" <target>
Usa un percorso assoluto quando esegui da un checkout. nmap risolve prima un
--script ./vulners.nserelativo contro la propriascript.dbed esegue silenziosamente la copia inclusa con nmap invece della tua.
A mano
Cinque file, due directory:
| File | Destinazione |
|---|---|
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/ |
Poi sudo nmap --script-updatedb.
La directory dati di nmap di solito è /usr/share/nmap (Debian, Ubuntu, Kali),
/usr/local/share/nmap (compilato dai sorgenti), /opt/homebrew/share/nmap
(Homebrew) o C:\Program Files (x86)\Nmap (Windows). Per essere certi, chiedi
a nmap:
nmap -d2 --script-help probe 2>&1 | grep nse_main.lua
La directory che contiene nse_main.lua è quella usata da questa versione di
nmap.
Utilizzo
vulners - nessuna chiave richiesta
nmap -sV --script vulners [--script-args mincvss=<score>] <target>
Ogni CPE segnalato da nmap viene cercato; ogni vulnerabilità viene stampata con
il suo punteggio, la scala a cui appartiene e un link. Le voci con un exploit
noto sono contrassegnate *EXPLOIT* e vengono mostrate qualunque sia la
soglia, perché un bug a bassa gravità già sfruttato può comunque comprometterti.
vulners_enterprise - chiave API di Vulners
export VULNERS_API_KEY=<token>
nmap -sV --script vulners_enterprise [--script-args mincvss=<score>] <target>

L'endpoint enterprise risponde con le metriche CVSS v3 e con i riferimenti agli
exploit raccolti da Vulners, quindi un CVE sfruttato viene contrassegnato
*HAS EXPLOIT* e l'exploit stesso è elencato accanto ad esso. Tutti i CPE di
una porta viaggiano in una sola richiesta.
http-vulners-regex - identifica ciò che -sV non sa nominare
nmap -sV --script http-vulners-regex [--script-args paths={"/"}] <target>

178 pattern associano intestazioni HTTP e markup delle pagine - Server,
X-Powered-By, tag di generatori, URL di asset - ai CPE: web server, CMS,
framework, plugin WordPress, librerie JavaScript. Qualsiasi cosa trovi viene
pubblicata sulla porta, così vulners e vulners_enterprise possono cercarla
nella stessa scansione.
Argomenti degli script
vulners
| Argomento | Predefinito | Significato |
|---|---|---|
vulners.mincvss | 0 | Nasconde le vulnerabilità con punteggio inferiore a questo. I bollettini senza punteggio e gli exploit vengono sempre mostrati |
vulners.api_host | vulners.com | Nome host dell'API |
vulners.api_port | 443 | Porta su api_host |
vulners_enterprise
| Argomento | Predefinito | Significato |
|---|---|---|
vulners_enterprise.mincvss | 0 | Come sopra |
vulners_enterprise.api_key | - | Token API. Preferisci la variabile d'ambiente, vedi sotto |
vulners_enterprise.api_key_file | - | Percorso assoluto di un file la cui prima riga è il token |
vulners_enterprise.api_host | vulners.com | Nome host dell'API |
vulners_enterprise.api_port | 443 | Porta su api_host |
http-vulners-regex
| Argomento | Predefinito | Significato |
|---|---|---|
http-vulners-regex.paths | http-vulners-paths.txt (125 percorsi) | Una lista Lua di percorsi, oppure una stringa che indica un file con un percorso per riga |
L'intero elenco di percorsi viaggia in un'unica pipeline HTTP. Un file che non può essere letto blocca lo script invece di ripiegare sull'elenco incluso, così un refuso nel nome del file non può trasformare una scansione a tre percorsi in una a 125.
Dove conservare la chiave API
In ordine di preferenza:
VULNERS_API_KEYnella variabile d'ambiente--script-args vulners_enterprise.api_key_file=/absolute/path--script-args vulners_enterprise.api_key=<token>
La terza è comoda ma dispersiva: nmap copia la propria riga di comando in ogni
report, quindi il token finisce nell'attributo args dell'output -oX e nella
cronologia della shell. Lo script stesso non scrive mai il token da nessuna
parte, incluso l'output di debug: esiste un test di regressione che lo
garantisce.
I token si trovano nel tuo account vulners.com. Senza
uno di essi, vulners_enterprise rimane in silenzio e non invia nulla.
Come i tre si integrano
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
Output leggibile dalle macchine
Tutto ciò che gli script stampano è anche strutturato, quindi l'output -oX
può essere analizzato senza toccare il testo leggibile dall'uomo:
<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>
Le chiavi sono id, type, cvss, cvss_type e is_exploit, che è presente
solo nelle voci che ne hanno uno. Le tabelle dei risultati sono indicizzate dal
CPE per cui sono state trovate. Un bollettino senza punteggio non contiene né
cvss né cvss_type.
Scansioni rispettose
Una scansione di una rete interroga l'API molto meno di quanto sembri:
- tutti i CPE di una porta finiscono in una richiesta in batch
- le risposte vengono memorizzate nella cache per l'intera scansione, quindi cento server identici costano una ricerca, non cento
- una ricerca già in corso viene attesa invece di essere ripetuta
- la scansione dei 125 percorsi usa 5 connessioni TCP invece di 126 e richiede pagine compresse quando il server le offre
- un limite di velocità o un'interruzione ferma le richieste della scansione invece di ritentare per ogni host
Sviluppo
I test, il controllo di igiene e CONTRIBUTING.md sono solo nel repository
git; l'archivio di rilascio include gli script e i loro dati. Tre controlli,
tutti offline tranne dove indicato:
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 casi unitari vengono eseguiti dentro nmap contro le vere librerie NSE; 33
casi end-to-end guidano il vero binario di nmap contro un server web locale e
un'API Vulners simulata; il controllo di igiene tiene segreti, output di
scansione e file spazzatura degli editor fuori dall'albero.
python3 tests/e2e/run_e2e.py --live aggiunge sei verifiche contro il servizio
reale. Vedi CONTRIBUTING.md.
FAQ
Sfrutta qualcosa? No. Gli script leggono banner e pagine e interrogano un
database. Sono nella categoria safe di nmap.
Funziona senza chiave API? Sì: vulners e http-vulners-regex non ne
richiedono una. vulners_enterprise sì.
Perché una vulnerabilità mostra cvss2.0 mentre un'altra mostra cvss3.1?
L'etichetta indica la scala su cui si basa il punteggio. Vulners restituisce
quella pubblicata dalla fonte; un punteggio v2 di 9.3 non è un punteggio v3 di
9.3.
Perché viene mostrata una voce con punteggio basso quando imposto
mincvss? Perché ha un exploit noto, oppure perché la fonte non le ha mai
assegnato un punteggio. Entrambi i casi sono voluti.
Non ha trovato nulla su un host che so essere vulnerabile. Esegui con
-d2: gli script registrano ogni CPE per cui hanno chiesto. Di solito nmap
identifica il servizio ma non la versione, e senza versione non c'è nulla da
cercare.
Licenza
Gli script sono concessi in licenza come Nmap stesso: vedi LICENSE per la Nmap Public Source License e nmap.org/npsl per capire cosa significa.
I dati sulle vulnerabilità provengono da Vulners e sono soggetti ai loro termini.
Correlati
- vulners.com - il database dietro questi script
- vulnersCom/api - il client Python
- vulnersCom/burp-vulners-scanner - gli stessi dati dentro Burp Suite
- nmap.org/book/nse.html - come funzionano gli script NSE
Mantenuto dal team Vulners <[email protected]>
#nmap #nse #vulnerability-scanner #cve #cvss #cpe #vulners
#security-tools #pentest #infosec #network-scanner #exploit-database
#lua #vulnerability-detection #security-automation