hakkuri01/nokizaru
GitHub: hakkuri01/nokizaru
一款用 Ruby 编写的 Web 侦察 CLI 工具,通过单条命令整合多源情报和智能扫描,快速构建目标攻击面概览。
Stars: 1 | Forks: 0
Nokizaru 是一个专为枚举核心 Web 侦察面而定制的 CLI 工具。其目标是快速提供足够广泛且高信号的目标概览,从而无需依赖更庞大的 OSINT 套件。Nokizaru 旨在通过单条全扫描命令生成可观的侦察结果,以此取代顺序运行多个工具的繁琐过程。其理想使用场景是在漏洞赏金或 Web 应用渗透测试项目的侦察阶段,收集 Web 目标的相关信息。因此,其主要受众是安全研究人员(而非 CTI 分析师,后者可能仍倾向于使用更大型、更全面的 OSINT 套件)。
## 灵感与背景
Nokizaru 最初是 [thewhiteh4t](https://github.com/thewhiteh4t) 开发的 [FinalRecon](https://github.com/thewhiteh4t/FinalRecon) 的 Ruby 重实现。最初的目标很直接:在保留熟悉的侦察工作流的同时,采用 Ruby 优先的设计选择进行重构。
随着时间的推移,该项目已超越了单纯的重写。Nokizaru 现在包含了结构化的发现输出、更广泛的提供商覆盖(并计划增加更多集成)、由 Ronin 驱动的用于持久化目标画像的工作空间,以及针对稳定运行时行为的目标化性能改进。
## 架构
FinalRecon 的 Python 实现通过异步优先的方法(并发 HTTP 调用、快速扇出和清晰的模块边界)实现了速度。Nokizaru 保留了相同的高级模块和“单命令”工作流,但针对 Ruby 的惯用语和性能限制调整了实现:
- **并发模型:** Nokizaru 倾向于有界并发(工作者池/线程队列)和严格的每任务超时。这可以防止单个不稳定的提供商或端点停滞整个扫描。
- **可复用网络:** 尽可能使用共享的 HTTP 客户端(保持活动/连接复用),以减少跨模块的握手开销。
- **错误用户体验:** 提供商失败会被清晰且一致地报告,但 Nokizaru 也致力于使错误更具可操作性,减少噪音。
- **性能一致性:** 超时和预算旨在使每次执行之间的运行时间保持一致,而不是“有时快,有时卡住”。
### 上下文感知扫描流水线
Nokizaru 将早期侦察结果(尤其是初始标头)视为可影响后续模块的共享目标上下文。目标很简单:在保持速度的同时,避免对故意标准化响应的目标(CDN/WAF、重定向密集型设置等)进行低信号暴力破解。
- **标头 -> 目标画像:** 标头模块收集响应标头并推导出轻量级的目标画像(重定向行为、规范方案/主机提示)
- **重锚:** 爬虫和目录枚举消费该画像,并可能自动“重锚”到最合适的范围内 URL(例如,HTTP -> HTTPS 规范化)。你会看到如下输出:
- `⟦+⟧ Re-Anchor...⟦ https://target.tld (http->https) ⟧`
- `⟦+⟧ Re-Anchor...⟦ https://target.tld (same-scope) ⟧`
- **爬虫馈送目录枚举:** 目录枚举使用爬虫产物(robots、内部链接、站点地图 URL、在 JavaScript 中发现的 URL)作为高信号种子路径,而不是盲目地为每个目标依赖庞大的字典。
### 目录枚举模式
目录枚举在快速的预检探测后自动选择一种模式。这种模式选择旨在保留信号并避免在严格的目标上扫描时间激增。
- **full:** 普通目标;扫描完整的字典(受内部预算限制)
- **seeded:** 重定向规范化或混合目标;优先考虑爬虫派生的路径 + 一个小的“高信号”列表,可选择混合少量字典内容
- **hostile:** 严格/超时频繁的目标;使用小的种子集和短超时,以在优化的时间预算内尽可能提取高信号情报。
选定的模式会打印在目录枚举横幅中,以便操作员结合上下文解读结果。
目录枚举保持 stdout 专注于漏洞赏金的枢轴状态(200/204/401/403/405/500),并仅在 3xx 重定向信号看起来有意义时才报告。导出的数据保持原始且未过滤,以便你随时检查每个发现的状态。
## 安装
### Linux / macOS (Homebrew)
Homebrew 是 Linux/macOS 的主要安装方法:
```
brew tap hakkuri01/nokizaru https://github.com/hakkuri01/nokizaru
brew install nokizaru
nokizaru --help
man nokizaru
```
更新方式:
```
brew update
brew upgrade nokizaru
```
Nokizaru Homebrew 版本固定在稳定的 git 标签上。只要发布了更新的稳定 formula 版本,`brew upgrade nokizaru` 就会更新你的安装。
### 从源码构建
```
git clone https://github.com/hakkuri01/nokizaru.git
cd nokizaru
gem build nokizaru.gemspec
gem install nokizaru-*.gem
nokizaru --help
```
### Tarball
```
curl -L -o nokizaru.tar.gz https://github.com/hakkuri01/nokizaru/archive/refs/heads/main.tar.gz
tar -xzf nokizaru.tar.gz
cd nokizaru
gem build nokizaru.gemspec
gem install nokizaru-*.gem
nokizaru --help
```
## 配置
### API 密钥
某些模块使用 API 密钥从不同资源获取数据。这些是可选的——如果你不提供 API 密钥,该模块将被跳过。
#### 环境变量
如果设置了环境变量,则从中读取密钥;否则从用户数据目录(`~/.local/share/nokizaru/keys.json`)加载。
```
NK_BEVIGIL_KEY, NK_BINEDGE_KEY, NK_CENSYS_API_ID, NK_CENSYS_API_SECRET,
NK_CHAOS_KEY, NK_FB_KEY, NK_HUNTER_KEY, NK_NETLAS_KEY,
NK_SHODAN_KEY, NK_VT_KEY, NK_WAPPALYZER_KEY, NK_ZOOMEYE_KEY
# 示例:
export NK_SHODAN_KEY="kl32lcdqwcdfv"
```
#### 已保存的密钥
你可以使用 **`-k`** 添加密钥,这些密钥将自动保存在配置目录中。
```
# 用法
nokizaru -k '
@'
Valid Keys : 'bevigil', 'binedge', 'censys_api_id', 'censys_api_secret', 'chaos', 'facebook', 'hunter', 'netlas', 'shodan', 'virustotal', 'wappalyzer', 'zoomeye'
# 示例:
nokizaru -k 'shodan@kl32lcdqwcdfv'
```
`Path = $HOME/.local/share/nokizaru/keys.json`
| Source | Module | Link |
| ---------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| Facebook | Sub Domain Enum | [https://developers.facebook.com/docs/facebook-login/access-tokens](https://developers.facebook.com/docs/facebook-login/access-tokens) |
| VirusTotal | Sub Domain Enum | [https://www.virustotal.com/gui/my-apikey](https://www.virustotal.com/gui/my-apikey) |
| Shodan | Sub Domain Enum | [https://developer.shodan.io/api/requirements](https://developer.shodan.io/api/requirements) |
| BeVigil | Sub Domain Enum | [https://bevigil.com/osint-api](https://bevigil.com/osint-api) |
| BinaryEdge | Sub Domain Enum | [https://app.binaryedge.io/](https://app.binaryedge.io/) |
| Netlas | Sub Domain Enum | [https://docs.netlas.io/getting_started/](https://docs.netlas.io/getting_started/) |
| ZoomEye | Sub Domain Enum | [https://www.zoomeye.hk/](https://www.zoomeye.hk/) |
| Hunter | Sub Domain Enum | [https://hunter.how/search-api](https://hunter.how/search-api) |
| Chaos | Sub Domain Enum | [https://docs.projectdiscovery.io/tools/chaos](https://docs.projectdiscovery.io/tools/chaos) |
| Censys | Sub Domain Enum | [https://search.censys.io/api](https://search.censys.io/api) |
| Wappalyzer | Architecture Fingerprinting | [https://www.wappalyzer.com/api/](https://www.wappalyzer.com/api/) |
### JSON 配置文件
默认配置文件位于 `~/.config/nokizaru/config.json`
```
{
"common": {
"timeout": 30,
"dns_servers": "8.8.8.8, 8.8.4.4, 1.1.1.1, 1.0.0.1"
},
"ssl_cert": {
"ssl_port": 443
},
"port_scan": {
"threads": 50
},
"dir_enum": {
"threads": 50,
"redirect": false,
"verify_ssl": true,
"extension": ""
},
"export": {
"format": "txt"
}
}
```
## 用法
```
Nokizaru - Recon Refined
Arguments:
-h, --help Show this help message and exit
-v, --version Show version number and exit
--url URL Target URL
--headers Header Information
--sslinfo SSL Certificate Information
--whois Whois Lookup
--crawl Crawl Target
--dns DNS Enumeration
--sub Sub-Domain Enumeration
--arch Architecture Fingerprinting
--dir Directory Search
--wayback Wayback URLs
--wb-raw Wayback raw URL output (no quality filtering)
--ps Fast Port Scan
--full Full Recon
--no-[MODULE] Skip specified modules above during full scan (eg. --no-dir)
--export Write results to export directory
Persistence / Enrichment:
--project [NAME] Enable a persistent workspace (profiles, caching, diffing)
--cache Enable caching even without a project
--no-cache Disable caching (even in a project)
--diff last / [ID] Diff this run against the last (or another run ID in the workspace)
Extra Options:
-nb Hide Banner
-dt DT Number of threads for directory enum [ Default : 30 ]
-pt PT Number of threads for port scan [ Default : 50 ]
-T T Request Timeout [ Default : 30.0 ]
-w W Path to Wordlist [ Default : wordlists/dirb_common.txt ]
-r Allow Redirect [ Default : False ]
-s Toggle SSL Verification [ Default : True ]
-sp SP Specify SSL Port [ Default : 443 ]
-d D Custom DNS Servers [ Default : 1.1.1.1 ]
-e E File Extension(s) (comma separated) [ Example : txt,xml,php,etc. ]
-o O Export Format(s) (comma-separated) [ Default : txt,json,html ]
-cd CD Change export directory [ Default : ~/.local/share/nokizaru/dumps/nk_ ]
-of OF Change export folder name [ Default : YYYY-MM-DD_HH-MM-SS ]
-k K Add API key [ Example : shodan@key ]
```
### 示例
```
# Full scan
nokizaru --full --url https://example.com
# Check headers
nokizaru --headers --url https://example.com
# Crawl target
nokizaru --crawl --url https://example.com
# Directory enumeration
nokizaru --dir --url https://example.com -e txt,php -w /path/to/wordlist
```
## 输出 / 导出
Nokizaru **默认为临时模式**(stdout)。如果你指定 `--export`,它将写入 **TXT**、**JSON** 和 **HTML** 报告(除非你用 `-o` 缩小格式范围)。
默认情况下,导出写入到:
```
~/.local/share/nokizaru/dumps/nk_/
├── YYYY-MM-DD_HH-MM-SS.txt
├── YYYY-MM-DD_HH-MM-SS.json
└── YYYY-MM-DD_HH-MM-SS.html
```
每个目标都有自己的目录,每次运行都有时间戳,便于组织和排序。你可以使用 `-cd` 覆盖目录,或使用 `-of` 覆盖基本名称。
## 工作空间 / 缓存 / 差异比对
如果你指定 `--project `,Nokizaru 可以使用 Ronin Framework 为目标创建一个持久化工作空间:
- 内部存储运行元数据和结果(以便你可以随时间构建目标画像)
- 启用缓存(加速重复运行)
- 启用运行之间的差异比对:`--diff last`(或 `--diff `)
## 路线图
### 提供商扩展
以下提供商计划集成,以增强侦察覆盖范围和信号质量:
- **GreyNoise:** 互联网噪音分类,用于过滤大规模扫描活动并专注于针对性侦察
所有提供商将遵循 Nokizaru 现有的集成模式:可选 API 密钥、失败时的优雅降级以及一致的错误报告。这些新增功能优先考虑覆盖广度和可操作的情报,以支持漏洞赏金/渗透测试侦察工作流。
## 负责任的使用 / 免责声明
* **Nokizaru 旨在用于授权的安全测试和研究。请始终确保你拥有扫描非你所拥有的目标的明确许可。**
* Nokizaru 根据 MIT 许可证授权。如果你复用 Nokizaru 或重新分发衍生作品,请确保保留适用的许可声明。标签:Bug Bounty, C2日志可视化, ESC4, OSINT, Ruby, Web安全, 可自定义解析器, 大数据, 子域名枚举, 实时处理, 密码管理, 指纹识别, 数据统计, 白帽黑客, 目录扫描, 知识库, 端口扫描, 系统安全, 网络安全, 自动化安全工具, 蓝队分析, 隐私保护