Nikto扫描结果分析 Nikto扫出来的描结东西,第一眼看上去像一堆乱码。果分满屏的描结+号开头,各种OSVDB编号,果分还有那些让人摸不着头脑的描结路径。很多人扫完就扔一边了,果分觉得这工具太吵,描结误报多。果分但真正有价值的描结信息,往往就藏在这些"噪音"里。果分 上周帮朋友看一个站点,描结Nikto跑完扔过来一份报告。果分我翻到中间一段,描结发现它标记了/admin/config.php.bak这个路径。果分朋友说这文件早删了。描结我让他直接访问,浏览器里弹出来一个下载框——配置文件还在,里面数据库密码明文躺着。Nikto的误报?不,是它比你更记得你曾经上传过什么。 Nikto的核心逻辑是模式匹配加版本比对。它不搞漏洞利用,只负责告诉你"这里有个东西,看起来不太对"。比如它发现Server: Apache/2.4.29,就会去查这个版本有没有已知CVE。但这里有个坑:很多服务器改了banner,或者用了反向代理,Nikto拿到的版本号可能是假的。我见过一个Nginx站点,Nikto报了一堆Apache的漏洞,纯粹因为运维在配置里写错了server_tokens。所以看结果第一步:确认banner真实性。 那些OSVDB编号现在基本过时了,Nikto的数据库更新慢,很多条目指向的是2010年前后的老漏洞。但这不代表没用。它标记/phpmyadmin/可访问,你点进去看看,可能是个没改默认密码的phpMyAdmin。它说/backup/目录列表开启,你打开一看,整个数据库的SQL文件排在那儿。Nikto给的是线索,不是结论。 我习惯把Nikto结果分三类处理。第一类:直接能验证的。比如它说/.git/HEAD可读,curl一下就知道真假。第二类:需要结合其他信息的。它报X-Frame-Options header missing,这算低危,但如果站点有敏感操作页面,点击劫持就是实打实的风险。第三类:纯噪音。比如它总爱报HTTP TRACE method enabled,现代浏览器早就不支持TRACE了,除非你做安全审计,否则这条可以划掉。 有个细节值得注意:Nikto的-Tuning参数能过滤扫描类型。默认全开,报告长得吓人。我一般用-Tuning 123b,只扫文件、配置和披露类问题。这样出来的结果干净很多,误报率直线下降。很多人不知道这个参数,扫完被几百条结果劝退,其实调整一下能省一半时间。 再说说那些+ /icons/、+ /manual/之类的默认路径。Apache装完就有这些目录,Nikto每次都报。但如果你发现/manual/能访问,而且里面藏着mod_ssl的旧文档,结合服务器版本,可能推断出运维很久没打补丁了。单个信息没意义,串起来就是故事。 Nikto最实用的场景其实是快速摸底。拿到一个目标,先跑一遍,看看有没有备份文件泄露、目录列表、默认后台。这些低垂的果实,往往比那些花哨的远程溢出更致命。我见过太多站点,防火墙配得严严实实,结果/www.zip直接能下载,源码里硬编码着AWS密钥。 最后说个反直觉的:Nikto报的漏洞数量跟站点安全性不成正比。一个老旧的WordPress站点可能报出50条,但每条都是已知插件漏洞,实际风险取决于插件是否启用。一个定制开发的Java应用可能只报3条,但其中一条是/api/v1/users?debug=true,直接返回所有用户数据。分析Nikto结果,得带着"这站点是干什么的"这个前提去看。脱离业务谈漏洞,都是耍流氓。 |