重放和重新格式化 Nikto 之前的扫描

Kali LinuxBeginner
立即练习

引言

Nikto 是一个流行的开源 Web 服务器扫描器,它对 Web 服务器进行全面的测试,检查超过 6700 个潜在危险文件/程序,检查超过 1250 个服务器的过时版本,以及超过 270 个服务器的版本特定问题。

完整的 Nikto 扫描可能非常耗时,尤其是在大型和复杂的 Web 应用上。如果你需要多种格式的扫描结果(例如,一种用于技术报告,另一种用于演示),重复运行扫描效率低下。Nikto 提供了一个强大的功能,可以保存扫描结果,然后“重放”它们以生成不同格式的报告,而无需重新扫描目标。

在本实验中,你将学习如何执行初始扫描,将结果保存到 XML 文件,然后使用 -replay 选项高效地生成 HTML 格式的新报告。

执行扫描并将输出保存到 XML 文件

在此步骤中,你将针对本地测试 Web 服务器执行基本的 Nikto 扫描。关键在于将输出以结构化格式(如 XML)保存到文件中,Nikto 稍后可以解析该文件。我们将使用 -o 选项指定输出文件,并使用 -Format 定义文件类型。

首先,请确保你位于 ~/project 目录。我们的设置脚本已经启动了一个简单的 Web 服务器,运行在 localhost8000 端口。

现在,在你的终端中运行以下命令,扫描本地 Web 服务器并将结果保存到名为 scan_results.xml 的文件中:

nikto -h http://localhost:8000 -o scan_results.xml -Format xml

让我们分解一下这个命令:

  • nikto: 运行 Nikto 扫描器的命令。
  • -h http://localhost:8000: 指定要扫描的主机(目标)。
  • -o scan_results.xml: 指定输出文件名。
  • -Format xml: 指示 Nikto 以 XML 格式保存输出。

扫描需要一些时间才能完成。你将在终端中看到类似以下的输出(详细信息可能有所不同):

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type.
+ No CGI directories found (use '-C all' to force check all possible dirs)
+ Allowed HTTP Methods: GET, HEAD, OPTIONS
+ Public HTTP Methods: GET, HEAD, OPTIONS
...
+ 1 host(s) tested

命令完成后,将在你当前目录(~/project)中创建一个名为 scan_results.xml 的文件。

使用保存的 XML 文件进行 -replay

在此步骤中,你将学习如何使用 Nikto 的 -replay 功能。此选项允许 Nikto 解析先前保存的 XML 扫描文件,并在不重新连接目标服务器的情况下显示发现项。这对于快速查看结果或在目标不再在线的情况下非常有用。

要重放你刚刚保存的扫描,请使用以下命令:

nikto -replay scan_results.xml

此命令指示 Nikto 读取 scan_results.xml 文件并将发现项输出到终端。输出将与原始扫描的终端输出几乎相同,但它将立即从文件中生成。

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type.
...
+ 1 host(s) tested

请注意该命令完成的速度有多快。这表明 Nikto 是从本地文件读取,而不是执行新的网络扫描。

使用 -Format htm 生成新的 HTML 报告

在此步骤中,你将把 -replay 选项与 -Format 选项结合使用,以生成一种新格式的报告。这是本次实验课程的核心:你可以从一次保存的扫描中生成多种类型的报告。

假设你现在需要一份格式精美的 HTML 报告用于演示。你可以直接从已保存的 scan_results.xml 文件生成它。

运行以下命令:

nikto -replay scan_results.xml -o report.html -Format htm

以下是新命令的分解说明:

  • nikto -replay scan_results.xml: 这部分与上一步相同;它告诉 Nikto 使用已保存的数据。
  • -o report.html: 这指定了一个名为 report.html 的新输出文件。
  • -Format htm: 这告诉 Nikto 将输出格式化为 HTML 文件。

此命令运行速度非常快,在终端中产生的输出也很少,因为它直接将报告写入 report.html 文件。

- Nikto v2.5.0
+ 1 host(s) tested

你现在已经成功地在不重新扫描目标的情况下生成了另一种格式的新报告。

验证新报告已创建,无需重新扫描

在此步骤中,你将验证新的 HTML 报告文件是否已创建,并确认它包含有效的 HTML 内容。这有助于加深理解,即上一个命令生成了一个基于文件的报告。

首先,列出当前目录 (~/project) 中的文件,以查看新创建的报告。

ls -l

在输出中,你应该会看到原始的 XML 文件和新的 HTML 文件:

total 12
-rw-r--r-- 1 labex labex  68 ... index.html
-rw-r--r-- 1 labex labex ... ... report.html
-rw-r--r-- 1 labex labex ... ... scan_results.xml

接下来,为了快速检查新报告的内容,你可以使用 head 命令查看 report.html 文件的前几行。

head report.html

输出将显示 HTML 文档的开头,确认文件已正确创建。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Nikto Report</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style type="text/css">
...

最重要的观察点是速度。第 3 步中的命令几乎瞬间完成,而第 1 步中的原始扫描则花费了明显的时间。这是确凿的证据,证明你正在重新格式化现有数据,而不是执行一次新的、耗时的扫描。

理解重放已保存结果的效率

在最后一步中,你将巩固对使用重放功能所获得效率的理解。设想一下,你还需要 CSV(逗号分隔值)格式的结果,以便导入电子表格进行进一步分析。无需再次运行扫描,你只需从同一个 scan_results.xml 文件生成另一个报告。

运行以下命令来创建 CSV 报告:

nikto -replay scan_results.xml -o report.csv -Format csv

此命令的结构与 HTML 命令类似,但它指定了一个新文件名 (report.csv) 和一个新格式 (csv)。同样,它将在几秒钟内完成。

现在,再次列出文件,查看所有生成的报告:

ls -l

你现在将看到三个报告文件,所有这些文件都来自一次扫描:

total 16
-rw-r--r-- 1 labex labex  68 ... index.html
-rw-r--r-- 1 labex labex ... ... report.csv
-rw-r--r-- 1 labex labex ... ... report.html
-rw-r--r-- 1 labex labex ... ... scan_results.xml

这种工作流程——扫描一次,报告多次——是高效漏洞评估的基石。对于可能需要数小时的大规模扫描,此功能可以节省大量时间和计算资源,让你能够专注于分析结果,而不是等待扫描完成。

总结

在此实验中,你学习了处理 Nikto 扫描结果的高效工作流程。你成功执行了 Web 服务器扫描,并将结果保存到 XML 文件。然后,你使用了强大的 -replay 选项来解析这些已保存的数据,并在无需重新运行耗时的网络扫描的情况下,生成了不同格式(HTML 和 CSV)的新报告。

你练习的关键命令和概念包括:

  • nikto -h [host] -o [file.xml] -Format xml: 执行扫描并保存结果。
  • nikto -replay [file.xml] -o [new_report] -Format [htm/csv/txt]: 从已保存的数据生成新报告。

这种将扫描阶段与报告阶段分离的技术,对于高效的安全测试和分析至关重要。