引言
在本实验中,你将学习一种强大的目标发现技术,该技术结合了 Nmap 和 Gobuster 的能力。Nmap 是一个多功能的网络扫描器,用于发现计算机网络上的主机和服务;Gobuster 则是一个用于暴力破解 URI(目录和文件)以及 DNS 子域名的工具。通过集成这两个工具,你可以自动化识别给定网络范围内潜在 Web 服务器的过程,然后系统地发现这些服务器上隐藏的目录和文件。这种方法显著增强了你的侦察能力,使发现过程更高效、更全面。
使用 Nmap 扫描网络范围内的开放 Web 端口(80, 443)
在此步骤中,你将使用 Nmap 扫描本地网络范围,查找开放了常见 Web 端口(80 用于 HTTP,443 用于 HTTPS)的主机。这是识别潜在 Web 服务器的初始阶段。我们将扫描 172.17.0.0/24 网络范围,该范围通常由 Docker 用于其内部网络。
首先,让我们确保 Nmap 已安装。它应该已预装在 LabEx VM 上。
nmap --version
你应该会看到类似以下的输出,表明 Nmap 已安装:
Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f libpcre-8.39 libpcap-1.9.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select
现在,执行 Nmap 扫描。我们将使用 -p 标志指定端口 80 和 443,并使用 -oG 以 Grepable 格式输出结果,这种格式更易于解析。
nmap -p 80,443 -oG nmap_web_scan.txt 172.17.0.0/24
此命令将扫描指定的网络范围,查找开放了端口 80 或 443 的主机,并将输出保存到 nmap_web_scan.txt。扫描可能需要几分钟才能完成。
扫描完成后,你可以查看输出文件的内容:
cat nmap_web_scan.txt
你将看到指示已发现主机及其开放端口的行。例如:
## Nmap 7.80 scan initiated Mon Jan 1 00:00:00 2024 as: nmap -p 80,443 -oG nmap_web_scan.txt 172.17.0.0/24
Host: 172.17.0.2 () Ports: 80/open/tcp//http///, 443/open/tcp//https///
Host: 172.17.0.3 () Ports: 80/open/tcp//http///
## Nmap done at Mon Jan 1 00:00:00 2024 -- 256 IP addresses (2 hosts up) scanned in 5.00 seconds
解析 Nmap 输出以创建 Web 服务器 URL 列表
在此步骤中,你将解析 nmap_web_scan.txt 文件,提取具有开放 Web 端口的主机的 IP 地址,并将它们格式化为 URL 列表。此列表随后将用作 Gobuster 的输入。
我们将使用 grep 和 awk 来处理 nmap_web_scan.txt 文件。目标是提取包含“open”端口 80 或 443 的行,然后提取 IP 地址,最后构建 URL(例如 http://172.17.0.2 或 https://172.17.0.2)。
执行以下命令来解析 Nmap 输出并创建 web_servers.txt:
grep "open" nmap_web_scan.txt | awk '/80\/open/ {print "http://" $2} /443\/open/ {print "https://" $2}' | sort -u > web_servers.txt
让我们分解一下这个命令:
grep "open" nmap_web_scan.txt: 从nmap_web_scan.txt中过滤包含单词“open”的行,这表示一个开放的端口。awk '/80\/open/ {print "http://" $2} /443\/open/ {print "https://" $2}': 处理过滤后的行。/80\/open/ {print "http://" $2}: 如果一行包含“80/open”,则打印“http://”后跟第二个字段($2),即 IP 地址。/443\/open/ {print "https://" $2}: 如果一行包含“443/open”,则打印“https://”后跟第二个字段($2),即 IP 地址。- 注意:一个主机可能同时开放 80 和 443 端口,这将为同一个 IP 生成两个 URL。
sort -u: 对 URL 进行排序并删除任何重复的条目。> web_servers.txt: 将最终输出重定向到一个名为web_servers.txt的新文件中。
现在,查看 web_servers.txt 文件的内容:
cat web_servers.txt
你应该会看到一个 URL 列表,每行一个,类似如下:
http://172.17.0.2
https://172.17.0.2
http://172.17.0.3
此文件现在包含了我们 Gobuster 扫描的目标。
编写一个简单的 Bash 脚本来循环遍历 URL 列表
在此步骤中,你将创建一个 Bash 脚本,该脚本将读取 web_servers.txt 中的每个 URL,并为 Gobuster 扫描做准备。此脚本将作为我们结合 Nmap 和 Gobuster 工作流的自动化骨干。
首先,让我们使用 nano 创建一个名为 gobust_scan.sh 的新脚本文件:
nano gobust_scan.sh
将以下内容粘贴到 gobust_scan.sh 文件中:
#!/bin/bash
## 定义 Gobuster 的单词列表
WORDLIST="/usr/share/wordlists/dirb/common.txt" ## 用于目录暴力破解的常用单词列表
## 检查单词列表是否存在
if [ ! -f "$WORDLIST" ]; then
echo "Error: Wordlist not found at $WORDLIST. Please ensure it exists."
echo "You might need to install 'dirb' or 'wordlists' package, e.g., sudo apt install dirb"
exit 1
fi
## 检查 web_servers.txt 是否存在
if [ ! -f "web_servers.txt" ]; then
echo "Error: web_servers.txt not found. Please run Step 2 first."
exit 1
fi
echo "Starting Gobuster scans..."
echo "-------------------------"
## 循环遍历 web_servers.txt 中的每个 URL
while IFS= read -r url; do
echo "Scanning $url..."
## Gobuster 命令的占位符 - 将在下一步添加
## gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
echo "Finished scanning $url."
echo "-------------------------"
done < web_servers.txt
echo "All scans completed."
通过按 Ctrl+X,然后按 Y 确认,最后按 Enter 以当前文件名保存,来保存文件。
接下来,使脚本可执行:
chmod +x gobust_scan.sh
现在,让我们测试脚本以确保它能正确地循环遍历 URL。它还不会运行 Gobuster,但会为每个 URL 打印消息。
./gobust_scan.sh
你应该会看到类似以下的输出,表明脚本正在正确读取和处理每个 URL:
Starting Gobuster scans...
-------------------------
Scanning http://172.17.0.2...
Finished scanning http://172.17.0.2.
-------------------------
Scanning https://172.17.0.2...
Finished scanning https://172.17.0.2.
-------------------------
Scanning http://172.17.0.3...
Finished scanning http://172.17.0.3.
-------------------------
All scans completed.
这证实了我们的脚本已准备好集成 Gobuster 命令。
在脚本中为每个发现的目标调用 Gobuster
在此步骤中,你将修改 gobust_scan.sh 脚本以集成 Gobuster 命令。对于 Nmap 发现的每个 URL,Gobuster 将尝试使用常用的单词列表查找隐藏的目录和文件。
首先,让我们确保 Gobuster 已安装。它应该已预装在 LabEx VM 上。
gobuster --version
你应该会看到类似以下的输出:
gobuster v3.1.0
现在,再次打开 gobust_scan.sh 脚本进行编辑:
nano gobust_scan.sh
找到占位符行:
## gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
取消注释此行,并确保其外观与此完全一致:
#!/bin/bash
## 定义 Gobuster 的单词列表
WORDLIST="/usr/share/wordlists/dirb/common.txt" ## 用于目录暴力破解的常用单词列表
## 检查单词列表是否存在
if [ ! -f "$WORDLIST" ]; then
echo "Error: Wordlist not found at $WORDLIST. Please ensure it exists."
echo "You might need to install 'dirb' or 'wordlists' package, e.g., sudo apt install dirb"
exit 1
fi
## 检查 web_servers.txt 是否存在
if [ ! -f "web_servers.txt" ]; then
echo "Error: web_servers.txt not found. Please run Step 2 first."
exit 1
fi
echo "Starting Gobuster scans..."
echo "-------------------------"
## 循环遍历 web_servers.txt 中的每个 URL
while IFS= read -r url; do
echo "Scanning $url..."
## Gobuster 命令
gobuster dir -u "$url" -w "$WORDLIST" -o "gobuster_$(echo $url | sed -e 's/http:\/\///g' -e 's/https:\/\///g' -e 's/\//_/g').txt"
echo "Finished scanning $url."
echo "-------------------------"
done < web_servers.txt
echo "All scans completed."
保存修改后的脚本(Ctrl+X,Y,Enter)。
现在,执行脚本。这将为每个 URL 运行 Gobuster,并将结果保存到单独的文件中。
./gobust_scan.sh
脚本现在将为每个 URL 执行 Gobuster。你将在终端中直接看到 Gobuster 的输出,它还会将结果保存到名为 gobuster_172.17.0.2.txt、gobuster_172.17.0.2_443.txt 等的文件中(具体文件名取决于 URL)。
脚本完成后,你可以列出生成的 Gobuster 输出文件:
ls gobuster_*.txt
你应该会看到类似以下的文件:
gobuster_172.17.0.2.txt gobuster_172.17.0.2_443.txt gobuster_172.17.0.3.txt
整合所有目标的 Gobuster 结果
在最后一步中,你将把所有单独的 Gobuster 输出文件整合到一个全面的报告中。这样可以更轻松地查看所有扫描的 Web 服务器上发现的所有目录和文件。
我们将使用 cat 命令将所有匹配 gobuster_*.txt 的文件合并到一个名为 all_gobuster_results.txt 的文件中。
cat gobuster_*.txt > all_gobuster_results.txt
此命令将获取所有以 gobuster_ 开头并以 .txt 结尾的文件内容,并将它们合并到 all_gobuster_results.txt 中。
现在,你可以查看整合后的结果:
cat all_gobuster_results.txt
你将看到 Gobuster 在扫描的 Web 服务器上找到的所有目录和文件的合并输出。输出将根据 Web 服务器的内容而有所不同,但可能看起来像这样:
===============================================================
Gobuster v3.1.0
...
[+] Found: /index.html (Status: 200)
[+] Found: /css (Status: 301)
[+] Found: /js (Status: 301)
...
===============================================================
Gobuster v3.1.0
...
[+] Found: /admin (Status: 301)
[+] Found: /login.php (Status: 200)
...
此整合文件为所有发现的 Web 资产提供了一个单一的参考点,从而完成了你的自动化目标发现过程。
总结
在此次实验中,你成功地结合了 Nmap 和 Gobuster 来自动化 Web 服务器和目录发现过程。你首先使用 Nmap 扫描网络范围内的开放 Web 端口,然后解析其输出以创建目标 URL 列表。接下来,你开发了一个 Bash 脚本来遍历这些 URL,为每个 URL 调用 Gobuster 以查找隐藏的目录和文件。最后,你将所有 Gobuster 结果整合到一个报告中,展示了一个高效且全面的侦察工作流程。这种集成方法对于任何从事网络安全或 Web 应用程序测试的人来说都是一项宝贵的技能。
