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安全, 可自定义解析器, 大数据, 子域名枚举, 实时处理, 密码管理, 指纹识别, 数据统计, 白帽黑客, 目录扫描, 知识库, 端口扫描, 系统安全, 网络安全, 自动化安全工具, 蓝队分析, 隐私保护