引言
在本实验中,你将学习如何使用 Gobuster 执行基本的虚拟主机 (vhost) 扫描。虚拟主机是 Web 服务器在单个 IP 地址上托管多个网站的常用方式。在渗透测试或安全评估过程中,发现这些隐藏的虚拟主机可以揭示额外的攻击面或敏感信息。Gobuster 是一个强大的工具,用于暴力破解 URI、DNS 子域和虚拟主机名。
理解虚拟主机 (VHosts)
在本步骤中,你将了解虚拟主机 (vhosts) 以及它们在 Web 安全中的重要性。
虚拟主机允许单个服务器在同一 IP 地址上托管多个域名。例如,www.example.com 和 blog.example.com 都可以托管在同一台服务器上,通过 HTTP 请求中的 Host 头部进行区分。当 Web 浏览器向服务器发送请求时,它会包含一个 Host 头部,指定它想要访问的域名。Web 服务器随后使用此头部来确定要提供哪个网站。
发现这些虚拟主机对于安全评估至关重要,因为:
- 隐藏内容: 一个虚拟主机可能托管一个旧的、未打补丁的应用程序、一个网站的开发版本,或者一个未从主网站链接的管理界面。
- 扩展攻击面: 每个发现的虚拟主机都代表了一个潜在的新攻击入口点,例如 SQL 注入、跨站脚本 (XSS) 或目录遍历。
- 信息泄露: 有时,虚拟主机可以揭示内部网络结构、敏感文件或配置错误。
像 Gobuster 这样的工具可以自动化尝试针对目标使用常见虚拟主机名以识别活动虚拟主机的过程。
选择目标 IP 地址或域名
在本步骤中,你将确定 Gobuster vhost 扫描的目标。
在本实验中,我们将使用 localhost 作为目标,具体为 http://127.0.0.1:8080。我们已在 8080 端口上设置了一个简单的 Web 服务器,该服务器模拟了多个虚拟主机。在实际场景中,你应将 127.0.0.1:8080 替换为目标的实际 IP 地址或域名。
为了确认 Web 服务器正在运行,你可以使用 curl 向其发送请求。
curl http://127.0.0.1:8080
你应该会看到类似以下的输出,表明服务器已激活:
This is vhost1 content.
此输出来自默认虚拟主机(或简单的 Python 服务器提供的第一个虚拟主机)。我们的目标是找到其他“隐藏”的虚拟主机。
构建基础的 gobuster vhost 命令
在本步骤中,你将学习如何构建用于 vhost 扫描的基础 gobuster 命令。
用于 vhost 扫描的 gobuster 命令使用 vhost 模式。vhost 扫描的关键标志是:
-u:指定目标 URL。-w:指定用于暴力破解虚拟主机名称的单词列表 (wordlist)。
基本语法将是 gobuster vhost -u <target_url> -w <wordlist_path>。
对于我们的实验,目标 URL 是 http://127.0.0.1:8080。我们还准备了一个单词列表,位于 /tmp/vhost_wordlist.txt,其中包含潜在的虚拟主机名称。
让我们检查一下单词列表的内容:
cat /tmp/vhost_wordlist.txt
你应该会看到以下输出:
vhost1
vhost2
hidden_vhost
test
dev
admin
此单词列表包含了一些我们期望找到的常见和特定的虚拟主机名称。
使用 -u 和 -w 标志执行扫描
在本步骤中,你将使用目标 URL 和提供的单词列表执行 gobuster vhost 扫描。
现在,将目标 URL 和单词列表路径组合到 gobuster 命令中。
gobuster vhost -u http://127.0.0.1:8080 -w /tmp/vhost_wordlist.txt
按 Enter 键运行命令。Gobuster 将开始遍历单词列表,发送带有每个单词作为 Host 头的请求,并报告任何已发现的虚拟主机。
输出将显示进度和任何成功的发现。它可能看起来像这样:
===============================================================
Gobuster v3.6
by OJ (https://github.com/OJ/gobuster)
===============================================================
[+] Url: http://127.0.0.1:8080
[+] Wordlist: /tmp/vhost_wordlist.txt
[+] Threads: 10
[+] Timeout: 10s
[+] User Agent: gobuster/3.6
===============================================================
2024/07/30 10:00:00 Starting gobuster in vhost mode
===============================================================
Found: vhost1 (Status: 200) [Size: 20]
Found: vhost2 (Status: 200) [Size: 20]
Found: hidden_vhost (Status: 200) [Size: 27]
===============================================================
2024/07/30 10:00:05 Finished
===============================================================
你可以看到 gobuster 成功找到了 vhost1、vhost2 和 hidden_vhost。
查看已发现虚拟主机的输出
在本步骤中,你将分析 gobuster 扫描的输出,以了解已发现的虚拟主机。
gobuster 的输出为每个已发现的虚拟主机提供了关键信息:
- **
Found:**:成功解析的虚拟主机名称。 - **
(Status: 200)**:服务器返回的 HTTP 状态码。200 OK通常表示虚拟主机存在并成功提供了内容。其他状态码(例如301、302、403、404)也可能相关,具体取决于服务器的配置。 - **
[Size: XX]**:响应体的大小(以字节为单位)。这有时有助于区分不同类型的内容或默认页面。
从上一步的输出中,你应该看到了:
Found: vhost1 (Status: 200) [Size: 20]Found: vhost2 (Status: 200) [Size: 20]Found: hidden_vhost (Status: 200) [Size: 27]
这些条目表明 gobuster 使用提供的单词列表在 http://127.0.0.1:8080 上成功识别了三个虚拟主机。在实际场景中,你随后会通过访问它们(例如 curl -H "Host: vhost1" http://127.0.0.1:8080)或使用其他 Web 安全工具来进一步调查这些已发现的虚拟主机。
至此,基础的 vhost 扫描实验结束。你已成功使用 gobuster 来识别虚拟主机。
总结
在本实验中,你学习了如何使用 Gobuster 执行基础的虚拟主机扫描。你理解了虚拟主机的概念,选择了目标,构建了带有 -u (URL) 和 -w (单词列表) 标志的 gobuster 命令,执行了扫描,并解读了结果。这项技能对于在安全评估中发现隐藏的 Web 应用程序和扩展攻击面至关重要。
