使用 Nikto 脚本静默控制台输出

Kali LinuxBeginner
立即练习

引言

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

当从命令行运行 Nikto 时,它会产生大量的实时输出,这对于交互式使用很有帮助。然而,当你希望通过脚本自动化扫描时,这种冗长的输出可能是不受欢迎的。

在本实验中,你将学习如何使用 -Mute 选项静默运行 Nikto 扫描。这是将 Nikto 集成到自动化安全工作流和 shell 脚本中的一项关键技能,它允许你在不弄乱控制台的情况下将结果捕获到文件中。

运行标准扫描并观察详细的控制台输出

在此步骤中,你将对测试 Web 服务器执行基本的 Nikto 扫描。这将帮助你了解其默认行为以及它向控制台打印的信息量。

首先,让我们运行一个标准扫描。-h 选项用于指定目标主机。我们的测试服务器正在本地的 8000 端口上运行。

在你的终端中执行以下命令:

nikto -h http://127.0.0.1:8000

你将看到大量输出,包括 Nikto 版本横幅、目标信息以及扫描过程中实时的状态更新。

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    127.0.0.1
+ 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)
... (many more lines of output) ...
+ 1 host(s) tested

这种详细的输出对于实时监控扫描很有用,但它不适合自动化。

使用 -Mute 选项抑制正常控制台输出

在此步骤中,你将学习如何使用 -Mute 选项来显著减少控制台输出。此选项告诉 Nikto 抑制扫描过程中通常会显示的正常 HTTP 请求和响应。

-Mute 选项非常适合你只关心最终发现,而不关心逐步进展的情况。

现在,运行与之前相同的扫描,但在命令末尾添加 -Mute 选项:

nikto -h http://127.0.0.1:8000 -Mute

观察现在的输出。它干净多了。横幅和实时状态更新消失了。你只会看到最终的发现摘要。

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    127.0.0.1
+ 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)
+ 1 host(s) tested

如你所见,输出的混乱程度大大降低,当扫描是更大流程的一部分时,这使得解析或读取更加容易。

结合 -Mute 和 -o 将结果静默保存到文件

在此步骤中,我们将进一步使用静默功能。目标是运行一个在控制台不产生任何输出的扫描,并将所有发现直接保存到文件。这是自动化脚本最常见的需求。

要实现这一点,你可以将 -Mute 选项与 -o (或 --output) 选项结合使用,后者指定一个输出文件。

运行以下命令。它将执行扫描,抑制所有控制台输出,并将报告保存到名为 nikto_report.txt 的文件中。

nikto -h http://127.0.0.1:8000 -Mute -o nikto_report.txt

运行命令后,你会注意到你的终端提示符会立即返回,而不会打印任何扫描结果。扫描在后台静默运行。

要确认报告已生成,首先列出当前目录中的文件:

ls

你应该会在列表中看到 nikto_report.txt

nikto_report.txt  www

现在,查看报告文件的内容:

cat nikto_report.txt

文件的内容将与你在上一步中看到的静默输出相同。这项技术对于保留日志或以编程方式处理扫描结果至关重要。

编写一个调用静默 Nikto 扫描的简单 bash 脚本

在此步骤中,你将创建一个简单的 bash 脚本来自动化静默 Nikto 扫描。这演示了 -Mute-o 选项在实际自动化场景中的用法。

首先,使用 nano 文本编辑器创建一个名为 scan.sh 的新文件:

nano scan.sh

nano 编辑器中,添加以下内容。此脚本将向用户打印状态消息,运行静默 Nikto 扫描,并将结果保存到名为 script_report.txt 的新文件中。

#!/bin/bash

echo "Starting silent Nikto scan..."
nikto -h http://127.0.0.1:8000 -Mute -o script_report.txt
echo "Scan complete. Report saved to script_report.txt"

Ctrl+X 退出,按 Y 保存更改,然后按 Enter 确认文件名。

接下来,你需要使脚本可执行。使用 chmod 命令添加执行权限:

chmod +x scan.sh

最后,运行你的新脚本:

./scan.sh

脚本将显示“Starting”和“Scan complete”消息,但 Nikto 扫描本身不会产生任何控制台输出。

Starting silent Nikto scan...
Scan complete. Report saved to script_report.txt

你可以再次使用 ls 命令来验证是否已创建新的报告文件 script_report.txt

检查脚本的退出码以确定扫描是否完成

在此步骤中,你将学习如何检查脚本的退出码。在 shell 脚本中,退出码是命令或脚本执行完毕后返回的一个数字。退出码 0 通常表示命令成功完成。

这是构建可靠脚本的一个基本概念,因为它允许你在继续下一步之前检查当前步骤是否成功。

首先,再次运行你的脚本:

./scan.sh

脚本完成后,你可以立即通过检查特殊 shell 变量 $? 来查看其退出码。此变量始终保存最后执行命令的退出码。

运行以下命令:

echo $?

输出应为 0,表示你的 scan.sh 脚本已成功完成,没有错误。

0

在更高级的脚本中,你可以在 if 语句中使用此检查来处理错误,例如:

./scan.sh
if [ $? -eq 0 ]; then
  echo "Script completed successfully."
else
  echo "Script failed with an error."
fi

这证实了你可以在脚本中可靠地执行你的静默 Nikto 扫描,并以编程方式验证其完成情况。

总结

在本实验中,你学习了如何控制 Nikto 的控制台输出,以实现有效的脚本编写和自动化。

你首先观察了标准 Nikto 扫描的详细输出。然后,你使用了 -Mute 选项来抑制非必要输出,并使用 -o 选项将扫描结果静默地保存到文件中。最后,你将这些选项集成到 bash 脚本中,并学习了如何检查脚本的退出码以验证其是否成功完成。

对于任何希望自动化 Web 安全评估和构建强大、非交互式安全工具的人来说,这些技能都是基础。