jnavarroO9/nmfuzz

GitHub: jnavarroO9/nmfuzz

一款基于 Bash 的 CTF 枚举自动化工具,将 Nmap 端口扫描、Gobuster 目录爆破和 wfuzz 子域名模糊测试整合为模块化一键流水线。

Stars: 2 | Forks: 0


  ███╗   ██╗███╗   ███╗███████╗██╗   ██╗███████╗███████╗

  ████╗  ██║████╗ ████║██╔════╝██║   ██║╚════██║╚════██║

  ██╔██╗ ██║██╔████╔██║█████╗  ██║   ██║    ██╔╝    ██╔╝

  ██║╚██╗██║██║╚██╔╝██║██╔══╝  ██║   ██║   ██╔╝    ██╔╝

  ██║ ╚████║██║ ╚═╝ ██║██║     ╚██████╔╝██████╔╝██████╔╝

  ╚═╝  ╚═══╝╚═╝     ╚═╝╚═╝      ╚═════╝╚═════╝ ╚═════╝

**CTF 枚举自动化工具 — 一个实现端口侦察 自动化、tcp (SYN 扫描) 和 udp 端口扫描的 bash 脚本。自动检测 http/https 服务,并启动目录 和子域名 模糊测试。** ![Bash](https://img.shields.io/badge/bash-5.0%2B-4EAA25?style=flat-square&logo=gnubash&logoColor=white) ![Platform](https://img.shields.io/badge/platform-Linux-blue?style=flat-square&logo=linux&logoColor=white) ![License](https://img.shields.io/badge/license-MIT-orange?style=flat-square)
## 功能特点 - **模块化设计** — 可以单独调用任何阶段,也可以一次性运行完整流程 - **持久化目标配置** — 设置一次目标,即可在所有命令中复用 - **自动化工作区** — 为每台机器创建有组织的目录结构 - **SYN 扫描 + 定向扫描** — 快速的全端口发现,随后进行版本/脚本检测 - **可选 UDP 扫描** — 按需扫描排名前 200 的 UDP 端口 - **智能 HTTP 检测** — 读取 nmap 结果以自动查找 HTTP 端口 - **Gobuster 目录暴力破解** — 如果 IP 扫描失败,将自动回退到域名扫描 - **wfuzz 子域名模糊测试** — 智能基线探测可静默过滤误报 - **静默工具输出** — 工具在后台运行;仅显示整洁的摘要结果 ## 环境依赖 | 工具 | 用途 | 安装 | |---|---|---| | `nmap` | 端口扫描 | `apt install nmap` | | `gobuster` | 目录暴力破解 | `apt install gobuster` | | `wfuzz` | 子域名模糊测试 | `apt install wfuzz` | ### 推荐字典 nmfuzz 默认使用以下路径。安装 [SecLists](https://github.com/danielmiessler/SecLists) 以确保它们可用: ``` /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt ← gobuster /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt ← wfuzz ``` ``` apt install seclists # 或 git clone https://github.com/danielmiessler/SecLists /usr/share/wordlists/SecLists ``` ## 安装说明 ``` git clone https://github.com/jNavarroO9/nmfuzz.git cd nmfuzz chmod +x nmfuzz.sh sudo mv nmfuzz.sh /usr/local/bin/nmfuzz ``` ## 用法 ``` nmfuzz [options] ``` ### 命令 #### `settarget ` 配置活动目标并创建工作区目录结构。将配置保存到 `~/.nmfuzz.conf`,以便后续命令无需使用 `--target`。 ``` nmfuzz settarget 10.10.11.23 HackMe ``` ``` HackMe/ ├── nmap/ ← scan output files ├── content/ ← web enumeration, screenshots, notes └── exploits/ ← exploits and payloads ``` #### `portscan [--target ] [--udp]` 运行三阶段的 nmap 枚举: | 阶段 | 命令 | 输出文件 | |---|---|---| | 1 | 扫描所有端口 (`-sS -p- --min-rate 5000 -n -Pn`) | `nmap/allPorts` (可 grep 格式) | | 2 | 针对开放端口进行版本和脚本检测 (`-sCV`) | `nmap/targeted` (nmap 格式) | | 3 *(可选)* | 扫描排名前 200 的 UDP 端口 (`-sU --top-ports 200`) | `nmap/udp-targeted` (nmap 格式) | 如果任何阶段失败,扫描将被中止并报告错误。 ``` sudo nmfuzz portscan sudo nmfuzz portscan --udp sudo nmfuzz portscan --target 10.10.11.23 HackMe --udp ``` #### `webscan [--target ] [选项]` 对在 `targeted` 文件中检测到的每个 HTTP 端口运行 Gobuster 目录扫描。如果针对 IP 的扫描失败,它会自动使用 `.htb` 作为主机名进行重试。 ``` nmfuzz webscan nmfuzz webscan -w /opt/SecLists/Discovery/Web-Content/common.txt nmfuzz webscan -w /opt/wordlists/big.txt -x php,html,txt -t 100 ``` | 选项 | 默认值 | 描述 | |---|---|---| | `-w / --wordlist` | dirbuster medium | 字典路径 | | `-x / --ext` | `php,html,txt,js,bak` | 要探测的扩展名 | | `-t / --threads` | `50` | 并发线程数 | 输出文件:`content/gobuster_.txt` (回退时会生成 `gobuster__domain.txt` )。 #### `subfuzz [--target ] [选项]` 使用 `Host:` 请求头运行 wfuzz 子域名模糊测试扫描。在完整运行之前,它会发起一次 **50 个单词的探测**,以检测无效子域名的基线响应大小,然后自动过滤掉该大小 (`--hh`)。屏幕输出保持整洁;仅打印结果摘要。 ``` nmfuzz subfuzz nmfuzz subfuzz --domain hackme.htb nmfuzz subfuzz -d target.thm -w /opt/SecLists/Discovery/DNS/subdomains-top1million-20000.txt ``` | 选项 | 默认值 | 描述 | |---|---|---| | `-d / --domain` | `.htb` | 要模糊测试的基础域名 | | `-w / --wordlist` | SecLists top 5000 | 字典路径 | | `-t / --threads` | `50` | 并发线程数 | 输出文件:`content/subdomains_.txt` #### `enum [--target ] [选项]` 按顺序运行完整的流程:`portscan → webscan → subfuzz`。如果端口扫描失败,流程将停止。如果未检测到 HTTP 端口,将跳过 Web 扫描阶段。 ``` sudo nmfuzz enum --target 10.10.11.23 HackMe sudo nmfuzz enum --target 10.10.11.23 HackMe --udp --domain hackme.htb sudo nmfuzz enum --target 10.10.11.23 HackMe -w /opt/wordlists/common.txt --sub-wordlist /opt/wordlists/dns.txt ``` | 选项 | 描述 | |---|---| | `--target ` | 内联设置目标(同时保存配置) | | `--udp` | 包含 UDP 扫描 | | `-w / --wordlist` | 用于 gobuster 的字典 | | `--sub-wordlist` | 用于 wfuzz 的字典 | | `-d / --domain` | 用于子域名模糊测试的域名 | #### `status` 显示当前配置的目标以及已生成的输出文件。 ``` nmfuzz status ``` ## 工作流 ### 分步执行 ``` # 1. 配置 target(创建工作区,保存 config) nmfuzz settarget 10.10.11.23 HackMe # 2. 端口枚举 sudo nmfuzz portscan # 3. 目录 brute-force(从步骤 2 自动检测 HTTP 端口) nmfuzz webscan -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt # 4. 子域名 fuzzing nmfuzz subfuzz --domain hackme.htb # 5. 检查生成的内容 nmfuzz status ``` ### 单行命令 ``` sudo nmfuzz enum --target 10.10.11.23 HackMe --udp --domain hackme.htb \ -w /opt/SecLists/Discovery/Web-Content/common.txt \ --sub-wordlist /opt/SecLists/Discovery/DNS/subdomains-top1million-5000.txt ``` ### 内联目标(跳过 settarget) ``` sudo nmfuzz portscan --target 10.10.11.23 HackMe --udp nmfuzz webscan --target 10.10.11.23 HackMe -w /opt/wordlists/big.txt nmfuzz subfuzz --target 10.10.11.23 HackMe -d hackme.htb ``` ## 输出结构 ``` HackMe/ ├── nmap/ │ ├── allPorts SYN scan — grepable format │ ├── targeted Version/script scan — nmap format │ └── udp-targeted UDP scan — nmap format (if requested) ├── content/ │ ├── gobuster_80.txt Directory scan results for port 80 │ ├── gobuster_80_domain.txt (domain fallback, if IP scan failed) │ ├── gobuster_443.txt Directory scan results for port 443 │ └── subdomains_hackme.htb.txt Subdomain fuzzing results └── exploits/ Your exploits and payloads go here ``` ## 配置 nmfuzz 将活动目标保存到 `~/.nmfuzz.conf`: ``` TARGET_IP=10.10.11.23 TARGET_NAME=HackMe WORKSPACE=/home/user/HackMe ``` 此文件会被每个命令自动加载,因此每台机器只需调用一次 `settarget`(或 `--target`)。 ## 注意事项 - `portscan` 和 `enum` **需要 root 权限**,因为 nmap 的原始套接字 SYN 扫描 (`-sS`) 需要该权限。 - 如果 `gobuster` 针对 IP 的扫描失败(例如应用程序需要特定的 `Host:` 请求头),它会自动使用 `.htb` 作为域名进行重试。 - wfuzz 探测运行使用字典的前 50 个条目来检测基线响应。如果检测失败,完整扫描仍会运行——只是没有字符过滤器。 - `gobuster` 和 `wfuzz` 均在静默模式下运行。终端仅打印计数摘要;完整结果将保存到输出文件中。 ## 路线图 - [ ] **独立的 UDP 扫描** — 运行 `portscan --udp-only` 而无需先经过 TCP 阶段 - [ ] **跳过已完成的扫描** — 如果调用 `portscan` 时 `allPorts` / `targeted` 已经存在,则跳过这些阶段并复用现有结果,而不是重新扫描 - [ ] **并发 webscan + subfuzz** — 在 `enum` / `webscan` 上提供 `--concurrent` 标志,以并行运行 gobuster 和 wfuzz,并在两者之间共享拆分的线程池 - [ ] **自动配置 `/etc/hosts`** — 可选地在 `settarget` 时将 ` .htb` 追加到 `/etc/hosts` - [ ] **恢复支持** — 检测运行中断,并从上一个完成的阶段继续执行 MIT — 随心所欲,祝黑客愉快。
标签:AES-256, CTI, HTTP检测, Nmap, SYN扫描, Web安全, Wfuzz, 域名解析, 子域名爆破, 应用安全, 插件系统, 数据展示, 数据统计, 模块化设计, 漏洞评估, 目录爆破, 端口扫描, 红队, 网络安全, 网络安全审计, 自动化修复, 自动化枚举, 蓝队分析, 虚拟驱动器, 隐私保护