
getsploit v3.0.1
从 Vulners 数据库中搜索并下载公开漏洞利用 — 在线,或通过本地 SQLite FTS5 索引完全离线使用。
Getsploit
从 Vulners 数据库中搜索并下载公开的漏洞利用代码—— 可在线使用,也可通过本地索引完全离线使用。
获取 API 密钥 · Vulners 搜索 · 更新日志 · 架构 · 安全策略

为什么选择 Getsploit
- 🔎 一次查询,覆盖所有集合。 Exploit-DB、Metasploit、Packet Storm、Zero Day Initiative、GitHub 概念验证代码等,均由 Vulners 收录索引。
- 📴 断网也能使用。 执行一次
--update即可为整个漏洞利用语料库构建本地 SQLite FTS5 索引;之后每次搜索都是本地查询。 - 🧠 按你输入的内容搜索。
wordpress 4.7、CVE-2024-3094和ms17-010按字面匹配,而刻意构造的全文表达式仍可使用完整的 FTS5 语法。 - 📊 可信的进度。 更新的每个阶段都会报告真实数字,而两个无法预知大小的阶段会如实说明,而非编造一个百分比。
- 🧾 便于管道处理。 输出重定向时支持 JSON、JSON Lines 以及稳定的制表符分隔记录。颜色或装饰绝不会进入机器可读格式。
- 💾 保留原始来源。
--mirror将每个漏洞利用代码主体写入其独立文件。 - 🔐 谨慎对待你的数据。 密钥绝不会作为命令行参数出现,密钥文件打开时不跟随符号链接,下载的内容也绝不会被执行。
- 🧪 经过验证。 在 Linux、macOS 和 Windows 上,针对 Python 3.11 至 3.14 实现 100% 语句和分支覆盖率。
安装
Getsploit 需要 Python 3.11 或更高版本。
$ pipx install getsploit
$ uv tool install getsploit
$ python -m pip install getsploit
API 密钥
在你的 Vulners 账户中创建密钥,然后通过环境变量暴露它:
$ export VULNERS_API_KEY="your-key" # pragma: allowlist secret
$env:VULNERS_API_KEY = "your-key" # pragma: allowlist secret
getsploit --set-key 通过隐藏的确认提示,将密钥存储在 Getsploit 主目录下的私有文件中。环境变量的优先级高于该文件,也是自动化场景下的更优选择。不存在 --api-key 选项:通过命令行传入的密钥会出现在 shell 历史记录和进程列表中。
在线搜索和 --update 需要密钥,而 --local 和 --status 不需要。
用法
在线搜索
$ getsploit CVE-2024-3094
$ getsploit "wordpress 4.7 remote code execution" --count 25
查询会原样发送至 Vulners,因此其 Lucene 语法 可按文档说明使用:
$ getsploit 'title:wordpress AND description:"code execution"'
--count 超过 100 时会自动分页;单次 API 响应绝不会包含超过 100 个文档。
离线搜索
$ getsploit --update # 下载归档并构建 FTS5 索引
$ getsploit --status # 查看位置、大小、文档数量
$ getsploit --local wordpress 4.7
普通搜索词按字面匹配,因此标识符和版本号可按输入原样使用:wordpress 4.7、CVE-2024-3094、ms17-010。使用列过滤器、布尔运算符、引号、括号、* 或 ^ 的查询会被视为 SQLite FTS5 表达式,格式错误时会报告相应错误:
$ getsploit --local 'title:eternalblue AND NOT description:metasploit'
可搜索的列为 id、title、published、description 和 source_data。旧的 sourceData: 拼写仍然有效。
保存漏洞利用代码来源
$ getsploit --mirror wordpress 4.7
$ getsploit --local --mirror eternalblue
文件会保存到由查询派生的目录中,每个漏洞利用代码一个文件,创建时不跟随符号链接,且绝不会覆盖任何已存在的文件。
[!WARNING] 镜像文件是不可信的第三方代码。运行前请先阅读它们。
机器可读输出
$ getsploit --format json CVE-2024-3094
$ getsploit --format jsonl wordpress | jq -r .id
$ getsploit wordpress > results.tsv # 重定向输出为制表符分隔格式
--json 仍然是 --format json 的别名。
终端控制
$ getsploit --color always query | less -R
$ getsploit --color never query
颜色默认设为 auto。宽终端显示表格,窄终端显示堆叠记录,重定向流则输出制表符分隔的值——三种情况下数据内容相同。
运行 getsploit --help 查看完整选项列表。
本地数据库
| 位置 | ~/.getsploit/getsploit.db,或 $GETSPLOIT_HOME |
| 格式 | 带外部内容 FTS5 索引的 SQLite |
| 分词器 | unicode61 remove_diacritics 2 |
| 大小 | 完整语料库约 1.7 GB |
| 更新 | 原子性:新数据库会在单次操作中替换旧数据库 |
更新过程通过八个并行范围连接下载归档文件,在目标位置旁边解压并转换,进行验证,然后才提交。内存占用与归档文件大小无关。已针对旧数据库运行的搜索会不受干扰地继续完成。
由 Getsploit 2.x 构建的数据库仍可搜索;下一次 --update 会将其从 FTS4 迁移到 FTS5。FTS4 邻近表达式(如 one NEAR/5 two)必须改写为 FTS5 的 NEAR(...) 形式。
兼容性
| Python | 3.11, 3.12, 3.13, 3.14 |
| 操作系统 | Linux, macOS, Windows |
| Vulners SDK | 4.1 及更新的 4.x 版本 |
| 运行时依赖 | click、rich、vulners |
开发
$ 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 | 上述所有合并门禁检查 |
CONTRIBUTING.md 包含贡献规则,ARCHITECTURE.md 包含模块边界和数据库不变量。
发布即推送一个 v<version> 标签。此后发布工作流会在带标签的提交上重新运行完整门禁,通过可信发布将包发布到 PyPI,并根据变更日志生成 GitHub Release。不存在可泄露的 PyPI 令牌。
安全
漏洞利用代码源文件是不可信内容:在打开或运行前务必审查。Getsploit 本身绝不会执行其下载的内容。
发布版本通过 PyPI 可信发布从 GitHub Actions 发布,因此不存在可泄露的长期 API 令牌,且每个构建产物都带有构建来源证明。要报告 Getsploit 中的漏洞,请遵循 SECURITY.md。
许可证
MIT © Vulners 团队及其贡献者。