
Rechercher et télécharger des exploits publics depuis la base de données Vulners — en ligne, ou entièrement hors ligne à partir d'un index local SQLite FTS5.
<div align="center">
# Getsploit
**Recherchez et téléchargez des exploits publics depuis la base de données [Vulners](https://vulners.com) —
en ligne, ou entièrement hors ligne depuis un index local.**
[](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)
[Obtenir une clé API](https://vulners.com/userinfo) ·
[Recherche Vulners](https://vulners.com/search) ·
[Journal des modifications](https://github.com/vulnerscom/getsploit/blob/master/CHANGELOG.md) ·
[Architecture](https://github.com/vulnerscom/getsploit/blob/master/ARCHITECTURE.md) ·
[Politique de sécurité](https://github.com/vulnerscom/getsploit/blob/master/SECURITY.md)
<img src="https://assets.kitploit.com/production/public/readmes/1237/6911a453ad43c32e26b89a2a3895cd81e60e83924db87967199871d7b07089e9.gif"
alt="Getsploit effectuant une recherche en ligne, construisant un index FTS5 local, puis recherchant et reflétant hors ligne"
width="900">
</div>
---
## Pourquoi Getsploit
- 🔎 **Une seule requête, toutes les collections.** Exploit-DB, Metasploit, Packet Storm, Zero Day
Initiative, preuves de concept GitHub et plus encore, tels qu'indexés par Vulners.
- 📴 **Fonctionne sans réseau.** Une seule `--update` construit un index SQLite FTS5 local de
l'ensemble du corpus d'exploits ; toute recherche ultérieure est une requête locale.
- 🧠 **Recherche ce que vous avez saisi.** `wordpress 4.7`, `CVE-2024-3094` et `ms17-010`
correspondent littéralement, tandis qu'une expression full-text délibérée bénéficie toujours de toute la syntaxe FTS5.
- 📊 **Une progression fiable.** Chaque étape d'une mise à jour affiche des chiffres réels, et les deux
étapes dont la taille ne peut pas être connue le disent au lieu d'inventer un pourcentage.
- 🧾 **Conçu pour les pipelines.** JSON, JSON Lines et enregistrements stables séparés par des tabulations lorsque la
sortie est redirigée. Aucune couleur ni décoration n'atteint un format machine.
- 💾 **Conserve la source.** `--mirror` écrit le contenu de chaque exploit dans son propre fichier.
- 🔐 **Respectueux de vos données.** La clé n'est jamais un argument de ligne de commande, le fichier
de clé est ouvert sans suivre les liens symboliques, et le contenu téléchargé n'est jamais exécuté.
- 🧪 **Vérifié.** 100 % de couverture des instructions et des branches sur Python 3.11 à 3.14, sous
Linux, macOS et Windows.
---
## Installation
Getsploit nécessite Python 3.11 ou plus récent.
```console
$ pipx install getsploit
```
```console
$ uv tool install getsploit
```
```console
$ python -m pip install getsploit
```
## Clé API
Créez une clé dans votre [compte Vulners](https://vulners.com/userinfo), puis exposez-la via l'environnement :
```console
$ export VULNERS_API_KEY="your-key" # pragma: allowlist secret
```
```powershell
$env:VULNERS_API_KEY = "your-key" # pragma: allowlist secret
```
`getsploit --set-key` enregistre une clé via une invite de confirmation masquée, dans un fichier privé
situé dans le répertoire personnel de Getsploit. L'environnement a priorité sur ce fichier et constitue le
meilleur choix pour l'automatisation. Il n'existe pas d'option `--api-key` : une clé passée en ligne de commande
se retrouve dans l'historique du shell et dans la liste des processus.
La recherche en ligne et `--update` nécessitent une clé. `--local` et `--status` n'en nécessitent pas.
## Utilisation
### Recherche en ligne
```console
$ getsploit CVE-2024-3094
$ getsploit "wordpress 4.7 remote code execution" --count 25
```
La requête atteint Vulners sans modification, donc sa
[syntaxe Lucene](https://vulners.com/docs) fonctionne comme documenté :
```console
$ getsploit 'title:wordpress AND description:"code execution"'
```
`--count` au-delà de 100 est paginé de manière transparente ; une réponse API unique ne transporte jamais plus de 100 documents.
### Recherche hors ligne
```console
$ getsploit --update # download the archive and build the FTS5 index
$ getsploit --status # where it is, how big, how many documents
$ getsploit --local wordpress 4.7
```
Les mots de recherche ordinaires sont mis en correspondance littéralement, donc les identifiants et les numéros
de version fonctionnent tels que saisis : `wordpress 4.7`, `CVE-2024-3094`, `ms17-010`. Une requête
qui utilise des filtres de colonnes, des opérateurs booléens, des guillemets, des parenthèses, `*` ou `^`
est traitée comme une [expression SQLite FTS5](https://www.sqlite.org/fts5.html) et signale sa propre erreur
lorsqu'elle est mal formée :
```console
$ getsploit --local 'title:eternalblue AND NOT description:metasploit'
```
Les colonnes interrogeables sont `id`, `title`, `published`, `description` et `source_data`.
L'ancienne orthographe `sourceData:` reste acceptée.
### Enregistrement des sources d'exploits
```console
$ getsploit --mirror wordpress 4.7
$ getsploit --local --mirror eternalblue
```
Les fichiers sont placés dans un répertoire dérivé de la requête, un fichier par exploit, créés sans
suivre les liens symboliques et sans jamais écraser un fichier existant.
> [!WARNING]
> Les fichiers reflétés sont du code tiers non fiable. Lisez-les avant de les exécuter.
### Sortie lisible par machine
```console
$ getsploit --format json CVE-2024-3094
$ getsploit --format jsonl wordpress | jq -r .id
$ getsploit wordpress > results.tsv # redirected output is tab-separated
```
`--json` reste un alias pour `--format json`.
### Contrôle du terminal
```console
$ getsploit --color always query | less -R
$ getsploit --color never query
```
La couleur est définie par défaut sur `auto`. Un terminal large affiche un tableau, un terminal étroit
affiche des enregistrements empilés, et un flux redirigé affiche des valeurs séparées par des tabulations —
les mêmes données dans les trois cas.
Exécutez `getsploit --help` pour la liste complète des options.
## La base de données locale
| | |
| --- | --- |
| Emplacement | `~/.getsploit/getsploit.db`, ou `$GETSPLOIT_HOME` |
| Format | SQLite avec un index FTS5 à contenu externe |
| Tokenizer | `unicode61 remove_diacritics 2` |
| Taille | environ 1,7 Go pour l'ensemble du corpus |
| Mise à jour | atomique : la nouvelle base remplace l'ancienne en une seule opération |
Une mise à jour télécharge l'archive via huit connexions partielles parallèles, la décompresse et la
convertit à côté de la destination, la vérifie, puis ne valide qu'ensuite. L'utilisation de la mémoire ne
dépend pas de la taille de l'archive. Une recherche déjà en cours sur l'ancienne base se termine sur celle-ci
sans être perturbée.
Les bases construites par Getsploit 2.x restent interrogeables ; le prochain `--update` les migre de FTS4
vers FTS5. Les expressions de proximité FTS4 telles que `one NEAR/5 two` doivent être réécrites sous la
forme FTS5 `NEAR(...)`.
## Compatibilité
| | |
| --- | --- |
| Python | 3.11, 3.12, 3.13, 3.14 |
| Systèmes d'exploitation | Linux, macOS, Windows |
| Vulners SDK | 4.1 et versions 4.x ultérieures |
| Dépendances d'exécution | `click`, `rich`, `vulners` |
## Développement
```console
$ git clone https://github.com/vulnersCom/getsploit.git
$ cd getsploit
$ uv sync --all-groups
$ make check
```
| Commande | Objectif |
| --- | --- |
| `make format` | Formate et corrige automatiquement les fichiers sources |
| `make lint` | Vérifie le formatage, le lint et les types |
| `make test` | Exécute les tests en parallèle |
| `make coverage` | Impose 100 % de couverture des instructions et des branches |
| `make leaks` | Recherche les secrets dans les fichiers suivis |
| `make build` | Construit la wheel et la distribution source |
| `make release` | Exécute toutes les vérifications et valide les deux distributions |
| `make check` | Tout ce qui précède et conditionne un merge |
[CONTRIBUTING.md](https://github.com/vulnerscom/getsploit/blob/master/CONTRIBUTING.md) contient les règles de contribution et
[ARCHITECTURE.md](https://github.com/vulnerscom/getsploit/blob/master/ARCHITECTURE.md) les limites des modules et les invariants de la base de données.
Une publication est un tag `v<version>` poussé. À partir de là,
[le workflow de publication](https://github.com/vulnerscom/getsploit/blob/master/.github/workflows/release.yml) réexécute l'intégralité des vérifications sur le
commit taggé, publie sur PyPI via le trusted publishing, et rédige la release GitHub à partir du journal des
modifications. Aucun jeton PyPI ne peut fuir.
## Sécurité
Les fichiers sources d'exploits sont du contenu non fiable : examinez-les avant de les ouvrir ou de les
exécuter. Getsploit lui-même n'exécute jamais ce qu'il télécharge.
Les publications sont réalisées depuis GitHub Actions via le trusted publishing PyPI, donc aucun jeton API
à longue durée de vie ne peut fuir, et chaque artefact porte une attestation de provenance de build. Pour
signaler une vulnérabilité dans Getsploit, suivez [SECURITY.md](https://github.com/vulnerscom/getsploit/blob/master/SECURITY.md).
## Licence
[MIT](https://github.com/vulnerscom/getsploit/blob/master/LICENSE) © Équipe Vulners et contributeurs.