
Cerca e scarica exploit pubblici dal database Vulners — online, oppure completamente offline da un indice locale SQLite FTS5.
<div align="center">
# Getsploit
**Cerca e scarica exploit pubblici dal database [Vulners](https://vulners.com) —
online, o completamente offline da un indice locale.**
[](https://pypi.org/project/getsploit/)
[](https://pypi.org/project/getsploit/)
[](https://pepy.tech/project/getsploit)
[](https://github.com/vulnersCom/getsploit/stargazers)
[](https://github.com/vulnersCom/getsploit/actions/workflows/ci.yml)
[](https://github.com/vulnersCom/getsploit/actions/workflows/codeql.yml)
[](https://scorecard.dev/viewer/?uri=github.com/vulnersCom/getsploit)
[](https://github.com/vulnersCom/getsploit/actions/workflows/ci.yml)
[](https://peps.python.org/pep-0561/)
[](https://github.com/astral-sh/ruff)
[](https://github.com/astral-sh/uv)
[](LICENSE)
[Ottieni una chiave API](https://vulners.com/userinfo) ·
[Ricerca Vulners](https://vulners.com/search) ·
[Changelog](https://github.com/vulnerscom/getsploit/blob/master/CHANGELOG.md) ·
[Architettura](https://github.com/vulnerscom/getsploit/blob/master/ARCHITECTURE.md) ·
[Politica di sicurezza](https://github.com/vulnerscom/getsploit/blob/master/SECURITY.md)
<img src="https://assets.kitploit.com/production/public/readmes/1237/6911a453ad43c32e26b89a2a3895cd81e60e83924db87967199871d7b07089e9.gif"
alt="Getsploit che cerca online, costruisce un indice FTS5 locale, poi cerca e replica offline"
width="900">
</div>
---
## Perché Getsploit
- 🔎 **Una sola query, ogni raccolta.** Exploit-DB, Metasploit, Packet Storm, Zero Day
Initiative, proof-of-concept GitHub e altro, come indicizzati da Vulners.
- 📴 **Funziona a rete disconnessa.** Un singolo `--update` costruisce un indice SQLite FTS5
locale dell'intero corpus di exploit; ogni ricerca successiva è una query locale.
- 🧠 **Cerca ciò che digiti.** `wordpress 4.7`, `CVE-2024-3094` e `ms17-010`
corrispondono letteralmente, mentre un'espressione full-text intenzionale riceve comunque la
sintassi FTS5 completa.
- 📊 **Avanzamento affidabile.** Ogni fase di un aggiornamento riporta numeri reali, e le
due fasi di cui non si conosce la dimensione lo dicono esplicitamente, invece di inventare una
percentuale.
- 🧾 **Pensato per le pipe.** JSON, JSON Lines e record separati da tabulazione stabili quando
l'output è reindirizzato. Nessun colore o decorazione raggiunge mai un formato machine-readable.
- 💾 **Conserva la sorgente.** `--mirror` scrive il corpo di ogni exploit in un proprio file.
- 🔐 **Attento ai tuoi dati.** La chiave non è mai un argomento da riga di comando, il file della
chiave viene aperto senza seguire symlink e il contenuto scaricato non viene mai eseguito.
- 🧪 **Verificato.** Copertura del 100% di istruzioni e branch su Python 3.11 fino a 3.14, su
Linux, macOS e Windows.
---
## Installazione
Getsploit richiede Python 3.11 o successivo.
```console
$ pipx install getsploit
```
```console
$ uv tool install getsploit
```
```console
$ python -m pip install getsploit
```
## Chiave API
Crea una chiave nel tuo [account Vulners](https://vulners.com/userinfo), poi esponila
tramite l'ambiente:
```console
$ export VULNERS_API_KEY="your-key" # pragma: allowlist secret
```
```powershell
$env:VULNERS_API_KEY = "your-key" # pragma: allowlist secret
```
`getsploit --set-key` salva una chiave tramite un prompt di conferma nascosto, in un file
privato nella home di Getsploit. L'ambiente ha la precedenza su quel file ed è la scelta
migliore per l'automazione. Non esiste l'opzione `--api-key`: una chiave passata sulla riga
di comando finisce nella cronologia della shell e nell'elenco dei processi.
La ricerca online e `--update` richiedono una chiave. `--local` e `--status` no.
## Utilizzo
### Ricerca online
```console
$ getsploit CVE-2024-3094
$ getsploit "wordpress 4.7 remote code execution" --count 25
```
La query arriva a Vulners invariata, quindi la sua
[sintassi Lucene](https://vulners.com/docs) funziona come documentato:
```console
$ getsploit 'title:wordpress AND description:"code execution"'
```
`--count` oltre 100 viene impaginato in modo trasparente; una singola risposta API non
contiene mai più di 100 documenti.
### Ricerca offline
```console
$ getsploit --update # scarica l'archivio e costruisce l'indice FTS5
$ getsploit --status # dov'è, quanto è grande, quanti documenti contiene
$ getsploit --local wordpress 4.7
```
Le parole di ricerca ordinarie vengono confrontate letteralmente, quindi identificatori e
numeri di versione funzionano come digitati: `wordpress 4.7`, `CVE-2024-3094`,
`ms17-010`. Una query che usa filtri di colonna, operatori booleani, virgolette,
parentesi, `*` o `^` viene trattata come una
[espressione SQLite FTS5](https://www.sqlite.org/fts5.html) e segnala un proprio errore
quando è malformata:
```console
$ getsploit --local 'title:eternalblue AND NOT description:metasploit'
```
Le colonne ricercabili sono `id`, `title`, `published`, `description` e `source_data`. È
ancora accettata la grafia legacy `sourceData:`.
### Salvataggio delle sorgenti degli exploit
```console
$ getsploit --mirror wordpress 4.7
$ getsploit --local --mirror eternalblue
```
I file finiscono in una directory derivata dalla query, un file per exploit, creati senza
seguire symlink e senza mai sovrascrivere nulla che esista già.
> [!WARNING]
> I file replicati sono codice di terze parti non affidabile. Leggili prima di eseguirli.
### Output leggibile dalle macchine
```console
$ getsploit --format json CVE-2024-3094
$ getsploit --format jsonl wordpress | jq -r .id
$ getsploit wordpress > results.tsv # l'output reindirizzato è separato da tabulazioni
```
`--json` resta un alias per `--format json`.
### Controllo del terminale
```console
$ getsploit --color always query | less -R
$ getsploit --color never query
```
Il colore predefinito è `auto`. Un terminale largo ottiene una tabella, uno stretto record
impilati e un flusso reindirizzato valori separati da tabulazione — gli stessi dati in
tutti e tre i casi.
Esegui `getsploit --help` per l'elenco completo delle opzioni.
## Il database locale
| | |
| --- | --- |
| Posizione | `~/.getsploit/getsploit.db`, oppure `$GETSPLOIT_HOME` |
| Formato | SQLite con indice FTS5 a contenuto esterno |
| Tokenizer | `unicode61 remove_diacritics 2` |
| Dimensioni | circa 1,7 GB per l'intero corpus |
| Aggiornamento | atomico: il nuovo database sostituisce il vecchio con una singola operazione |
Un aggiornamento scarica l'archivio tramite otto connessioni di intervallo parallele, lo
decomprime e lo converte accanto alla destinazione, lo verifica e solo allora esegue il
commit. L'uso della memoria non dipende dalla dimensione dell'archivio. Una ricerca già in
esecuzione sul vecchio database termina su di esso senza interferenze.
I database creati da Getsploit 2.x restano ricercabili; il successivo `--update` li migra
da FTS4 a FTS5. Le espressioni di prossimità FTS4 come `one NEAR/5 two` devono essere
riscritte nella forma FTS5 `NEAR(...)`.
## Compatibilità
| | |
| --- | --- |
| Python | 3.11, 3.12, 3.13, 3.14 |
| Sistemi operativi | Linux, macOS, Windows |
| Vulners SDK | 4.1 e versioni 4.x successive |
| Dipendenze runtime | `click`, `rich`, `vulners` |
## Sviluppo
```console
$ git clone https://github.com/vulnersCom/getsploit.git
$ cd getsploit
$ uv sync --all-groups
$ make check
```
| Comando | Scopo |
| --- | --- |
| `make format` | Formatta e corregge automaticamente i file sorgente |
| `make lint` | Controlla formattazione, lint e tipi |
| `make test` | Esegue i test in parallelo |
| `make coverage` | Applica la copertura del 100% di istruzioni e branch |
| `make leaks` | Scansiona i file tracciati per individuare segreti |
| `make build` | Crea la wheel e la distribuzione sorgente |
| `make release` | Esegue tutti i gate e valida entrambe le distribuzioni |
| `make check` | Tutto quanto sopra che funge da gate per il merge |
[CONTRIBUTING.md](https://github.com/vulnerscom/getsploit/blob/master/CONTRIBUTING.md) contiene le regole di contribuzione e
[ARCHITECTURE.md](https://github.com/vulnerscom/getsploit/blob/master/ARCHITECTURE.md) i confini dei moduli e gli invarianti del database.
Una release è un tag `v<version>` pushato. Da lì
[il workflow di release](https://github.com/vulnerscom/getsploit/blob/master/.github/workflows/release.yml) riesegue il gate completo sul
commit taggato, pubblica su PyPI tramite trusted publishing e scrive la release GitHub dal
changelog. Non esiste alcun token PyPI da poter divulgare.
## Sicurezza
I file sorgente degli exploit sono contenuti non affidabili: rivedili prima di aprirli o
eseguirli. Getsploit stesso non esegue mai ciò che scarica.
Le release vengono pubblicate da GitHub Actions tramite PyPI trusted publishing, quindi non
esiste alcun token API di lunga durata da divulgare e ogni artefatto porta un'attestazione
di provenienza della build. Per segnalare una vulnerabilità in Getsploit, segui
[SECURITY.md](https://github.com/vulnerscom/getsploit/blob/master/SECURITY.md).
## Licenza
[MIT](https://github.com/vulnerscom/getsploit/blob/master/LICENSE) © Vulners Team e collaboratori.