打开 nikto 官网(cirt.net/Nikto2)的第一眼,你会觉得这页面像是2005年某个安全极客随手搭的。没有花哨的动效,没有渐变按钮,连个像样的Logo都欠奉。但就是这么一个朴素的站点,维护着一款到今天仍然活跃在渗透测试一线的小工具——Nikto。
Nikto 是什么?一个开源的Web服务器扫描器。它不干别的,就专门盯着Web服务器找毛病。你给它一个域名或IP,它就开始发请求,然后根据返回的响应判断:这个服务器版本是不是有已知漏洞?有没有危险的CGI脚本暴露在外?HTTP头配置是不是有问题?目录里有没有不该让人看到的东西?
官网首页最显眼的位置放着一行版本号和更新日期。这很重要。Nikto 的数据库——也就是它用来匹配服务器特征和已知问题的那个库——更新频率相当高。你如果隔几个月不更新,扫出来的结果可能就不太准了。官网上直接给了命令:nikto -update。简单粗暴,不跟你废话。
官网的文档区写得也很直接。没有长篇大论的概念铺垫,上来就是用法示例。最基本的:
nikto -h http://example.com 就这么一行。它会输出一大堆东西:服务器类型、允许的HTTP方法、可能存在的危险文件、Cookie设置问题等等。输出格式不算好看,但信息密度很高。你扫一个小型站点,几秒钟就能拿到几十条发现。
官网还列了一些常用参数。比如 -p 指定端口,-ssl 强制走HTTPS,-Tuning 用来控制扫描类型。Tuning 这个参数挺有意思,它用数字和字母来分类扫描项——1是文件,2是配置错误,3是信息泄露,4是注入相关……你可以只扫某一类,也可以组合。实际用的时候,很多人会加 -Tuning 123b 这种,跳过那些又慢又容易误报的检查项。
我自己的习惯是配合 -o 参数把结果输出到文件。Nikto 支持多种格式,HTML、CSV、XML 都行。扫完一个目标,报告直接丢给团队里其他人看,省得口头转述。
Nikto 本身代码量不算大,真正值钱的是它那个 db_tests 文件。里面存了几千条针对不同服务器、不同路径、不同文件的检测规则。这个数据库从2000年代初一直积累到现在,很多老旧的漏洞特征还在里面。你拿它去扫一台还在跑 Apache 1.3 的机器,一抓一个准。
官网有个页面专门讲怎么提交新的检测规则。社区里的人发现某个CMS的奇怪路径,或者某个IoT设备Web界面的默认凭据,就会写成Nikto的规则提交上去。这种模式让它的覆盖面一直在扩大,虽然速度不算快。
官网自己也没把Nikto吹成银弹。文档里明确说了,它不替代人工测试,也不保证覆盖所有漏洞。它就是个自动化扫描器,帮你做第一轮的快速筛查。扫出来的东西需要你手动验证,误报率不低。尤其是那些基于版本号匹配的检测项,服务器可能早就打了补丁但没升级版本号,Nikto照样会报。
另外它扫得不算快。默认配置下,对一个大站点跑完整扫描可能要几十分钟。加 -Tuning 限制范围能提速,但也就那样。跟现在那些基于Go写的并发扫描器比,Nikto的速度确实落后了。可它的规则库深度和覆盖面,很多新工具还真比不了。
官网底部有个捐赠链接,指向作者Chris Sullo的个人页面。这工具从2000年发布到现在,二十多年了,还在更新。没有商业公司背书,没有融资,就靠社区提交规则和零星捐赠撑着。你去看它的GitHub仓库,提交记录不算频繁,但每隔一段时间总有人推点新东西上去。
说实话,现在渗透测试工具满天飞,Nikto显得有点老派。但每次我拿到一个新目标,第一轮信息收集的时候还是会习惯性敲一行 nikto -h。它快、直接、不绕弯子。扫出来的东西未必条条有用,但总能给你一些线索,告诉你接下来该往哪个方向深挖。官网那种粗糙的页面风格,反倒跟这工具的气质挺搭的——不装,能用就行。