引言
Nikto 是一个流行的开源 Web 服务器扫描器,它对 Web 服务器进行全面的测试,涵盖多种项目,包括超过 6700 个潜在危险的文件/程序,检查超过 1250 个服务器的过时版本,以及超过 270 个服务器的版本特定问题。
在执行安全扫描时,通常希望避免被入侵检测系统 (IDS)、入侵防御系统 (IPS) 或 Web 应用防火墙 (WAF) 等安全系统检测到。这些系统会监控网络流量中的恶意模式。Nikto 包含内置的规避技术,以帮助隐藏其扫描并使其不易被此类系统察觉。
在本实验中,你将学习如何使用 Nikto 的 -evasion 选项来执行更隐蔽的扫描。
理解 -evasion 提供的可用规避技术
在本步骤中,你将学习如何列出并理解 Nikto 中可用的不同规避技术。-evasion 选项(或 -e)用于指定一种规避技术。要查看所有可用技术,你可以仅运行 Nikto 的 -evasion 选项,而不指定具体技术编号。
让我们列出可用的技术。打开你的终端并运行以下命令:
nikto -evasion
你将看到一个可用技术的列表,其中包含每个技术的编号和简短描述。
- Evasion options:
1 Random URI encoding (non-UTF8)
2 Directory self-reference (/./)
3 Premature URL ending
4 Prepend long random string to request
5 Fake parameter
6 GET instead of HEAD
7 Use a random User-Agent
8 Random case sensitivity
A Use a random IP for the Source-IP
B Obfuscate with TABs
C Use a carriage return (CR) as a line-ending
D Use a binary value as a line-ending
E Use a long false request to mis-direct an IDS
F Use Windows-style directory separators (\)
此输出显示了 Nikto 可以用来修改其请求以避免检测的各种方法。在接下来的步骤中,我们将练习使用其中一些技术。
使用 -evasion 1 进行随机 URI 编码扫描
在本步骤中,你将使用第一个规避技术,“随机 URI 编码”。此技术以非标准方式对请求 URI 的部分进行编码。虽然 Web 服务器通常能理解这些编码,但基于签名的简单 IDS 可能会无法匹配模式,从而使请求在未被检测到的情况下通过。
我们将对你在实验设置中启动的简单 Web 服务器进行扫描。它运行在 http://127.0.0.1:8000。
要使用技术 1,你需要将该编号附加到 -evasion 选项。在你的终端中执行以下命令:
nikto -h http://127.0.0.1:8000 -evasion 1
Nikto 现在将开始扫描目标。扫描将照常进行,但发送到服务器的请求的 URI 将被随机编码。
以下是你可能看到的输出示例:
- 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.12
+ 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)
+ Server leaks a possible file system path: /home/labex/project/test-site/. This may suggest the server is running on a Unix-like system.
+ Allowed HTTP Methods: GET, HEAD, OPTIONS
+ Public HTTP Methods: GET, HEAD, OPTIONS
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
...
+ 15 requests: 0 error(s) and 7 item(s) reported on remote host
+ End Time: ... (15 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
请注意,扫描已完成并提供了发现结果,但底层请求已修改为更具规避性。
尝试使用 -evasion 2 进行目录自引用扫描
现在,让我们尝试另一种技术。规避技术 2 使用“目录自引用”。此方法将 /./ 插入到请求 URL 中(例如,/cgi-bin/ 变为 /./cgi-bin/)。大多数 Web 服务器会规范化此路径并将其视为常规请求,但这可能会混淆一些正在查找精确路径匹配的安全过滤器。
使用规避技术 2 对同一目标运行 Nikto 扫描:
nikto -h http://127.0.0.1:8000 -evasion 2
扫描将再次运行,但这次使用目录自引用技巧。输出将与之前的扫描非常相似,因为服务器能正确响应修改后的请求。
- 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.12
+ 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.
...
+ 15 requests: 0 error(s) and 7 item(s) reported on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
关键要点是,你在使用有助于绕过安全监控的技术的同时,仍然获得了有效的扫描结果。
使用 -evasion 4 进行前置长随机字符串扫描
在本步骤中,我们将探索规避技术 4,该技术将一个长随机字符串添加到请求的前面。此技术背后的理念是将请求中实际恶意或有趣的部分推送到某些简单 IDS/IPS 设备(Intrusion Detection System/Intrusion Prevention System)的缓冲区限制之外。如果 IDS 只检查请求的开头部分,它可能会错过实际的 payload。
让我们使用此技术执行一次扫描。
nikto -h http://127.0.0.1:8000 -evasion 4
Nikto 将再次执行扫描,但这次会使用前置长随机字符串。Web 服务器会忽略这些无用数据,但这可能是欺骗模式匹配安全系统的一种有效方式。
输出将与之前的扫描类似,这表明该技术不会影响扫描针对目标服务器的有效性。
- 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.12
...
+ 15 requests: 0 error(s) and 7 item(s) reported on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
在单次扫描中组合多种规避技术
Nikto 规避能力最强大的功能之一是能够在单次扫描中组合多种技术。这会创建更复杂和多样的请求,使得 IDS 更难检测到扫描。
要组合技术,你只需将想要使用的技术的编号依次列出即可。例如,要组合随机 URI 编码(1)、目录自引用(2)和前置长随机字符串(4),你可以使用 -evasion 124。
让我们运行一次结合这三种技术的扫描:
nikto -h http://127.0.0.1:8000 -evasion 124
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.12
+ The anti-clickjacking X-Frame-Options header is not present.
...
+ 15 requests: 0 error(s) and 7 item(s) reported on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
通过组合技术,你可以创建一种更强大、更隐蔽的扫描策略,以适应你预期的特定防御措施。
总结
在本实验中,你学习了如何使用 Nikto 强大的规避功能来执行更隐蔽的 Web 漏洞扫描。你首先使用 -evasion 选项列出了可用的技术。然后,你练习了应用单独的技术,包括随机 URI 编码(1)、目录自引用(2)和前置长随机字符串(4)。
最后,你学习了如何组合这些技术来创建多层规避策略,显著增加了入侵检测系统识别你扫描活动的难度。这些技能对于在有主动监控的环境中执行有效且谨慎的安全评估至关重要。


