
Pesquise e baixe exploits públicos do banco de dados Vulners — online ou totalmente offline a partir de um índice local SQLite FTS5.
<div align="center">
# Getsploit
**Pesquise e baixe exploits públicos do banco de dados [Vulners](https://vulners.com) —
online ou totalmente offline a partir de um índice 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)
[Obtenha uma chave de API](https://vulners.com/userinfo) ·
[Busca no Vulners](https://vulners.com/search) ·
[Changelog](https://github.com/vulnerscom/getsploit/blob/master/CHANGELOG.md) ·
[Arquitetura](https://github.com/vulnerscom/getsploit/blob/master/ARCHITECTURE.md) ·
[Política de segurança](https://github.com/vulnerscom/getsploit/blob/master/SECURITY.md)
<img src="https://assets.kitploit.com/production/public/readmes/1237/6911a453ad43c32e26b89a2a3895cd81e60e83924db87967199871d7b07089e9.gif"
alt="Getsploit pesquisando online, construindo um índice FTS5 local e depois pesquisando e espelhando offline"
width="900">
</div>
---
## Por que Getsploit
- 🔎 **Uma consulta, todas as coleções.** Exploit-DB, Metasploit, Packet Storm, Zero Day
Initiative, proof-of-concepts do GitHub e mais, conforme indexados pelo Vulners.
- 📴 **Funciona com a rede desligada.** Um único `--update` cria um índice local SQLite FTS5 de
todo o corpus de exploits; toda busca posterior é uma consulta local.
- 🧠 **Busca o que você digitou.** `wordpress 4.7`, `CVE-2024-3094` e `ms17-010`
correspondem literalmente, enquanto uma expressão de texto completo deliberada ainda recebe a sintaxe FTS5 completa.
- 📊 **Progresso em que você pode confiar.** Cada etapa de uma atualização relata números reais, e as
duas etapas cujo tamanho não pode ser conhecido dizem isso em vez de inventar uma porcentagem.
- 🧾 **Amigável para pipes.** JSON, JSON Lines e registros estáveis separados por tabulação quando a
saída é redirecionada. Nenhuma cor ou decoração chega a um formato de máquina.
- 💾 **Mantém a fonte.** `--mirror` grava cada corpo de exploit em seu próprio arquivo.
- 🔐 **Cuidado com seus dados.** A chave nunca é um argumento de linha de comando, o arquivo
de chave é aberto sem seguir symlinks e o conteúdo baixado nunca é executado.
- 🧪 **Verificado.** 100% de cobertura de statements e branches no Python 3.11 até 3.14, em
Linux, macOS e Windows.
---
## Instalação
O Getsploit requer Python 3.11 ou mais recente.
```console
$ pipx install getsploit
```
```console
$ uv tool install getsploit
```
```console
$ python -m pip install getsploit
```
## Chave de API
Crie uma chave na sua [conta Vulners](https://vulners.com/userinfo) e então exponha-a
por meio do ambiente:
```console
$ export VULNERS_API_KEY="your-key" # pragma: allowlist secret
```
```powershell
$env:VULNERS_API_KEY = "your-key" # pragma: allowlist secret
```
`getsploit --set-key` armazena uma chave por meio de um prompt de confirmação oculto, em um arquivo
privado dentro do diretório inicial do Getsploit. A variável de ambiente tem precedência sobre esse arquivo e é
a melhor escolha para automação. Não existe uma opção `--api-key`: uma chave passada na
linha de comando acaba no histórico do shell e na lista de processos.
A busca online e `--update` precisam de uma chave. `--local` e `--status` não precisam.
## Uso
### Busca online
```console
$ getsploit CVE-2024-3094
$ getsploit "wordpress 4.7 remote code execution" --count 25
```
A consulta chega ao Vulners inalterada, portanto sua
[sintaxe Lucene](https://vulners.com/docs) funciona como documentado:
```console
$ getsploit 'title:wordpress AND description:"code execution"'
```
`--count` acima de 100 é paginado de forma transparente; uma única resposta da API nunca carrega mais
de 100 documentos.
### Busca offline
```console
$ getsploit --update # baixa o arquivo e constrói o índice FTS5
$ getsploit --status # onde está, tamanho, quantos documentos
$ getsploit --local wordpress 4.7
```
Palavras de busca comuns são correspondidas literalmente, portanto identificadores e números de versão funcionam como
digitados: `wordpress 4.7`, `CVE-2024-3094`, `ms17-010`. Uma consulta que usa filtros de coluna,
operadores booleanos, aspas, parênteses, `*` ou `^` é tratada como uma
[expressão SQLite FTS5](https://www.sqlite.org/fts5.html) e relata seu próprio erro
quando malformada:
```console
$ getsploit --local 'title:eternalblue AND NOT description:metasploit'
```
As colunas pesquisáveis são `id`, `title`, `published`, `description` e `source_data`. A
grafia legada `sourceData:` ainda é aceita.
### Salvando fontes de exploits
```console
$ getsploit --mirror wordpress 4.7
$ getsploit --local --mirror eternalblue
```
Os arquivos são gravados em um diretório derivado da consulta, um arquivo por exploit, criados sem
seguir symlinks e nunca sobrescrevendo nada que já exista.
> [!WARNING]
> Arquivos espelhados são código de terceiros não confiável. Leia-os antes de executá-los.
### Saída legível por máquina
```console
$ getsploit --format json CVE-2024-3094
$ getsploit --format jsonl wordpress | jq -r .id
$ getsploit wordpress > results.tsv # saída redirecionada é separada por tabulação
```
`--json` continua sendo um alias para `--format json`.
### Controle do terminal
```console
$ getsploit --color always query | less -R
$ getsploit --color never query
```
A cor padrão é `auto`. Um terminal largo recebe uma tabela, um estreito recebe registros
empilhados e um fluxo redirecionado recebe valores separados por tabulação — os mesmos dados nos três casos.
Execute `getsploit --help` para a lista completa de opções.
## O banco de dados local
| | |
| --- | --- |
| Localização | `~/.getsploit/getsploit.db`, ou `$GETSPLOIT_HOME` |
| Formato | SQLite com índice FTS5 de conteúdo externo |
| Tokenizador | `unicode61 remove_diacritics 2` |
| Tamanho | aproximadamente 1,7 GB para o corpus completo |
| Atualização | atômica: o novo banco de dados substitui o antigo em uma única operação |
Uma atualização baixa o arquivo por oito conexões paralelas de range, descompacta e
converte-o ao lado do destino, verifica-o e só então faz o commit. O uso de memória não
depende do tamanho do arquivo. Uma busca já em execução contra o banco de dados antigo
termina contra ele sem interferência.
Bancos de dados criados pelo Getsploit 2.x permanecem pesquisáveis; o próximo `--update` os migra
de FTS4 para FTS5. Expressões de proximidade FTS4, como `one NEAR/5 two`, devem ser reescritas
na forma FTS5 `NEAR(...)`.
## Compatibilidade
| | |
| --- | --- |
| Python | 3.11, 3.12, 3.13, 3.14 |
| Sistemas operacionais | Linux, macOS, Windows |
| SDK do Vulners | 4.1 e 4.x mais recentes |
| Dependências de runtime | `click`, `rich`, `vulners` |
## Desenvolvimento
```console
$ git clone https://github.com/vulnersCom/getsploit.git
$ cd getsploit
$ uv sync --all-groups
$ make check
```
| Comando | Finalidade |
| --- | --- |
| `make format` | Formatar e corrigir automaticamente os arquivos-fonte |
| `make lint` | Verificar formatação, lint e tipos |
| `make test` | Executar testes em paralelo |
| `make coverage` | Garantir 100% de cobertura de statements e branches |
| `make leaks` | Verificar segredos em arquivos rastreados |
| `make build` | Criar a wheel e a distribuição de código-fonte |
| `make release` | Executar todos os portões e validar ambas as distribuições |
| `make check` | Tudo acima que bloqueia um merge |
[CONTRIBUTING.md](https://github.com/vulnerscom/getsploit/blob/master/CONTRIBUTING.md) contém as regras de contribuição e
[ARCHITECTURE.md](https://github.com/vulnerscom/getsploit/blob/master/ARCHITECTURE.md) os limites dos módulos e as invariantes do banco de dados.
Um release é uma tag `v<versão>` enviada ao repositório. A partir dela,
[o workflow de release](https://github.com/vulnerscom/getsploit/blob/master/.github/workflows/release.yml) reexecuta o portão completo no commit
marcado, publica no PyPI por meio de trusted publishing e grava o release no GitHub
a partir do changelog. Não existe token PyPI para vazar.
## Segurança
Arquivos-fonte de exploits são conteúdo não confiável: revise-os antes de abrir ou executar.
O Getsploit em si nunca executa o que baixa.
Releases são publicados a partir do GitHub Actions por meio de trusted publishing do PyPI, portanto não
existe token de API de longa duração para vazar, e todo artefato carrega uma atestação de
proveniência de build. Para relatar uma vulnerabilidade no Getsploit, siga [SECURITY.md](https://github.com/vulnerscom/getsploit/blob/master/SECURITY.md).
## Licença
[MIT](https://github.com/vulnerscom/getsploit/blob/master/LICENSE) © Vulners Team e colaboradores.