|
nikto扫完一个目标,输出结果往往比预想的长。别急着翻日志,先看开头那几行——版本号、目标IP、扫描时间,这些是废话,但后面紧跟的“OSVDB”编号才是关键。有一次我扫一个老旧的论坛服务器,跳出来一条OSVDB-3092,指向的是IIS的ASP源码泄露漏洞。管理员坚称服务器是Linux,结果一查,前端反代后面真挂着一台Windows 2003,那台机器上还跑着phpMyAdmin,密码是admin。nikto没直接黑进去,但它把侦察阶段该干的活全干了。 这工具说白了就是个“漏洞字典冲锋队”。它不像nessus那样做深度验证,也不像metasploit那样直接拿shell。nikto就是噼里啪啦发几千个HTTP请求,把响应头、页面内容、文件路径跟内置的数据库比对。数据库里有六千多条已知威胁特征,从老掉牙的目录遍历到新版中间件的不安全配置。它甚至能识别出服务器上装了哪些危险插件——比如某个WordPress站点带着一个长期不更新的主题,nikto会直接告诉你那个主题有个SQL注入漏洞,CVE编号都给出来。 但别指望它百发百中。nikto的误报率不低,尤其是碰上自定义404页面或者做了请求频率限制的站点。有一次扫一个金融系统,它报了一堆“可能的XSS”,我点开每个URL去验证,全是它把参数值反射到错误页面上造成的假象。真正有用的结果是它扫出后台目录“/admin/login.php”没有做IP白名单,而且登录接口没加验证码。那个发现不是nikto主动报的“漏洞”,而是它在响应里标注了“HTTP 200”,配合“/admin”路径的存在,我判断出后台可以直接访问。工具给线索,判断还得靠人。 用nikto有个反直觉的点:扫描线程数设太高反而容易漏报。默认10个并发,改成50个,有些服务器会直接断开连接或者返回超时,nikto会把这些请求标记为“错误”而不是“无漏洞”。还有一次,目标站点启用了mod_security,nikto每发一个恶意payload请求,WAF就返回403,结果整个扫描报告里全是403,真正的漏洞全被WAF挡在响应之外了。这时候得加“-evasion”参数,用编码或者路径混淆绕过检测——但这也意味着攻击性更强,授权边界要搞清楚。 它的输出格式比很多商业工具实在。默认的txt格式适合人眼扫,但真要写报告,用“-Format csv”导出,每一行对应一个发现,时间戳、方法、路径、状态码、描述全给齐。我习惯把csv丢进excel,按状态码排序,先看200和302的条目,那些是实际可达的资源。500和403的条目往往藏着有趣的细节,比如某个“/server-status”返回403,说明Apache的mod_status开了但被限制访问,换个IP试试可能就开了。 nikto更新得挺勤,但别指望它覆盖最新漏洞。它强在“已知的旧问题”——那些被运维遗忘的备份文件、测试脚本、默认账号。我扫过一家电商站点,nikto报了个“/test.php”存在,打开一看是phpinfo(),直接暴露了绝对路径和禁用的函数列表,后来顺着这个信息找到了隔壁目录的备份包。这种老派发现方式,恰恰是很多自动化漏扫工具不屑于做的。 跑完一次nikto,时间不长,几分钟而已。但那些输出条目背后是无数个需要人工确认的疑点。工具给你画了一个圈,圈里可能有猎物,也可能只是风吹草动。我的习惯是,每次扫完都把结果存成带日期的文件,三个月后再扫一次,对比差异。新增的条目往往就是这段时间别人留下的痕迹——要么是管理员装了新东西,要么是有人比你更早摸进来过。nikto不聪明,但它是个诚实的哨兵,你问它什么,它答什么,不撒谎,也不夸大。 |