mrecio87/nd-scanner

GitHub: mrecio87/nd-scanner

以 Docker 容器运行的独立内网漏洞扫描器,集成了主机发现、端口扫描、服务识别和漏洞检测,提供 Web 界面和命令行两种使用方式。

Stars: 0 | Forks: 0

# nd-scanner 一个独立的网络扫描设备,以单个 Docker 容器运行。给它一个范围,它就能发现存活主机和开放端口,识别 其背后的服务,针对漏洞模板集测试这些 服务,并生成一份可读的报告。 它在普通硬件上运行良好。扫描将大部分时间花在等待 网络上,而不是消耗 CPU。 # 安装说明 你需要一台 Debian 或 Ubuntu 机器(物理机或虚拟机),连接到可以 路由到你打算扫描的目标网络。无需事先安装任何其他内容。 ``` curl -fsSL https://raw.githubusercontent.com/mrecio87/nd-scanner/main/install.sh | bash ``` 如果缺少 Docker 和 git,它会自动安装,克隆到 `~/nd-scanner`,提示输入 密码,进行构建,并启动 Web 界面。在提示符下,输入密码 或按 Enter 键自动生成。无论哪种方式,密码都会在最后打印出来,因此 在关闭终端之前请妥善保存。 首次构建会拉取扫描工具和漏洞模板,因此请耐心等待 几分钟。完成后,它会打印出 URL、密码和 证书指纹。 打开 URL。浏览器会警告自签名证书的问题。将其显示的指纹 与刚刚打印出的指纹进行比对,然后继续并登录。 如果不进行该检查,证书将毫无意义。 如果安装程序将你添加到了 `docker` 组,请在手动 运行 Docker 命令之前注销并重新登录。 重新运行 `./setup.sh` 是安全的。它会保留已设置的密码、证书和 设置,因此请在重启或更改地址后使用它。 **已有 Docker:** ``` git clone https://github.com/mrecio87/nd-scanner.git nd-scanner && cd nd-scanner && ./setup.sh --prompt ``` **在无网络环境下运行:** 在有网络连接的地方构建,将 image 移植过去,然后运行 `./setup.sh`。 ``` docker save nd-scanner:latest | gzip > nd-scanner.tar.gz gunzip -c nd-scanner.tar.gz | docker load ``` # 运行扫描 登录,每行输入一个目标网络,选择一个 profile,然后开始。页面会 显示实时进度,完成的报告中包含一个打印 / 另存为 PDF 的按钮。 | Profile | 功能说明 | |---|---| | Quick look | 前 100 个端口,无漏洞检查。快速了解整体情况 | | Standard | 前 1000 个端口,完整的模板检查 | | Gentle | 速率较慢且使用 `-T2` 计时,适用于脆弱或生产网络 | | Thorough | 全部 65535 个端口(速度较慢) | 在不熟悉的网络上,请先运行 Quick look。几分钟即可 告诉你是否能完全连接到目标,然后再决定是否进行长时间的扫描。 # 命令行 与 Web 界面并行工作,且互不影响。 ``` docker compose run --rm netscan 10.0.0.5 TARGET="10.0.0.5,10.0.0.6" docker compose run --rm netscan ``` 或者在 `targets/targets.txt` 中列出目标,每行一个,无需参数运行。 主机名、IP 和 CIDR 范围均可使用。 # 输出 每次运行都会创建 `output/scan-/`: | 文件 | 内容 | |---|---| | `summary.txt` | 人类可读的汇总。请首先阅读此文件 | | `naabu.json` | 发现的所有开放端口 (JSONL) | | `hostports.tsv` | 主机到以逗号分隔的开放端口 | | `nmap/.{nmap,xml,gnmap}` | 每个主机的服务和版本检测 | | `nuclei.jsonl` | 漏洞检测结果 (JSONL) | | `targets.txt` | 实际扫描的内容,用于记录留存 | # 配置 `.env` 中的环境变量。默认值是有意保守设置的。 | 变量 | 默认值 | 说明 | |---|---|---| | `WEBUI_PASSWORD` | *(自动生成)* | 登录页面的密码 | | `WEBUI_SECRET` | *(随机)* | Session key。设置它以在重启后保留会话 | | `WEBUI_PORT` | `8080` | 要发布的主机端口 | | `BRAND_NAME` | `Network Defenders` | 显示在页眉和报告页脚中 | | `BRAND_TAGLINE` | `Network Security Assessment` | 品牌名称下的副标题 | | `HTTPS` | `true` | 默认开启 TLS。`false` 则提供明文服务 | | `TLS_SAN` | *(自动检测)* | 证书的额外地址 | | `TLS_CERT` / `TLS_KEY` | | 你自己的证书和密钥的路径 | | `SCAN_TYPE` | `auto` | `auto` 每次运行自动选择,`s` = SYN,`c` = TCP connect | | `NAABU_TOP_PORTS` | `1000` | 只能选 `100`、`1000` 或 `full`。如果设置了 `NAABU_PORTS` 则会被忽略 | | `NAABU_PORTS` | | 显式列表,例如 `80,443,8080-8090`,或 `-` 代表全部 65535 | | `NAABU_RATE` | `1000` | Packets/sec,当 `SCAN_TYPE` 不是 `auto` 时使用 | | `NAABU_RATE_LOCAL` | `2000` | `auto` 模式用于直连目标时的速率 | | `NAABU_RATE_ROUTED` | `300` | `auto` 模式遇到任何路由时的速率 | | `HOST_SUBNETS` | *(自动检测)* | 直连子网,由 `setup.sh` 写入 | | `NMAP_ARGS` | `-sV -O -Pn -T3` | `-O` 猜测 OS;去掉它可以实现更快、更安静的扫描。添加 `-sC` 使用默认脚本,`-T2` 减速 | | `NUCLEI_SEVERITY` | `info,low,medium,high,critical` | 去掉 `info` 只显示检测结果 | | `NUCLEI_TAGS` | | 例如 `cve,exposure` 以缩小模板集范围 | | `NUCLEI_RATE` | `150` | Requests/sec | | `NUCLEI_UPDATE` | `false` | `true` 在扫描前刷新模板 | | `SKIP_NMAP` / `SKIP_NUCLEI` | `false` | 跳过某个阶段 | `SCAN_TYPE=auto` 会根据设备自身的子网检查每个目标。如果 它们全部为直连,它将以本地速率使用 SYN 扫描,因为 中间没有任何阻碍。如果涉及任何路由,它会降级为 较低速率的 connect 扫描,因为通过状态防火墙的半开连接会填满 其状态表并导致设备被封禁。任何不明确的情况,包括 无法解析的名称,都会被视为路由。 模板已内置到 image 中,因此新设备无需通过 客户端网络拉取即可立即扫描。`docker-compose.yml` 将容器限制为 2 个 CPU 和 2 GB。对于树莓派级别的设备,可以尝试 1 个 CPU 和 512 MB 并设置 `NAABU_RATE=200`。 # 密码 每个设备都有自己的密码,在安装时设置。`./setup.sh --prompt` 可以在 以后更改它。`./setup.sh --password '...'` 无需提示即可设置,适用于配置 脚本,但代价是它会留在你的 shell 历史记录中。 将它们保存在密码管理器中,每个设备一个条目。不要在 不同站点重复使用同一个密码:任何在某个客户端获取到密码的人,随后都可以登录到你部署的 所有其他设备。 # 部署到客户端站点 完整的操作手册,包括 Debian 安装:**[DEPLOY.md](DEPLOY.md)**。 在出发前确认书面授权和范围,首次连接时验证 证书指纹,并在设备离开或 重用之前清除结果。`output/` 包含该客户端完整的漏洞图谱。 ``` docker compose down && rm -rf output/scan-* certs/ ``` `output/` 和真实目标列表已被 gitignored,因此客户端数据不会 进入代码库。仅扫描你已获得书面授权进行测试的主机。
标签:Cutter, Docker, 加密, 安全防御评估, 插件系统, 漏洞扫描器, 版权保护, 请求拦截