使用 Nikto 扫描 Web 服务器

NmapNmapBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,你将学习如何使用开源的 Web 服务器扫描器 Nikto 来检测 Web 应用程序中的潜在漏洞。你将在故意设置了漏洞的 bWAPP 应用程序上练习扫描技术,同时学习如何有效地解读扫描结果。

本次实验涵盖了 Nikto 的安装、目标配置、扫描执行和结果分析。通过实践操作,你将掌握使用这个广泛应用的安全工具进行基本 Web 服务器漏洞评估的关键技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") subgraph Lab Skills nmap/save_output -.-> lab-549948{{"使用 Nikto 扫描 Web 服务器"}} nmap/target_specification -.-> lab-549948{{"使用 Nikto 扫描 Web 服务器"}} end

安装 Nikto

在这一步中,你将安装 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 环境中安全搭建。这个练习应用程序专为安全测试而设计,不会影响真实系统。

  1. 首先,让我们切换到进行扫描的正确工作目录。这有助于组织我们的项目文件:

    cd ~/project
  2. 在扫描之前,我们需要确认目标 Web 服务器是否正常运行。我们将使用带有 -I 标志的 curl 命令仅获取 HTTP 头部信息:

    curl -I http://localhost:8000

    成功的响应将显示 HTTP 状态码 200 OK,表明服务器处于活动状态:

    HTTP/1.1 200 OK
  3. 现在,我们将目标 URL 设置为环境变量。这样在后续的扫描中引用会更方便:

    TARGET="http://localhost:8000"
  4. 让我们进行一个快速测试,查看 Web 服务器的响应。我们将使用 curl 命令获取页面内容,并仅显示前 5 行:

    curl $TARGET | head -n 5

    这会给我们一个 HTML 内容的示例,确认我们可以成功连接到服务器。

  5. 记住这个目标 URL,因为我们将在整个扫描过程中使用它。在进行安全评估时,跟踪目标至关重要。

运行漏洞扫描

在这一步中,你将使用 Nikto 对我们在上一步中选择的目标服务器进行漏洞扫描。Nikto 是一款开源的 Web 服务器扫描器,它可以检测超过 6700 个潜在危险的文件/程序,检查服务器版本是否过时,并识别常见的 Web 服务器配置错误。

在开始扫描之前,确保你处于有权限运行该工具并保存结果的正确目录中。cd 命令可以更改当前工作目录:

  1. 首先,确保你处于正确的工作目录:

    cd ~/project

