高效虚拟主机发现的工具和技术
在进行外部渗透测试或漏洞赏金狩猎时,我们从各个角度探索目标系统,收集尽可能多的信息来识别潜在的攻击向量。这涉及识别所有可用的资产、域和子域。
在这个过程中,我们关注的事情之一就是枚举虚拟主机。通过这样做,我们可以发现可能配置错误或容易受到攻击的隐藏或未记录边缘的资产。例如,我们可能会发现无需身份验证即可访问虚拟主机,这可能会导致敏感数据受到未经授权的访问。
在本文中,我们将讨论枚举虚拟主机并从中收集信息的不同方法。我们将使用HTB Academy 练习来演示枚举步骤。
虚拟主机概述
虚拟主机是一项功能,允许单个 Web 服务器托管多个网站,并使它们看起来就像托管在单独的服务器上一样。这样做通常是为了减少资源开销和运行成本。
虚拟主机类型
虚拟主机有两种类型:基于 IP 的和基于名称的。
- 基于IP的托管
这种类型的托管涉及配置 Web 服务器以在单个服务器上托管多个网站。每个托管站点都与一个唯一的 IP 地址关联,该地址可以是专用的,也可以是共享的,具体取决于托管配置。
当用户尝试访问网站时,服务器会侦听请求,将传入的主机名解析为其相应的 IP 地址,然后根据该 IP 地址将请求路由到适当的网站。
一旦服务器根据该 IP 地址识别出目标网站,它就会向用户提供与该网站相关的内容。
- 基于Host的托管
这种类型的托管涉及配置 Web 服务器以使用不同的域名在单个 IP 地址上托管多个网站。每个托管网站通常与唯一的主机名关联,但多个主机名可以与单个网站相关。
当用户请求访问某个网站时,服务器会检查 HTTP 请求中的“ Host ”标头,以确定用户试图访问哪个网站。根据主机标头中提供的主机名,服务器识别特定网站并向用户提供与该网站关联的内容。
虚拟主机枚举
Ffuf
ffuf 是一个用 Go 编写的工具,可以通过运行sudo apt-get install ffuf
来安装在 Kali Linux 上,也可以从 GitHub :https://github.com/ffuf/ffuf下载。这个工具允许我们定制我们的模糊测试方法。
要开始搜索虚拟主机,我们需要使用-u
标志传递目标的 IP 地址,并使用-H
标志传递相关域名,它引用主机标头。
然后,将单词FUZZ放在域的开头以指示模糊测试位置。
我们可以使用不同的单词列表来标识带有-w
标志的虚拟主机。一种流行的单词列表是 Seclists 单词列表中的name list:https://github.com/danielmiessler/SecLists/blob/master/Discovery/DNS/namelist.txt,而另一种是 Assetnotes 中的Kiterunner:https://wordlists.assetnote.io/单词列表。
ffuf -w namelist.txt -u http://10.129.184.109 -H "HOST: FUZZ.inlanefreight.htb"
模糊测试可以产生大量结果,有时很难识别其有效或无效。过滤结果可以节省您筛选输出的时间。您可以使用-fs
标志以逗号分隔它们来过滤一个响应大小或一系列大小 - 例如-fs 109, 208,
等。
ffuf -w namelist.txt -u http://10.129.184.109 -H "HOST: FUZZ.inlanefreight.htb" -fs 10918
模糊测试完成后,我们将输出保存到文件中。然后,我们可以使用“ grep
”在结果中搜索文本中包含单词“ FUZZ ”的行。下面是使用 grep 查找具有已识别子域的行的示例。
cat vhosts | grep FUZZFUZZ:ap
FUZZ:app
FUZZ:citrix
然后,我们可以使用awk
通过管道传输 grep 输出,以使用 print 命令仅提取已识别的子域,后跟美元符号和列号。整个命令可以写成一行。
cat vhosts | grep FUZZ | awk '{print $3}'
使用简短的 bash 脚本,我们将原始域名附加到已识别的子域中,如图所示。
for i in $(cat vhost1); do echo $i.inlanefreight.htb ; done > vhost1
Gobuster
枚举虚拟主机的另一种方法是使用 Gobuster 工具使用 vhost 选项。该工具可以通过运行sudo apt-get install gobuster
在 Kali 中安装,也可以从 GitHub :https://github.com/OJ/gobuster 下载。
要开始枚举过程,我们首先需要使用-u
标志提供 IP 地址,并使用-w
标志指定一个单词列表。之后,我们定义域名和模糊测试开始的位置。
在 Gobuster 中,我们在称为模式文件的文本文件中定义此信息,该文件通过-p
标志传递。您可以在下面的图中看到模式文件的示例。
{GOBUSTER}.inlanefreight.htb
为了过滤输出,我们使用--exclude-length
标志来筛选响应大小。多个响应大小可以用逗号分隔。
gobuster vhost -u http://10.129.118.153 -w namelist.txt -p pattern --exclude-length 301 -t 10
Curl
我们可以使用 Curl 和一些 bash 脚本实现同样的效果。下面的脚本读取
名称列表
文件的内容(用作我们的单词列表),并为从文件中读取的每个子域打印消息“Found Subdomain”。
cat namelist.txt | while read vhost; do echo "\n========\nFound Subdomain: ${vhost}\n=========";
然后,curl 命令向指定的 IP 地址 (http://10.129.141.252) 发出 HTTP HEAD 请求,并传递 Host 标头中单词列表中的子域。
输出通过管道传输到 grep 以提取响应的Content-length
并将其保存在文件中。
curl -s -I http://10.129.141.252 -H "HOST: ${vhost}.inlanefreight.htb" | grep "Content-Length: "; done > output
为了搜索输出,我们再次使用 grep 命令并过滤包含文本“Content-Length:”
的行。然后,我们使用uniq
命令删除文本文件中的任何重复行,并使用-c
标志来计算每个唯一行出现的次数。
cat output | grep "Content-Length:" | uniq -c
如果我们想从内容中提取子域,我们可以使用-B
标志在匹配之前显示几行。在此命令中,我们使用 4 行来检索子域名。
cat output | grep -B 4 "Content-Length: 103"
后枚举
识别虚拟主机后,我们附加 HTTP 或 HTTPS 以生成 URL 列表。我们可以使用单行 bash 脚本来做到这一点。
for i in $(cat vhost2); do echo "https://"$i; done > vhosts3
然后可以将该列表与 hakcheckurl 或 Eyewitness 等其他工具一起使用来检索 HTTP 响应代码,以检查可用的网页并捕获屏幕截图。
Hakcheckurl
hakcheckurl 是 hakluke 用 Go 编写的工具,可在 GitHub:https://github.com/hakluke/hakcheckurl上获取该工具获取 URL 列表并返回其相应的 HTTP 响应代码。
要运行该工具,必须安装 Go。按照其官方网站上的步骤在 Linux 环境上安装它:https://go.dev/doc/install*](https://go.dev/doc/install。
安装后,克隆 hakcheckurl 存储库,使用go build
构建该工具,并将其重命名为 hakcheckurl。
git clone https://github.com/hakluke/hakcheckurl.git
go build ./main.go
# renmae the tool to hakcheckurl instead of main
mv main hakcheckurl
接下来,我们使用 hakcheckurl 工具确定每个 URL 的 HTTP 响应代码。在下面的结果中,我们注意到使用 HTTPS 协议的 URL 无法访问,而使用 HTTP 协议的 URL 返回了 200 个响应代码。这表明使用 HTTP 的网页已启动并正在运行。
cat vhosts | ./hakcheckurl
Eyewitness
一旦我们确定了要检查的网页,我们就可以使用 Eyewitness 收集有关目标网站相关底层基础设施和技术的更多信息。
Eyewitness 是 RedSiege 创建的一个工具,可以捕获屏幕截图、检索标头信息并识别默认凭据(如果有)。我们可以在 Kali 上安装它 sudo apt-get install eyewitness
或从 GitHub 下载:https://github.com/RedSiege/EyeWitness。
要运行 Eyewitness,我们需要使用-f
标志传递 URL 列表;然后,我们可以使用user-agent
agent 标志为 HTTP 请求设置自定义 User-Agent 字符串。这对于模拟来自不同浏览器或客户端应用程序的请求非常有用。
我们还可以使用--add-http-ports
和--add-https-ports
标志指定其他端口来检查 http 和 https 协议。这指示 Eyewitness 连接到这些端口并捕获屏幕截图(如果适用)。
eyewitness -f vhost2 --user-agent "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36" --add-http-ports 8080,8000,8088 --add-https-ports 8443,4433,4343
运行后,系统会提示我们选择是否打开已创建的报表。如果您选择“Y”,默认 Web 浏览器将打开该报告。如果您选择“N”,报告将保存到您的本地设备。
今天的文章就到此结束了。在整篇文章中,我们发现并探索了各种用于枚举虚拟主机的工具。我们还讨论了如何使用这些工具的结果来扩大攻击面并获得对目标基础设施的宝贵见解。感谢您花时间阅读这篇文章。
免费获取网络安全优质学习资料与干货教程
申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。