
Ищите и скачивайте публичные эксплойты из базы данных Vulners — онлайн или полностью офлайн, из локального индекса SQLite FTS5.
<div align="center">
# Getsploit
**Поиск и загрузка публичных эксплойтов из базы [Vulners](https://vulners.com) —
онлайн или полностью офлайн по локальному индексу.**
[](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)
[Получить API-ключ](https://vulners.com/userinfo) ·
[Поиск Vulners](https://vulners.com/search) ·
[Журнал изменений](https://github.com/vulnerscom/getsploit/blob/master/CHANGELOG.md) ·
[Архитектура](https://github.com/vulnerscom/getsploit/blob/master/ARCHITECTURE.md) ·
[Политика безопасности](https://github.com/vulnerscom/getsploit/blob/master/SECURITY.md)
<img src="https://assets.kitploit.com/production/public/readmes/1237/6911a453ad43c32e26b89a2a3895cd81e60e83924db87967199871d7b07089e9.gif"
alt="Getsploit выполняет онлайн-поиск, создаёт локальный FTS5-индекс, затем ищет и зеркалирует офлайн"
width="900">
</div>
---
## Почему Getsploit
- 🔎 **Один запрос — все коллекции.** Exploit-DB, Metasploit, Packet Storm, Zero Day
Initiative, GitHub proof-of-concept и другие, проиндексированные Vulners.
- 📴 **Работает без сети.** Одна команда `--update` создаёт локальный SQLite FTS5-индекс
всего корпуса эксплойтов; каждый последующий поиск выполняется локально.
- 🧠 **Ищет то, что вы ввели.** `wordpress 4.7`, `CVE-2024-3094` и `ms17-010`
сопоставляются буквально, а осознанное полнотекстовое выражение по-прежнему получает
полный синтаксис FTS5.
- 📊 **Прогресс, которому можно доверять.** Каждый этап обновления сообщает реальные
цифры, а два этапа, чей объём заранее неизвестен, честно говорят об этом, вместо того
чтобы выдумывать проценты.
- 🧾 **Удобно для конвейеров.** JSON, JSON Lines и стабильные записи, разделённые
табуляцией, при перенаправлении вывода. Никакой цвет или оформление не попадает
в машинный формат.
- 💾 **Сохраняет исходники.** `--mirror` записывает тело каждого эксплойта в отдельный
файл.
- 🔐 **Бережно относится к вашим данным.** Ключ никогда не передаётся как аргумент
командной строки, файл ключа открывается без перехода по символическим ссылкам,
а загруженное содержимое никогда не выполняется.
- 🧪 **Проверено.** 100% покрытие операторов и ветвлений на Python 3.11–3.14,
в Linux, macOS и Windows.
---
## Установка
Для Getsploit требуется Python 3.11 или новее.
```console
$ pipx install getsploit
```
```console
$ uv tool install getsploit
```
```console
$ python -m pip install getsploit
```
## API-ключ
Создайте ключ в [вашем аккаунте Vulners](https://vulners.com/userinfo), затем укажите его
через переменную окружения:
```console
$ export VULNERS_API_KEY="your-key" # pragma: allowlist secret
```
```powershell
$env:VULNERS_API_KEY = "your-key" # pragma: allowlist secret
```
`getsploit --set-key` сохраняет ключ через скрытый запрос подтверждения в приватном
файле в домашнем каталоге Getsploit. Переменная окружения имеет приоритет над этим
файлом и лучше подходит для автоматизации. Опции `--api-key` не существует: ключ,
переданный в командной строке, попадает в историю shell и в список процессов.
Для онлайн-поиска и `--update` нужен ключ. Для `--local` и `--status` — нет.
## Использование
### Онлайн-поиск
```console
$ getsploit CVE-2024-3094
$ getsploit "wordpress 4.7 remote code execution" --count 25
```
Запрос передаётся в Vulners без изменений, поэтому его
[синтаксис Lucene](https://vulners.com/docs) работает как описано в документации:
```console
$ getsploit 'title:wordpress AND description:"code execution"'
```
`--count` больше 100 прозрачно разбивается на страницы; один ответ API никогда
не содержит более 100 документов.
### Офлайн-поиск
```console
$ getsploit --update # скачать архив и построить FTS5-индекс
$ getsploit --status # где находится, размер, количество документов
$ getsploit --local wordpress 4.7
```
Обычные поисковые слова сопоставляются буквально, поэтому идентификаторы и номера
версий работают как введённые: `wordpress 4.7`, `CVE-2024-3094`, `ms17-010`. Запрос,
использующий фильтры по колонкам, логические операторы, кавычки, скобки, `*` или `^`,
обрабатывается как [выражение SQLite FTS5](https://www.sqlite.org/fts5.html)
и при некорректном синтаксисе сообщает собственную ошибку:
```console
$ getsploit --local 'title:eternalblue AND NOT description:metasploit'
```
Поисковые колонки: `id`, `title`, `published`, `description` и `source_data`.
Устаревшее написание `sourceData:` по-прежнему принимается.
### Сохранение исходников эксплойтов
```console
$ getsploit --mirror wordpress 4.7
$ getsploit --local --mirror eternalblue
```
Файлы сохраняются в каталог, определяемый запросом, по одному файлу на эксплойт;
каталог создаётся без перехода по символическим ссылкам и никогда не перезаписывает
уже существующие файлы.
> [!WARNING]
> Зеркалированные файлы — это недоверенный сторонний код. Прочитайте их перед запуском.
### Машиночитаемый вывод
```console
$ getsploit --format json CVE-2024-3094
$ getsploit --format jsonl wordpress | jq -r .id
$ getsploit wordpress > results.tsv # при перенаправлении вывод разделён табуляцией
```
`--json` остаётся псевдонимом для `--format json`.
### Управление терминалом
```console
$ getsploit --color always query | less -R
$ getsploit --color never query
```
Цвет по умолчанию — `auto`. На широком терминале выводится таблица, на узком — записи
друг под другом, а при перенаправлении потока — значения, разделённые табуляцией:
в любом случае это одни и те же данные.
Выполните `getsploit --help`, чтобы увидеть полный список опций.
## Локальная база данных
| | |
| --- | --- |
| Расположение | `~/.getsploit/getsploit.db` или `$GETSPLOIT_HOME` |
| Формат | SQLite с индексом FTS5 для внешнего содержимого |
| Токенизатор | `unicode61 remove_diacritics 2` |
| Размер | примерно 1.7 ГБ для полного корпуса |
| Обновление | атомарно: новая база заменяет старую одной операцией |
При обновлении архив скачивается по восьми параллельным range-соединениям,
распаковывается и конвертируется рядом с целевым расположением, проверяется и только
затем фиксируется. Использование памяти не зависит от размера архива. Уже запущенный
поиск по старой базе продолжает работать с ней без помех.
Базы, созданные Getsploit 2.x, остаются доступными для поиска; следующая команда
`--update` перенесёт их с FTS4 на FTS5. Проксимити-выражения FTS4, такие как
`one NEAR/5 two`, необходимо переписать в форму `NEAR(...)` FTS5.
## Совместимость
| | |
| --- | --- |
| Python | 3.11, 3.12, 3.13, 3.14 |
| Операционные системы | Linux, macOS, Windows |
| Vulners SDK | 4.1 и новее 4.x |
| Зависимости времени выполнения | `click`, `rich`, `vulners` |
## Разработка
```console
$ git clone https://github.com/vulnersCom/getsploit.git
$ cd getsploit
$ uv sync --all-groups
$ make check
```
| Команда | Назначение |
| --- | --- |
| `make format` | Форматирование и автоисправление исходных файлов |
| `make lint` | Проверка форматирования, линтера и типов |
| `make test` | Запуск тестов параллельно |
| `make coverage` | Обеспечение 100% покрытия операторов и ветвлений |
| `make leaks` | Поиск секретов в отслеживаемых файлах |
| `make build` | Сборка wheel и исходного дистрибутива |
| `make release` | Запуск всех проверок и валидация обоих дистрибутивов |
| `make check` | Все вышеперечисленное, что блокирует merge |
[CONTRIBUTING.md](https://github.com/vulnerscom/getsploit/blob/master/CONTRIBUTING.md) содержит правила внесения вклада,
а [ARCHITECTURE.md](https://github.com/vulnerscom/getsploit/blob/master/ARCHITECTURE.md) — границы модулей и инварианты базы данных.
Релиз — это запушенный тег `v<version>`. Затем
[пайплайн релиза](https://github.com/vulnerscom/getsploit/blob/master/.github/workflows/release.yml) повторно прогоняет все проверки
на тегированном коммите, публикует пакет в PyPI через trusted publishing и создаёт
релиз GitHub на основе журнала изменений. Никакого PyPI-токена, который мог бы
утечь, не существует.
## Безопасность
Файлы исходников эксплойтов — недоверенное содержимое: просматривайте их перед
открытием или запуском. Сам Getsploit никогда не выполняет загруженное.
Релизы публикуются из GitHub Actions через trusted publishing PyPI, поэтому
не существует долгоживущего API-токена, который мог бы утечь, а каждый артефакт
содержит подтверждение происхождения сборки. Чтобы сообщить об уязвимости
в Getsploit, следуйте инструкциям в [SECURITY.md](https://github.com/vulnerscom/getsploit/blob/master/SECURITY.md).
## Лицензия
[MIT](https://github.com/vulnerscom/getsploit/blob/master/LICENSE) © Vulners Team и участники проекта.