现在我们将运行基本扫描。-h 标志指定目标主机(在本例中为本地测试服务器)。Nikto 将自动检查常见漏洞,例如:

  • 默认文件和程序
  • 不安全的服务器配置
  • 过时的服务器软件
  • 潜在的 XSS 和 SQL 注入漏洞
  1. 对目标服务器(http://localhost:8000)运行基本的 Nikto 扫描:

    nikto -h http://localhost:8000
  2. 扫描将运行并实时显示结果。你将看到类似以下的输出:

    - Nikto v2.1.6
    - Target IP:          127.0.0.1
    - Target Hostname:    localhost
    - Target Port:        8000
    - Start Time:         [timestamp]

为了进行更全面的检查,我们可以使用调优选项。-Tuning 参数允许你指定要运行的测试。这里,x 启用扩展测试,而 6 检查可能暴露敏感信息的常见文件。

  1. 要进行更全面的扫描,你可以添加这些选项:

    nikto -h http://localhost:8000 -Tuning x 6

    这将执行扩展测试(x)并检查常见文件(6)。

  2. 扫描可能需要 1 - 2 分钟才能完成。完成后,你将看到一个发现结果的摘要,包括:

    + Server may be vulnerable to XSS
    + Retrieved x-powered-by header: PHP/7.4.3
    + OSVDB-3092: Possible sensitive directory

每个发现结果包括:

  • 漏洞描述
  • 漏洞类型
  • 相关参考(如 OSVDB ID)
  • 受影响的组件
  1. 请注意,有些发现结果可能是误报 —— 我们将在下一步中分析这些结果。并非所有报告的问题都是实际的漏洞,这就是为什么在安全测试中手动验证至关重要。

审查扫描输出

在这一步中,我们将仔细检查 Nikto 的扫描结果,以了解目标 Web 服务器中发现了哪些漏洞。作为初学者,了解 Nikto 以结构化方式组织其发现结果,有助于你高效识别安全问题,这一点很重要。

  1. 首先,确保你处于存储扫描结果的正确工作目录:

    cd ~/project

    此命令将你的当前目录更改为 Nikto 保存其输出文件的位置。

  2. 让我们来剖析一下你在 Nikto 输出文件中会看到的主要部分:

    • 服务器信息:揭示正在运行的 Web 服务器软件(如 Apache 或 Nginx)及其版本号
    • 漏洞发现:显示 Nikto 检测到的具体安全问题,并带有指示每个问题严重程度的标识
    • 扫描摘要:提供扫描期间发现内容的总数
  3. 要快速找到最重要的漏洞,请运行以下命令:

    grep -E '\+|OSVDB' ~/project/nikto_scan.txt

    此命令会在你的扫描结果中进行搜索,仅显示包含漏洞标记(+)或 OSVDB 引用(即漏洞数据库 ID)的行。

  4. 在审查结果时,要格外注意以下几点:

    • 任何标记为“高”风险的发现 —— 这些是最危险的问题
    • 服务器软件的旧版本 —— 过时的程序通常存在已知的安全漏洞
    • 暴露的目录或敏感文件 —— 这些不应公开访问
    • 常见的 Web 攻击,如跨站脚本攻击(Cross-Site Scripting,XSS)或 SQL 注入(SQL Injection,SQLi)
  5. 以下是典型发现结果的示例:

    + /config.php: PHP config file found
    + OSVDB-3092: /admin/: This might be interesting

    第一行表明 Nikto 发现了一个不应公开的配置文件。第二行引用了开源漏洞数据库中的一个特定漏洞 ID。

  6. 要获取特定 OSVDB 条目的更多详细信息,你可以查询漏洞数据库:

    curl -s "https://vulners.com/api/v3/search/id/?id=OSVDB-3092" | jq '.data.attributes'

    此命令从在线数据库中获取关于漏洞 OSVDB - 3092 的详细信息,并将其格式化为易于阅读的形式。

  7. 在查看结果时,记下你发现的最严重问题。我们将在下一步记录发现结果时使用这些笔记。重点是理解每个漏洞的含义,而不是试图一次性修复所有问题。

保存报告

在这最后一步中,你将把 Nikto 扫描结果保存到一个文件中,以便进行记录和日后参考。在安全测试中,保存报告至关重要,因为它能提供所发现漏洞的证据,并有助于跟踪修复进度。

  1. 首先,确保你处于想要存储扫描报告的正确工作目录。cd 命令用于更改目录:

    cd ~/project
  2. 要将上一步的扫描结果以纯文本格式保存,请运行以下命令。-output 标志指定 Nikto 将其发现结果写入的文件名:

    nikto -h http://localhost:8000 -output vuln_scan_report.txt
  3. 验证报告是否成功创建。ls -l 命令会列出文件的详细信息,你应该能看到报告文件有内容(非零大小):

    ls -l vuln_scan_report.txt
  4. 为了提高可读性并便于与团队成员分享,你可以生成 HTML 格式的报告。-Format html 选项会创建一个视觉上更有条理的报告:

    nikto -h http://localhost:8000 -Format html -output vuln_scan_report.html
  5. 要快速查看文本报告的内容,可以使用 head 命令,它会显示前 20 行。这有助于验证扫描是否正常完成:

    head -n 20 vuln_scan_report.txt
  6. 报告包含几个安全专业人员会分析的重要部分:

    • 扫描元数据(日期、目标等)—— 显示扫描的时间和对象
    • 所有已识别的漏洞 —— 需要关注的核心发现
    • 修复建议 —— 针对每个问题提出的建议修复方案
    • 扫描统计信息和完成时间 —— 有助于衡量扫描性能
  7. 这些报告文件现在已保存在你的 ~/project 目录中。你可以:

    • 与开发人员分享以修复问题
    • 与未来的扫描结果进行比较以跟踪进度
    • 将其包含在安全审计文档中
    • 将其用作合规性报告的证据

总结

在本次实验中,你学习了如何安装和配置强大的开源 Web 服务器扫描工具 Nikto,以检测目标系统中的漏洞。本练习引导你验证安装情况、检查服务器可访问性,并针对易受攻击的 Web 应用程序进行全面扫描。

你通过实践获得了解读扫描结果和生成报告的经验,这展示了漏洞评估在维护 Web 安全方面的关键作用。这些实用知识为你提供了识别 Web 服务器中潜在安全风险的必要技能。