简介
在本次实验中,你将学习如何使用开源的 Web 服务器扫描器 Nikto 来检测 Web 应用程序中的潜在漏洞。你将在故意设置了漏洞的 bWAPP 应用程序上练习扫描技术,同时学习如何有效地解读扫描结果。
本次实验涵盖了 Nikto 的安装、目标配置、扫描执行和结果分析。通过实践操作,你将掌握使用这个广泛应用的安全工具进行基本 Web 服务器漏洞评估的关键技能。
在本次实验中,你将学习如何使用开源的 Web 服务器扫描器 Nikto 来检测 Web 应用程序中的潜在漏洞。你将在故意设置了漏洞的 bWAPP 应用程序上练习扫描技术,同时学习如何有效地解读扫描结果。
本次实验涵盖了 Nikto 的安装、目标配置、扫描执行和结果分析。通过实践操作,你将掌握使用这个广泛应用的安全工具进行基本 Web 服务器漏洞评估的关键技能。
在这一步中,你将安装 Nikto,这是一款开源的 Web 服务器扫描器,可帮助识别 Web 服务器中的安全问题。Nikto 会检查服务器软件是否过时、是否存在危险文件/CGI 以及其他常见漏洞。了解这些漏洞对于保障 Web 应用程序的安全至关重要。
在开始之前,确保你处于正确的目录。~/project
目录是我们进行所有实验工作的地方,这样可以使文件组织有序:
cd ~/project
接下来,需要更新软件包列表。这能确保我们安装的是包含所有最新安全更新的 Nikto 版本:
sudo apt update
现在可以安装 Nikto 了。-y
标志会自动确认安装,无需手动批准:
sudo apt install -y nikto
安装完成后,通过检查已安装的版本来验证安装是否成功。这可以确认 Nikto 已正确安装,并显示我们将使用的版本:
nikto -Version
你应该会看到类似以下的输出:
Nikto v2.1.6
Nikto 现已成功安装在你的系统上。虽然 Nikto 在 /etc/nikto.conf
有一个配置文件,但在这个入门实验中,我们将使用默认设置。这些默认设置在全面扫描和合理速度之间取得了良好的平衡,适合学习使用。
在这一步中,你将学习如何选择并验证用于漏洞扫描的目标 Web 服务器。我们将使用 Nikto 扫描一个名为“bWAPP”(Buggy Web Application,有漏洞的 Web 应用程序)的故意设置了漏洞的 Web 应用程序,它已在我们的 LabEx 环境中安全搭建。这个练习应用程序专为安全测试而设计,不会影响真实系统。
首先,让我们切换到进行扫描的正确工作目录。这有助于组织我们的项目文件:
cd ~/project
在扫描之前,我们需要确认目标 Web 服务器是否正常运行。我们将使用带有 -I
标志的 curl
命令仅获取 HTTP 头部信息:
curl -I http://localhost:8000
成功的响应将显示 HTTP 状态码 200 OK
,表明服务器处于活动状态:
HTTP/1.1 200 OK
现在,我们将目标 URL 设置为环境变量。这样在后续的扫描中引用会更方便:
TARGET="http://localhost:8000"
让我们进行一个快速测试,查看 Web 服务器的响应。我们将使用 curl
命令获取页面内容,并仅显示前 5 行:
curl $TARGET | head -n 5
这会给我们一个 HTML 内容的示例,确认我们可以成功连接到服务器。
记住这个目标 URL,因为我们将在整个扫描过程中使用它。在进行安全评估时,跟踪目标至关重要。
在这一步中,你将使用 Nikto 对我们在上一步中选择的目标服务器进行漏洞扫描。Nikto 是一款开源的 Web 服务器扫描器,它可以检测超过 6700 个潜在危险的文件/程序,检查服务器版本是否过时,并识别常见的 Web 服务器配置错误。
在开始扫描之前,确保你处于有权限运行该工具并保存结果的正确目录中。cd
命令可以更改当前工作目录:
首先,确保你处于正确的工作目录:
cd ~/project
现在我们将运行基本扫描。-h
标志指定目标主机(在本例中为本地测试服务器)。Nikto 将自动检查常见漏洞,例如:
对目标服务器(http://localhost:8000)运行基本的 Nikto 扫描:
nikto -h http://localhost:8000
扫描将运行并实时显示结果。你将看到类似以下的输出:
- Nikto v2.1.6
- Target IP: 127.0.0.1
- Target Hostname: localhost
- Target Port: 8000
- Start Time: [timestamp]
为了进行更全面的检查,我们可以使用调优选项。-Tuning
参数允许你指定要运行的测试。这里,x
启用扩展测试,而 6
检查可能暴露敏感信息的常见文件。
要进行更全面的扫描,你可以添加这些选项:
nikto -h http://localhost:8000 -Tuning x 6
这将执行扩展测试(x)并检查常见文件(6)。
扫描可能需要 1 - 2 分钟才能完成。完成后,你将看到一个发现结果的摘要,包括:
+ Server may be vulnerable to XSS
+ Retrieved x-powered-by header: PHP/7.4.3
+ OSVDB-3092: Possible sensitive directory
每个发现结果包括:
在这一步中,我们将仔细检查 Nikto 的扫描结果,以了解目标 Web 服务器中发现了哪些漏洞。作为初学者,了解 Nikto 以结构化方式组织其发现结果,有助于你高效识别安全问题,这一点很重要。
首先,确保你处于存储扫描结果的正确工作目录:
cd ~/project
此命令将你的当前目录更改为 Nikto 保存其输出文件的位置。
让我们来剖析一下你在 Nikto 输出文件中会看到的主要部分:
要快速找到最重要的漏洞,请运行以下命令:
grep -E '\+|OSVDB' ~/project/nikto_scan.txt
此命令会在你的扫描结果中进行搜索,仅显示包含漏洞标记(+)或 OSVDB 引用(即漏洞数据库 ID)的行。
在审查结果时,要格外注意以下几点:
以下是典型发现结果的示例:
+ /config.php: PHP config file found
+ OSVDB-3092: /admin/: This might be interesting
第一行表明 Nikto 发现了一个不应公开的配置文件。第二行引用了开源漏洞数据库中的一个特定漏洞 ID。
要获取特定 OSVDB 条目的更多详细信息,你可以查询漏洞数据库:
curl -s "https://vulners.com/api/v3/search/id/?id=OSVDB-3092" | jq '.data.attributes'
此命令从在线数据库中获取关于漏洞 OSVDB - 3092 的详细信息,并将其格式化为易于阅读的形式。
在查看结果时,记下你发现的最严重问题。我们将在下一步记录发现结果时使用这些笔记。重点是理解每个漏洞的含义,而不是试图一次性修复所有问题。
在这最后一步中,你将把 Nikto 扫描结果保存到一个文件中,以便进行记录和日后参考。在安全测试中,保存报告至关重要,因为它能提供所发现漏洞的证据,并有助于跟踪修复进度。
首先,确保你处于想要存储扫描报告的正确工作目录。cd
命令用于更改目录:
cd ~/project
要将上一步的扫描结果以纯文本格式保存,请运行以下命令。-output
标志指定 Nikto 将其发现结果写入的文件名:
nikto -h http://localhost:8000 -output vuln_scan_report.txt
验证报告是否成功创建。ls -l
命令会列出文件的详细信息,你应该能看到报告文件有内容(非零大小):
ls -l vuln_scan_report.txt
为了提高可读性并便于与团队成员分享,你可以生成 HTML 格式的报告。-Format html
选项会创建一个视觉上更有条理的报告:
nikto -h http://localhost:8000 -Format html -output vuln_scan_report.html
要快速查看文本报告的内容,可以使用 head
命令,它会显示前 20 行。这有助于验证扫描是否正常完成:
head -n 20 vuln_scan_report.txt
报告包含几个安全专业人员会分析的重要部分:
这些报告文件现在已保存在你的 ~/project
目录中。你可以:
在本次实验中,你学习了如何安装和配置强大的开源 Web 服务器扫描工具 Nikto,以检测目标系统中的漏洞。本练习引导你验证安装情况、检查服务器可访问性,并针对易受攻击的 Web 应用程序进行全面扫描。
你通过实践获得了解读扫描结果和生成报告的经验,这展示了漏洞评估在维护 Web 安全方面的关键作用。这些实用知识为你提供了识别 Web 服务器中潜在安全风险的必要技能。