一个虚拟主机扫描器,可与 pivot 工具配合使用,可检测 catch-all 场景、别名和动态默认页面。首次在 2017 年 9 月的 SecTalks BNE 上展示(PPT)。
这是 Codingo 原始 VHostScan 的增强版本,包含额外改进、现代化代码库以及更丰富的词表,以实现更好的虚拟主机发现。
dev.%s 会作为 dev.BASE_HOST 运行)git clone https://github.com/codingo/VHostScan.gitcd VHostScandocker build -t vhostscan .然后运行应用程序 docker run --rm -it vhostscan -t
VHostScan 需要 Python 3.8 或更高版本。使用以下命令安装:
$ pip install VHostScan
或者从源码安装:
$ git clone https://github.com/codingo/VHostScan.git
$ cd VHostScan
$ pip install .
用于开发:
$ pip install -e .
之后依赖项将被安装,VHostScan 将被添加到您的路径中。
注意,许多示例引用了 10.10.10.29。此 IP 指的是 BANK.HTB,一个来自 HackTheBox(https://www.hackthebox.eu/)的已退役目标机器。
最简单的示例,对 example.com 使用默认词表,默认端口为 80:
$ VHostScan -t example.com
如果连接需要 SSL,可以使用:
$ VHostScan -t example.com --ssl

假设您有一个 SSH 端口转发,监听在本地 4444 端口,将流量转发到 example.com 开发机器的 80 端口。您可以这样使用,让 VHostScan 通过 localhost:4444 连接,但格式化头部请求,使其适合直接连接 80 端口:
$ VHostScan -t localhost -b example.com -p 4444 -r 80
VHostScan 支持从其他应用程序通过管道传入数据,并将传递给 VHostScan 的信息视为词表数据。例如:
$ cat bank.htb | VHostScan -t 10.10.10.29

您仍然可以在使用 stdin 的同时指定词表。在这种情况下,词表信息将追加到 stdin 中。例如:
$ echo -e 'a.example.com\b.example.com' | VHostScan -t localhost -w ./wordlists/wordlist.txt
这是一个启用模糊逻辑的示例。您可以看到最后一个比较比前两个更相似(它是在比较内容,而不是实际哈希值):
VHostScan 现在包含几个针对不同场景的专用词表。原始词表由 Codingo 基于实际渗透测试经验创建,此增强版本包含了针对现代基础设施的额外专用词表。
关于每个词表的详细信息,请参阅 WORDLISTS.md。
对安全评估使用渗透测试专用词表:
$ VHostScan -t target.com -w ./wordlists/pentest-focused.txt
结合多个词表进行全面扫描:
$ VHostScan -t target.com -w "./wordlists/common-vhosts.txt,./wordlists/cloud-modern.txt"
对现代基础设施使用云专用词表:
$ VHostScan -t example.com -w ./wordlists/cloud-modern.txt --ssl
本项目包含一小批测试。运行测试非常简单:
pip install -r test-requirements.txt
python3 setup.py test
如果您考虑为项目添加新功能,请考虑同时贡献一些测试。经过良好测试的代码库是健康的代码库。:)
此增强版本包括:
VHostScan 最初由 Codingo 创建,并于 2017 年 9 月在 SecTalks BNE 首次展示。此增强版本在此基础上为现代渗透测试和漏洞赏金狩猎带来了额外改进。
| 参数 | 描述 |
|---|
| -h, --help | 显示帮助信息并退出 |
| -t TARGET_HOSTS | 设置目标主机。 |
| -b BASE_HOST | 设置在词表替换中使用的主机(默认为 TARGET)。 |
| -w WORDLISTS | 设置要使用的词表。可以以逗号分隔的格式指定多个词表(例如 -w "./wordlists/simple.txt, ./wordlists/hackthebox.txt",默认为 ./wordlists/virtual-host-scanning.txt)。可用词表:simple.txt、hackthebox.txt、common-vhosts.txt、pentest-focused.txt、cloud-modern.txt、virtual-host-scanning.txt。 |
| -p PORT | 设置要使用的端口(默认 80)。 |
| -r REAL_PORT | Web 服务器的真实端口,当端口不是 80 时在头部中使用(参见 RFC2616 14.23),在通过 ssh/nc 进行 Pivot 时很有用(默认为 PORT)。 |
| --ignore-http-codes IGNORE_HTTP_CODES | 逗号分隔的 HTTP 状态码列表,在虚拟主机扫描中忽略(默认 404)。 |
| --ignore-content-length IGNORE_CONTENT_LENGTH | 忽略指定长度的内容长度。 |
| --prefix PREFIX | 为词表中的每个项目添加前缀,例如添加 dev-<word>、test-<word> 等 |
| --suffix SUFFIX | 为词表中的每个项目添加后缀,例如添加 <word>dev、<word>dev 等 |
| --first-hit | 返回第一个成功结果。仅在确定没有 catch-all 配置的场景中使用(如 CTF)。 |
| --unique-depth UNIQUE_DEPTH | 显示出现 x 次的页面内容的可能匹配(默认为 1)。 |
| --ssl | 若设置,则连接将使用 HTTPS 而非 HTTP。 |
| --fuzzy-logic | 若设置,则将所有唯一内容回复进行比较,并给出每对的相似度比率。这有助于在默认页面不是静态(例如包含时间)的情况下隔离虚拟主机。 |
| --no-lookups | 禁用反向查找(识别新目标并追加到词表,默认开启)。 |
| --rate-limit | 每次扫描之间的延迟时间,单位为秒(默认 0)。 |
| --random-agent | 若设置,则每次扫描将使用预先定义列表中的随机用户代理。 |
| --user-agent | 指定用于扫描的用户代理。 |
| --waf | 若设置,则会发送简单的 WAF 绕过头部。 |
| -oN OUTPUT_NORMAL | 当使用 -oN 选项并指定文件名参数时,将正常输出写入文件。 |
| -oG OUTPUT_GREPABLE | 当使用 -oG 选项并指定文件名参数时,将可 grep 的输出写入文件。 |
| -oJ OUTPUT_JSON | 当使用 -oJ 选项并指定文件名参数时,将 JSON 输出写入文件。 |
| -v VERBOSE | 增加工具的输出以显示进度 |