引言
Nikto 是一个流行的开源 Web 服务器扫描器,它对 Web 服务器进行全面的测试,检查超过 6700 个潜在危险文件/程序,检查超过 1250 个服务器的过时版本,以及超过 270 个服务器的版本特定问题。默认情况下,Nikto 会扫描标准的 HTTP/HTTPS 端口,如 80 和 443。然而,在实际场景中,Web 服务通常托管在非标准端口上以进行隐藏。
在本实验中,你将学习如何使用 Nikto 扫描目标上的特定非标准端口。这是一项基本技能,用于确保所有面向 Web 的服务,无论其运行在哪个端口上,都能得到适当的漏洞评估。
识别目标上的非标准 HTTP 端口
在此步骤中,你将首先识别目标机器上的开放端口。在用 Nikto 扫描特定端口之前,你需要知道哪些端口是开放的并且可能托管着服务。我们将为此目的使用强大的网络扫描工具 nmap。
让我们扫描本地机器(localhost)上的端口范围,以找到我们设置的 Web 服务器。我们将扫描 8000 到 9000 的端口范围。
在你的终端中执行以下命令:
nmap -p 8000-9000 localhost
你应该会看到类似以下的输出,表明端口 8001 和 8088 是开放的。
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).
Not shown: 98 closed ports
PORT STATE SERVICE
8001/tcp open vcom-tunnel
8088/tcp open radan-http
Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
此输出确认在我们指定的范围内,有两个服务运行在非标准端口上。我们将重点关注端口 8088 进行第一次 Nikto 扫描。
使用 -p 标志指定目标端口
在此步骤中,你将了解用于端口扫描的特定 Nikto 标志。默认情况下,Nikto 会扫描端口 80。要指示 Nikto 扫描不同的端口,你必须使用 -p(或 -port)命令行选项。
语法很简单:
nikto -h <目标主机> -p <端口号>
例如,要扫描我们在上一步中发现的、运行在端口 8088 上的主机 localhost,命令结构将是:
nikto -h localhost -p 8088
此命令告诉 Nikto 执行其完整的测试套件,但将所有测试都指向主机 localhost 上的端口 8088。在下一步中,你将执行此命令并查看结果。
对主机和特定端口运行扫描
现在你已经知道如何指定目标端口,让我们来运行扫描。你将使用上一步的命令结构,针对 localhost 的端口 8088 发起一次 Nikto 扫描。
在你的终端中执行以下命令:
nikto -h localhost -p 8088
Nikto 将会启动,你将看到详细说明其进度和发现的输出。输出看起来会像这样(部分细节可能有所不同):
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8088
+ Start Time: 2023-10-27 10:05:10 (GMT0)
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.12
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ 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)
+ OSVDB-3092: /cgi-bin/: This might be interesting...
+ 7558 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time: 2023-10-27 10:05:25 (GMT0) (15 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
你已成功地对非标准端口执行了有针对性的漏洞扫描。
分析非标准服务的扫描结果
在此步骤中,你将分析刚刚执行的 Nikto 扫描的输出。理解扫描结果与执行扫描本身同等重要。
让我们回顾一下上一步输出中的关键发现:
+ Target Port: 8088: 这证实了 Nikto 正确地将目标对准了你指定的端口。+ Server: SimpleHTTP/0.6 Python/3.10.12: 这是非常有价值的信息。Nikto 已识别出 Web 服务器软件及其版本。在这种情况下,它是一个由 Python 提供的简单服务器。了解服务器技术有助于攻击者专注于特定的漏洞利用。- 缺失的安全标头 (Missing Security Headers): 诸如
The anti-clickjacking X-Frame-Options header is not present之类的行指出了安全配置错误。这些标头有助于保护 Web 应用程序免受常见的攻击,如点击劫持 (clickjacking) 和跨站脚本攻击 (XSS)。 + OSVDB-3092: /cgi-bin/: This might be interesting...: Nikto 识别了一个名为cgi-bin的目录。该目录传统上存放可执行脚本,使其成为寻找漏洞的攻击者的高价值目标。
此分析表明,即使是非标准端口上的简单服务也可能具有可发现的特征和潜在的安全弱点。
扫描单个主机上的端口范围
在最后一步中,你将学习如何通过为 Nikto 提供要检查的端口范围来提高扫描效率。当你从 nmap 扫描中识别出多个潜在端口或怀疑服务运行在特定范围内时,这会非常有用。
-p 标志也接受用连字符指定的端口范围。语法是:
nikto -h <target_host> -p <start_port>-<end_port>
让我们使用此命令扫描 localhost 上的 8000-8100 端口范围。此范围包括我们正在运行的两个 Web 服务器(端口 8001 和 8088)。
执行以下命令:
nikto -h localhost -p 8000-8100
Nikto 现在将遍历指定范围内的每个端口。它将首先扫描端口 8000,找不到任何内容,然后移动到 8001,找到 Web 服务器,对其进行扫描并报告结果。它将继续此过程,直到达到端口 8100,同时也会扫描端口 8088 上的服务器。
输出将非常详尽,显示两个独立的扫描报告,每个找到的活动端口一个:
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8001
... (Results for port 8001) ...
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8088
... (Results for port 8088) ...
---------------------------------------------------------------------------
+ 2 host(s) tested
这展示了你如何仅用一个命令就能高效地检查单个主机上的多个端口。
总结
在本实验中,你学习了如何将 Nikto 的扫描能力扩展到标准 Web 端口之外。你首先使用 nmap 来识别运行在非标准端口上的服务。然后,你使用了 Nikto 强大的 -p 标志来定位单个特定端口,并分析了产生的输出以识别服务器技术和潜在的配置错误。
最后,你学习了如何使用 -p 标志扫描端口范围,这是一项高效发现目标上隐藏 Web 服务的重要技术。掌握定向扫描是进行有效和彻底的 Web 应用程序安全测试的关键技能。


