foldedarrow/Vantage

GitHub: foldedarrow/Vantage

Vantage 是一款仅做侦察、枚举和报告生成的自动化安全评估工具,编排标准 Kali 工具链对授权目标进行扫描并排序漏洞候选线索,但绝不触发任何实际利用行为。

Stars: 0 | Forks: 0

# vantage 针对你拥有或获得明确授权的机器——通过 HTB VPN 访问的 HackTheBox 靶机、Metasploitable 2,以及你自己网络上的其他实验虚拟机——的自动化 **侦察(recon) → 枚举(enumeration) → 漏洞利用识别(exploit-identification) → 报告(report)** 工具。 vantage 是一款 **侦察与枚举工具**。它会对目标进行测绘,枚举发现的每个服务,识别潜在的漏洞利用和已知 CVE——然后生成报告。**它绝不会进行任何利用行为。** 报告中的漏洞利用候选项仅供参考:是进行手动、授权测试的起点。 ## 工作原理一览 vantage 是一个 CLI,它负责编排标准的 Kali 工具链(nmap、gobuster、nikto、searchsploit 等)而不是重新实现它们——它本身仅使用标准库,并会跳过任何缺少工具的步骤。一次运行包含四个阶段: 1. **侦察(Recon)** — 执行 nmap 扫描 + 服务/版本检测,并从 XML 中解析结果。它处理了现实世界中的各种陷阱:当 SYN 扫描返回 `tcpwrapped` 时自动回退到 connect 扫描,针对单台主机添加 `-Pn`(被防火墙保护的靶机不会被误判为“宕机”),并在 lab 配置文件下运行 UDP + NSE 漏洞脚本。 2. **枚举(Enumeration)** — 针对各个服务的处理器并发执行:HTTP(whatweb、目录爆破、快速胜利、vhost/API/Swagger 发现、CMS 扫描器)、SMB 共享、SNMP、FTP 匿名访问,以及对 Redis / Elasticsearch / Docker API / LDAP 的只读未授权检查。 3. **漏洞利用识别(仅报告)** — 将 banner 和 NSE 标记的 CVE 与精选的特征库、版本匹配的 searchsploit 结果、默认凭证和 Web(SQLi/LFI/SSTI)候选项进行匹配。不会触发任何利用行为;这些仅仅是线索。 4. **报告** — Markdown + JSON + NDJSON 事件流,由已排序的 **优先线索** 工作列表(RCE → 未授权访问 → CVE → 默认凭证)领衔。 **分类模型决定了一切。** 每个目标都会被分类为 `htb`、`lab` (RFC1918) 或 `external`,从而选择一种配置文件 —— `gentle`(安静模式,针对 HTB 共享基础设施)、`lab`(高调且彻底,针对你自己的虚拟机),或者是需要 `--allow-external`(并且可选地需要权威的 `--scope-file` 白名单)的默认拒绝 `external`。因此,安全模型的核心在于 **允许你扫描谁**,而不是限制攻击——因为它从不进行攻击。详见[安全模型](#safety-model)。 **其他包含功能:** CIDR 扫描(存活主机发现 → 针对每台主机的完整流程 → 排序索引),`--resume`,全局 `--max-time` 预算,Markdown 报告中的机密信息脱敏,SecLists 自动检测,以及一个可选的只读 **Web 仪表盘** (`webui/`),用于浏览结果。 ## 快速开始 ``` git clone https://github.com/foldedarrow/Vantage.git cd Vantage sudo ./setup.sh # apt/pipx/gem-installs the toolchain (Kali) sudo python3 run.py --check # show the tool + wordlist matrix sudo python3 run.py 192.168.56.101 # recon + enum + report (single host) sudo python3 run.py 192.168.56.0/24 # CIDR sweep: per-host reports + an index ``` `run.py` 是入口点;一切都在 Kali 上运行,且要求标准渗透测试工具在 `PATH` 中。**nmap 是唯一的硬性要求** —— 任何其他缺失的工具都会在启动时被检测到,并跳过相应的步骤。 **使用 Ubuntu?** vantage 的 Python 代码是与发行版无关的,但 Ubuntu 的软件库中缺少约一半的工具链。请使用 `sudo ./setup-ubuntu.sh` 替代 `setup.sh` —— 它会跨 apt/Go/pipx/gem/git 安装各种工具,并强制将所有二进制文件放入 `/usr/local/bin`(这样 `sudo python3 run.py` 就能找到它们)。`sudo SKIP_SECLISTS=1 ./setup-ubuntu.sh` 会跳过庞大的 SecLists 克隆。然后运行 `sudo python3 run.py --check` 以确认工具矩阵。 报告会以 **优先线索** 部分开篇 —— 这是一个经过排序的“优先尝试这些”工作列表(已知 RCE → 未授权/匿名访问 → 已知 CVE → 默认凭证),这些内容提炼自每个阶段。 **CIDR 扫描。** 给它一个范围 (`10.10.0.0/24`),vantage 会进行 Ping 扫描寻找存活主机,对每个主机运行完整流程,并生成 `index_.md` 链接每个主机的报告(按候选数量排序)。 **范围白名单。** 对于真实的授权测试,请将 `--scope-file scope.txt`(或 `$VANTAGE_SCOPE` / `~/.config/vantage/scope.txt`)指向一个授权的 CIDR/IP/主机名列表。设置后,它是 **权威的**:任何不在列表中的目标都会被拒绝,无论其他标志如何设置 —— 这样可以防止扫描拼写错误或超出范围的目标。 ## 安全模型 vantage 不会触发漏洞利用、暴力破解凭证、运行 sqlmap/LFI 探测或测试默认凭证。这些功能都已被移除。剩下的只有主动 *侦察*,以及它生成的报告 —— 因此安全模型的核心在于 **允许你扫描谁**,而不是限制攻击。 **目标分类决定了一切。** 目标被分类为 `lab` (RFC1918)、`htb` (HackTheBox 网段) 或 `external`(其他任何地址 —— 公网/未知 IP): - **`external` 目标默认被拒绝。** 侦察/枚举会发送真实的扫描流量,因此除非你传入 `--allow-external` 声明拥有书面授权,否则 vantage 不会触碰公网/未知 IP。在 `--profile auto` 模式下,它会 **提示** 你选择谨慎的 *gentle* 配置文件还是高调的 *lab* 配置文件;传入 `--profile lab` 可直接启用高调配置文件。 - **HackTheBox 受到特殊对待。** HTB 网段(`10.10.0.0/16`,包括 lab/release 竞技场和你的 tun0 分配地址,以及 `10.129.0.0/16`)会被自动强制使用 **gentle** 配置文件:top-1000 端口,`-T2`,不运行 nikto,不进行主动 Web 阶段,并且忽略 `--aggressive`。你可以在 `~/.config/vantage/networks.json` (`{"htb": [...], "lab": [...]}`) 中添加自定义网段(Pro Labs、家庭实验室)。 - **在 HTB 网段内拥有自己的靶机?** 位于 `10.10.10.104` 的本地 Metasploitable 否则会被错误分类为 `htb` 并被强制执行 gentle 模式。将该网段声明为 lab,它就会被分类为 `lab`(完整枚举,支持 `--aggressive`)—— 操作者的 lab 声明优先于内置的 HTB 网段: - 一次性指定:`--lab-net 10.10.10.0/24`(可重复使用) - 永久指定:`~/.config/vantage/networks.json` → `{"lab": ["10.10.10.0/24"]}` - vantage 拒绝将 **你自己的 VPN 客户端 IP**(tun0 分配网段)作为扫描目标。 - Markdown 报告会 **隐去明显的机密信息**(密码、私钥、AWS 密钥);原始的、未脱敏的数据会保留在 gitignored JSON/loot 中。 `--aggressive`(仅限 lab 目标)不会启用任何攻击 —— 它只是将枚举调至最高调、最彻底的设置(完整 TCP,nikto,NSE 漏洞脚本,主动 Web 爬虫)。随时运行 `python3 run.py --check` 可查看已安装的工具以及缺失工具的具体安装命令。 ## 功能详情(阶段) 1. **侦察** — nmap TCP 扫描(lab 模式下使用 `-p-`,gentle 模式下使用 top-1000),可选的 **UDP top-50 扫描** (SNMP/DNS/TFTP),以及 **NSE 漏洞脚本** (`--script vuln,smb-vuln-*,ssl-enum-ciphers`),在报告中按端口分组。 - **Connect-scan 回退:** 如果 SYN 扫描返回的所有结果都是 `tcpwrapped`(当虚拟机监控程序的 NAT/虚拟网卡破坏了半开连接时常见),vantage 会自动使用 TCP connect 扫描 (`-sT -sV`) 重新扫描开放端口,并保留更丰富的结果。你也可以从一开始就通过 `--connect` / `-sT` 强制指定。 2. **枚举**(按服务,**并发** 运行): - HTTP:whatweb 指纹识别 → CMS 检测 → `wpscan`/`droopescan`,快速胜利文件(`robots.txt`、`.git/`、备份文件、`.env`),nikto,gobuster/feroxbuster,**vhost 发现** (ffuf),以及 **参数化 URL 发现**(爬虫 + arjun)。发现的 URL 被限定在目标主机的范围内 —— 绝不会触碰目标范围外的链接。 - SMB:enum4linux + 空会话 **共享列表及逐个共享的 `ls`**。 - TLS:使用 `sslscan` 检测 Heartbleed/弱加密算法/过期证书标志。 - SNMP:使用发现的 community string 运行 `onesixtyone` + `snmpwalk`。 3. **漏洞利用识别(仅报告)** — 精选的服务特征库,**已知默认凭证对**(仅做标记,绝不尝试),Web 发现候选项,以及通过 `searchsploit --json` 进行的 **版本匹配的 Exploit-DB 关联**。NSE 标记的 CVE 会与精选的漏洞利用 **桥接**,因此即使服务 banner 为空,已知的漏洞仍会被列出。这里的一切都是信息性的 —— vantage 不会触发任何利用行为。 4. **报告** — Markdown + JSON。漏洞利用候选项会被明确标记为 *未运行*,旨在作为手动跟进的线索。还会写入一个增量的 `events_.ndjson` 事件日志,供自动化/重新分析使用。 ## 隐蔽 / 规避(授权的检测能力测试) `--stealth` 会运行一次 **低调缓慢、低特征** 的侦察 —— 适用于 **授权的** 工作,其目标是衡量你自己的检测能力(SOC/IDS/WAF 能否看到扫描?),而不是真的向你无权测试的防御者隐藏。它 **不会** 放宽授权门槛:`external` 目标仍然需要 `--allow-external`。 它带来的改变: - **nmap:** `-T1` 时序,**分片数据包** (`-f`),严格的 **`--max-rate`** 上限(默认 50 pps),**`--scan-delay`**(默认 250ms),`--max-retries 1`,`--randomize-hosts`,仅扫描 top 端口(数据包更少),并且 **不使用 `-O`/`-sC`**(两者都会增加探测)。在 CIDR 扫描时会保留主机发现功能,从而剔除死机的主机。 - **关闭高调工具:** 不运行 nikto,不进行目录爆破,不使用 NSE `--script vuln`,不进行主动 Web 爬虫 —— 这些会瞬间触发 IDS/WAF。 - **请求层:** Web 请求使用浏览器的 **User-Agent**,而不是明显的 `curl/8.x` / `WhatWeb` 特征;枚举过程被序列化(顺序执行)。 可选旋钮(需要 root 权限 / 原始数据包,`sudo` 调用已经具备): ``` sudo python3 run.py 10.0.0.5 --stealth \ --source-port 53 \ # appear to come from DNS to slip naive ACLs --decoys RND:5 \ # hide the real source among 5 decoys (or ip1,ip2,ME) --scan-delay 1s --max-rate 20 # even slower # --no-fragment 如果 NIC/hypervisor 破坏了分片数据包 ``` ### `--evade` — 针对授权外部测试的 WAF / 防火墙绕过 如果说 `--stealth` 是将 *整个运行过程* 降至低调缓慢,那么 `--evade` 则是 **将边界规避能力叠加到你正在运行的任何配置文件上**,从而确保只读的侦察/枚举能够真正访问到 WAF/IDS 背后的应用程序,而不是 WAF 的默认拦截页面。它保持正常的执行速度(你依然可以按时完成测试),并且 —— 就像 vantage 中的所有功能一样 —— **不触发任何利用行为**。它不会放宽授权门槛:`external` 目标仍然需要 `--allow-external`。 它带来的改变: - **边界指纹识别:** 识别每个 Web 服务前端的 WAF/CDN —— 如果安装了 `wafw00f` 则使用它,否则使用被动的响应头特征(Cloudflare、Akamai、Imperva、Sucuri、F5 BIG-IP、AWS 等)。结果会展示在 **边界 / WAF** 报告部分,并提醒每个 Web 发现都是 *W 过滤后的视图*。默认开启;使用 `--no-waf-detect` 禁用。 - **融入背景的 HTTP:** 每个 Web 工具(curl、whatweb、ffuf、gobuster、feroxbuster、nikto、wpscan)都会获得一个 **轮换的真实浏览器 User-Agent + 完整的浏览器请求头集合**,而不是单一的 `curl/8.x` 特征,此外还有 **随机化的请求抖动**,因此其节奏看起来不像是由扫描器发出的。 - **nmap 数据包层:** 数据包分片(`-f` / `--mtu`),`--data-length` 填充以对抗固定长度的特征检测,以及现有的 `--source-port` / `--decoys` / `--spoof-mac` 旋钮。 - **源站信任绕过请求头:** 一旦检测到 WAF(或者通过指定 `--waf-bypass-headers`),探测将携带 `X-Forwarded-For: 127.0.0.1`、`X-Real-IP` 等,以测试前端是否信任伪造的可信客户端 —— 这是授权测试中合法的边界测试行为。 - **CDN 源站线索:** 当 WAF 是 CDN 前端(Cloudflare/Akamai 等)时,报告会指出寻找源站 IP(历史 DNS、证书 SAN)并直接访问通常能绕过 WAF —— 这是一个仅供参考的线索,供后续手动跟进。 ``` # 授权的外部测试,整个 enum 通过 Tor 路由,WAF-aware: sudo python3 run.py app.client.example --allow-external --evade \ --proxy socks5h://127.0.0.1:9050 \ # or a rotating egress so it's not one blockable IP --http-jitter 0.5-2s \ # randomised delay between HTTP requests --waf-bypass-headers \ # test X-Forwarded-For/X-Real-IP origin-trust bypass --data-length 24 --mtu 16 # nmap packet-signature evasion ``` ## 云侦察(未授权的配置错误发现) vantage 可以枚举目标的 **公开暴露的** 云存储 —— 即上述主机侦察在云端的对等物。它仅探测云服务提供商已经允许匿名请求访问的资源,绝不触碰私有资源、凭证或 IAM。 ``` # 针对关键字的公开 S3 buckets(仅限云端运行): python3 run.py acme --cloud --allow-cloud --cloud-name acme # 从一个 domain 出发,AWS + Azure,同时进行 host scan: python3 run.py 10.10.11.42 --cloud --allow-cloud \ --cloud-name acme.com --cloud-providers aws,azure ``` - **AWS S3** — 是否存在 / 是否可匿名 **列举** / **读取**。如果安装了相关工具,则使用 `aws s3 --no-sign-request`,并提供匿名 HTTP 的回退机制。 - **Azure Blob** — 存储账号是否存在 + 匿名 **容器列举**。 - **需要 `--allow-cloud`**(其专属授权门槛),**只读**,有限度(候选项上限,默认为 200)且有频率限制。它 **不会** 进行经过授权的云端测试 —— 这是一个有意设定的非目标。 ## 环境要求 Python 3.9+ 以及 `PATH` 中包含的标准渗透测试 CLI 工具(建议在 Kali 中运行)。`setup.sh` 会安装工具链;`--check` 会显示当前已安装的内容。如果可用,将使用以下工具: `nmap, gobuster, feroxbuster, nikto, whatweb, ffuf, arjun, searchsploit, enum4linux, smbclient, sslscan, onesixtyone, snmpwalk, wpscan, droopescan, curl` (外加可选的云端辅助工具 `aws, s3scanner, cloud_enum`)。不需要非标准库的 Python 包。 ## 用法 ``` # Recon + enum + report(唯一模式): python3 run.py 192.168.56.101 # 在已拥有的实验室 VM 上放开手脚(最全面、最大动静的 enumeration): python3 run.py 192.168.56.101 --aggressive # 一个 HackTheBox box(自动强制设为 gentle;检测 .htb hostname): python3 run.py 10.10.11.42 --add-hosts # 强制 connect scan(如果 SYN scans 返回 tcpwrapped): python3 run.py 192.168.56.101 --connect # 恢复之前的运行,并限制总 wall-clock time: python3 run.py 192.168.56.101 --resume --max-time 1200 # 自定义 wordlists / 非标准 SecLists 安装: python3 run.py 10.0.0.5 \ --wordlist-dirs /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \ --seclists-dir /opt/SecLists ``` ### 参数参考 **强度:** `--aggressive`(最高调、最彻底的枚举 —— 仅限 lab),`--no-default-creds`(跳过在报告中标记已知默认凭证对)。 **范围 / 配置文件:** `--profile auto|lab|gentle`,`--lab-net CIDR`(声明你自己的 lab 范围,可重复使用 —— 覆盖内置的 HTB 分类),`--allow-external`(授权扫描公网 IP —— 在 `auto` 模式下会提示选择配置文件),`--yes`(跳过授权提示,仅限 lab/HTB)。 **扫描:** `--connect` / `-sT`(强制使用 TCP connect 扫描),`--no-udp`,`--no-nse-vuln`,`--max-time `(全局实际执行时间预算),`-j N`(并发度),`--resume`(重用缓存的侦察 + 枚举结果)。 **目标定位:** `--hostname box.htb`,`--add-hosts`。 **字典:** `--seclists-dir`,`--wordlist-dirs`,`--wordlist-users`,`--wordlist-pass`(如果省略,全部从 SecLists/rockyou 自动解析)。 **云端:** `--cloud`,`--allow-cloud`,`--cloud-name `,`--cloud-providers aws,azure`,`--cloud-extra-words`,`--cloud-cap N`。 **输出 / 杂项:** `-o `(默认为 `loot/`),`--check` / `--doctor`,`--version`。 ### 字典与 SecLists vantage 会在所有有帮助的地方使用 [SecLists](https://github.com/danielmiessler/SecLists) —— 目录/文件暴力破解、vhost 发现和参数发现优先使用 SecLists,如果不存在,则回退到较小的系统内置字典(dirb、rockyou、metasploit)。它会自动查找 SecLists(`/usr/share/seclists`、`/usr/share/SecLists`、`/opt`、`~/`);可以通过 `--seclists-dir PATH` 或 `$VANTAGE_SECLISTS` 覆盖。运行 `vantage --check` 可查看解析到的根目录以及每个用途映射到的具体列表。 ## 输出 每个目标在输出根目录(默认为 `loot/`)下都会有 **自己独立的文件夹**,因此多次运行的结果不会堆积在一起 —— 单个主机为 `loot//`,CIDR 扫描中的每个存活主机为 `loot///`(扫描索引位于 `loot//`): ``` loot/ 10.10.10.5/ # single host report_10.10.10.5.md report_10.10.10.5.json events_10.10.10.5.ndjson nmap_10.10.10.5.xml state_10.10.10.5.json # --resume cache 10.10.10.0_24/ # CIDR sweep index_10.10.10.0_24.md # links each host report 10.10.10.5/report_10.10.10.5.md 10.10.10.8/report_10.10.10.8.md ``` 每个主机包含: - `report_.md` — 可读的报告(服务、NSE 发现、枚举结果和信息性的漏洞利用候选项),机密信息已脱敏。 - `report_.json` — 同样的数据,机器可读格式,未脱敏。 - `events_.ndjson` — 增量事件日志(阶段/发现事件)。 - `state_.json` — 缓存的侦察 + 枚举结果,用于 `--resume`。 - `nmap_*.xml` / `.txt` — 原始扫描结果。 ## 布局 ``` vantage/ run.py # entry point setup.sh # toolchain installer (Kali) vantage/ cli.py # arg parsing, authorization gate, phase orchestration config.py # profiles, target classification, tool detection util.py # logging, safe command runner, time budget wordlists.py # SecLists resolver + per-purpose getters modules/ recon.py # nmap wrapper, XML parsing, connect-scan fallback, NSE enumerate.py # per-service enumeration (http/ftp/smb/snmp/tls/...) exploit.py # exploit identification (report-only — fires nothing) cloud.py # unauthenticated S3/Azure misconfig recon report.py # md + json reporting (with redaction) tests/ # stdlib unittest suite (no third-party deps) ``` ## 测试 ``` python3 -m unittest discover -s tests ``` 使用纯标准库的 `unittest`,无外部依赖。覆盖了目标分类、范围授权校验、扫描/连接回退检测、NSE 分组 + CVE 桥接、候选项去重、信息脱敏、时间预算以及云模块。 ## 扩展 在 `modules/enumerate.py` 中添加服务处理器(在 `enumerate_host` 中根据端口/名称进行分发),并在 `modules/exploit.py` 中添加漏洞特征库(`_signature_candidates`,或者 `_CVE_SIGNATURES` / `_EDB_MSF_PROMOTIONS` 映射表)。每个部分都是隔离的,因此添加新的服务或漏洞特征只需要添加一个函数或条目。
标签:Nmap, Python, 安全报告, 密码管理, 插件系统, 无后门, 自动化侦察, 虚拟驱动器, 逆向工具