damanoreshkan-beep/ShodanHound

GitHub: damanoreshkan-beep/ShodanHound

一款零依赖的 Node.js 侦察工具,用于在公开 GitHub 仓库中搜索并实时验证泄露的 Shodan API 密钥。

Stars: 0 | Forks: 0

# 🐕 ShodanHound ### 在公开的 GitHub 上追踪泄露的 Shodan API 密钥 — 并验证它们是否有效。 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Node.js](https://img.shields.io/badge/node-%E2%89%A518-339933?logo=node.js&logoColor=white)](https://nodejs.org) [![Zero dependencies](https://img.shields.io/badge/dependencies-0-brightgreen)](package.json) [![Made for security research](https://img.shields.io/badge/purpose-security%20research-blue)](#-responsible-use) *这是一个单文件、零依赖的侦察工具,用于扫描公开的代码仓库,* 查找暴露的 Shodan API 密钥,并针对 Shodan API 验证每一个密钥 —— 让你的* 结果中只包含真正可用的密钥。*
## ✨ 为什么选择 ShodanHound 开发者会泄露密钥。这在日常中时有发生 —— commit 中硬编码的密钥,或者公开仓库中被遗忘的配置文件。**ShodanHound** 将发现过程自动化,并且至关重要的是,它执行了大多数“一把梭”脚本所跳过的**验证**步骤: - 🔎 **智能搜索** — 使用一组精心整理的特定于 Shodan 的模式来驱动 GitHub Code Search API,而不是仅仅使用单一简单的字符串。 - 🎯 **精确定位泄露位置** — 搜索 `.py`、`.js`、`.ts`、`.json` 和 `.env` 文件,无论是否带引号。精确的范围意味着更少的下载量和比盲目爬取快得多的扫描速度。 - ✅ **实时验证** — 每个候选密钥都会针对 `api.shodan.io` 进行检查;只有具有真正可用额度的密钥才会出现在你的输出结果中。 - 🧠 **尊重速率限制** — 遵循 `Retry-After` / `X-RateLimit-Reset` header 并带有自适应回退机制,因此它可以无人值守运行,而不会导致你被限流。 - 🪶 **零依赖** — 纯粹使用 Node.js 内置的 `fetch`。不需要 `npm install`,没有供应链风险。一个文件,随时随地运行。 - 🧹 **即时去重** — 每次运行中每个密钥只会被检查一次。 ## ⚙️ 工作原理 ``` ┌──────────────┐ ┌────────────────────┐ ┌───────────────────┐ ┌──────────────┐ │ keyword │ ──▶ │ GitHub Code Search │ ──▶ │ fetch file, parse │ ──▶ │ Shodan API │ │ patterns │ │ (paginated, 100/pg)│ │ 32-char candidate │ │ validate key │ └──────────────┘ └────────────────────┘ └───────────────────┘ └──────┬───────┘ │ credits ≥ 50 ? ────────────────┘ │ yes ▼ keys.out ✅ ``` 1. 从 `keywords/shodan.txt` 读取模式(每行一个查询)。 2. 对于每个模式,在密钥容易泄露的文件类型(`.py`、`.js`、`.ts`、`.json`、`.env`)范围内搜索 GitHub Code Search。 3. 下载每个匹配的文件,并提取关键字附近任何孤立的 32 字符 token —— 无论带不带引号。 4. 请求 Shodan 的 `api-info` endpoint。如果该密钥具有 **≥ 50 个查询额度**,说明它是真实且有用的 → 将其附加到你的输出文件中。 ## 🚀 快速开始 **环境要求:** Node.js ≥ 18 以及一个 GitHub personal access token(不需要任何 scope —— 仅用于公开代码搜索)。 ``` # clone git clone https://github.com/damanoreshkan-beep/ShodanHound.git cd ShodanHound # run — 传递你的 GitHub token 和一个输出文件 node shodanhound.mjs keys.out ``` 使用 [GitHub CLI](https://cli.github.com)?可以跳过繁琐的 token 处理: ``` node shodanhound.mjs "$(gh auth token)" keys.out ``` ### 输出示例 ``` 06.06.2026, 00:18:09 — query: 'language:python shodan_api_key=' ✓ KEY FOUND: ******************************** (credits: 99, scans: 100) Done. 1342 unique candidates checked. Results in keys.out ``` ## 🧩 自定义搜索任务 模式位于 [`keywords/shodan.txt`](keywords/shodan.txt) 中 —— 每行一个搜索字符串,不包含空格。添加你自己的内容来扩大搜索范围: ``` shodan_api_key= api_shodan_key= shodankey= sd=shodan( ``` 通过编辑 `shodanhound.mjs` 顶部的 `KEYWORD_FILES` 数组,你可以让 ShodanHound 指向更多的关键字文件。每个模式都会在 `SCOPES` 数组(默认为 `.py`、`.js`、`.ts`、`.json`、`.env`)中定义的所有范围内进行搜索 —— 在那里添加或删除范围即可调整覆盖率与速度的平衡。 ## 🛡️ 负责任的使用 ShodanHound 专为**防御性安全研究、Bug Bounty 和负责任的漏洞披露**而构建 —— 例如,在攻击者之前找到*你自己的*组织泄露的密钥。 - ✅ 审计你自己/获得授权的基础设施。 - ✅ 将发现的密钥报告给其所有者和 Shodan,以便他们能够进行轮换。 - ❌ **绝不**使用、出售或存储你未被授权访问的第三方密钥。 发现的凭证是有效的机密信息。请将它们视为高危数据:报告并立即销毁。 默认情况下,输出文件会被 git 忽略,因此你绝不会发布你找到的内容。 你有责任遵守所有适用的法律以及 GitHub 和 Shodan 的服务条款。 ## 📜 许可证 [MIT](LICENSE) © 2026
**如果 ShodanHound 帮助你避免了泄露,请点个 ⭐ —— 这有助于其他人发现它。**
标签:API密钥, ESC4, GNU通用公共许可证, MITM代理, Node.js, OSINT, StruQ, 安全助手, 自定义脚本