nikto 扫描报 0 host(s) tested 与 Web 服务器漏洞扫描用法
Nikto 是一个开源的 Web 服务器扫描器,用于检查服务器上的危险文件、过时组件、默认配置与常见响应头缺失。它把请求发往目标 Web 端口,用内置特征库逐条比对,最后给出条目清单。
仅供已获得书面授权的安全测试使用。
安装与版本
Kali 自带 Nikto。先确认版本:
nikto -Version实测环境为 Kali GNU/Linux Rolling 2025.4(内核 6.16.8+kali-amd64),返回:
Nikto 2.5.0 (LW 2.5)Debian/Ubuntu 系也可以直接安装:
sudo apt update && sudo apt install -y nikto基本用法
最小可用命令是指定主机与端口:
nikto -h 127.0.0.1 -p 8080下面是一次针对本地 8080 端口的真实扫描回显,已截取:
- Nikto v2.5.0 --------------------------------------------------------------------------- + Target IP: 127.0.0.1 + Target Port: 8080 + Server: SimpleHTTP/0.6 Python/3.13.9 + /: The anti-clickjacking X-Frame-Options header is not present. + /: The X-Content-Type-Options header is not set. + SimpleHTTP/0.6 appears to be outdated (current is at least 1.2). + 8078 requests: 4 error(s) and 11 item(s) reported on remote host + End Time: 2026-10-14 16:32:29 (GMT8) (22 seconds) --------------------------------------------------------------------------- + 1 host(s) tested每个+行是一条发现。最后一行+ N host(s) tested表示实际完成扫描的目标数,这个数字是后续排查的入口。
报错 0 host(s) tested
把端口换成一个没有监听的端口:
nikto -h 127.0.0.1 -p 8099返回只剩头尾,没有条目:
- Nikto v2.5.0 --------------------------------------------------------------------------- --------------------------------------------------------------------------- + 0 host(s) tested0 host(s) tested的含义不是「没有漏洞」,而是根本没连上目标。常见三种原因:
- 端口没监听或写错,先用
nmap -p 8099 127.0.0.1确认端口是否 open; - 目标在防火墙后,SYN 被丢弃,表现与端口关闭一致;
- 目标其实是 HTTPS 却按明文 HTTP 扫,需要显式加
-ssl。
换成确认开放的端口再扫,就会出现与上面一致的1 host(s) tested。
报错:扫描结束后卡在提交提示
第一次扫陌生服务器时,Nikto 常在结尾停住不动:
Portions of the server's headers (Python/3.13.9) are not in the Nikto 2.5.0 database or are newer than the known string. Would you like to submit this information (*no server specific data*) to CIRT.net for a Nikto update (or you may email to sullo@cirt.net) (y/n)?这是服务器 banner 不在本地特征库里,Nikto 询问是否把该信息提交回官方数据库。它不是报错。自动化脚本里应预先关掉这个交互:
nikto -h 127.0.0.1 -p 8080 -ask no-ask有三个取值:yes每次询问(默认)、no不询问也不发送、auto不询问直接发送。
扫描前的连通性确认
Nikto 不负责判断端口是否开放,扫描前先用 nmap 把面探清楚:
nmap -sV -p 80,443,8080,8443 192.168.1.10输出里open的端口才是 Nikto 的有效目标。对同一个主机同时存在 80 与 443 时,要分别扫两次,HTTP 与 HTTPS 的特征库判断不同:
nikto -h 192.168.1.10 -p 443 -ssl分场景用法
把结果落成 JSON,便于批量收集后统一处理:
nikto -h 127.0.0.1 -p 8080 -o nikto.json -Format json只关心指定类型的检查项时用-Tuning,例如只跑配置类(2)与注入类(4):
nikto -h 127.0.0.1 -p 8080 -Tuning 24给长时间扫描加一个上限,避免跑不完就中断:
nikto -h 127.0.0.1 -p 8080 -maxtime 30s需要看到全部 200 响应与 HTTP 错误时,打开显示开关:
nikto -h 127.0.0.1 -p 8080 -Display 3E规避 WAF 的编码技巧
-evasion用编码变形绕过简单规则拦截。例如把请求里的字符做随机 URI 编码:
nikto -h 127.0.0.1 -p 8080 -evasion 1用/./做目录自引用绕过路径规范化:
nikto -h 127.0.0.1 -p 8080 -evasion 2取值从 1 到 8 以及 A、B,含义在nikto -Help里有完整列表。开启后请求数会上升,且可能触发 WAF 告警,只在授权测试里用。
结果怎么读
Nikto 的+行大致分三类,处理优先级不同:
- 响应头类,如
The anti-clickjacking X-Frame-Options header is not present,属于加固建议,可以批量修复; - 组件与版本类,如
appears to be outdated,要先落到实际组件版本再定; - 路径与文件类,如
#wp-config.php# file found,优先级最高,需立即人工确认该文件是否真能读到。
特征库里有一批通用猜测条目,例如对/%2e/、//的判断来自规则匹配,命中不代表该服务器真有对应问题。判定方式是手工访问一次该路径,看返回内容是否真的暴露信息。
结尾的4 error(s) and 11 item(s) reported中,item(s)是发现的条目数,error(s)是请求失败数,两者都要看,错误率高说明这次扫描本身不稳定。
一次完整评估的流程
先确认端口与协议,再按对象分流:
nmap -sV -p- 192.168.1.10 -oN ports.txt对每个开放的 Web 端口分别扫描,HTTP 与 HTTPS 分开跑:
nikto -h 192.168.1.10 -p 80 -ask no -o http-80.json -Format json nikto -h 192.168.1.10 -p 443 -ssl -ask no -o https-443.json -Format json最后把 JSON 归档,逐条复核头缺失与文件类条目。整个流程里 Nikto 只负责列出可能的问题,不负责判定可利用性。
适用边界
Nikto 面向 HTTP/HTTPS 服务端,不覆盖前端 JavaScript 逻辑,也不会登录后再扫描。它的特征库偏向常见 Web 服务器与应用的历史问题,对自研框架的误报与漏报都偏多。真正判定某个条目是否可利用,仍需回到请求与响应本身。它适合做第一轮的资产面清点,不适合作为漏洞结论的唯一来源。
注意事项
+ 0 host(s) tested一律先按连通性问题处理,不要当成「资产干净」。- Nikto 是特征匹配扫描器,报出的条目里有相当一部分是 banner 误报,需要人工二次确认。
-Tuning能大幅减少请求数,但也会漏检,正式评估不要为图快裁检查项。- 默认会尝试把 banner 信息提交到 CIRT.net,内网或客户环境建议用
-ask no明确关闭。 - 请求量很大,上面一次小站点就是 8078 个请求,对生产站点务必限速或安排在窗口期执行。