利用nmap进行漏洞扫描 凌晨两点,利用漏洞我盯着屏幕上那台开了3389端口的进行Windows Server 2003,心里直打鼓。扫描这是利用漏洞客户内网里一台老掉牙的财务服务器,系统补丁停在2014年。进行nmap刚告诉我,扫描它开放了MS17-010——就是利用漏洞那个让WannaCry一夜之间瘫痪全球的永恒之蓝漏洞。我没急着用exploit,进行先让nmap把漏洞细节全量拉出来再说。扫描 nmap不是利用漏洞专门的漏洞扫描器,但它的进行NSE脚本引擎让它能兼职干这活。你不需要装Nessus或OpenVAS,扫描一条命令就能摸清目标的利用漏洞大致弱点。比如最基础的进行:nmap -sV --script=vuln 192.168.1.105。这条命令会先做版本探测,扫描再调用所有标记为vuln的脚本。输出结果里,CVE编号、风险等级、甚至修复建议都会列出来。说实话,比某些商业扫描器的报告还直白。 但你别指望它像Metasploit那样直接给你shell。nmap的漏洞检测更多是“确认存在”,而不是“利用成功”。它通过特征匹配——比如检查SMB协议中特定的返回字段、比对SSL证书的指纹、或者发送畸形包看响应差异。这种方式的误报率不算低。我遇到过一台装了假SSH服务的蜜罐,nmap报了一堆CVE,实际上全是伪造的诱饵。 真正用起来,你得学会挑脚本。默认的--script=vuln会跑一大堆,又慢又吵。我习惯先做端口扫描,锁定目标服务,再精准调用对应脚本。比如看到开了80端口,就只跑--script=http-vuln-*;看到443,就试--script=ssl-*。有一次我扫描一个内部OA系统,nmap报了CVE-2017-12615(Tomcat任意文件写入),但实际环境是经过反向代理的,根本利用不了。这就是为什么扫描结果只能当参考,不能当结论。 还有个坑——nmap对某些漏洞的检测逻辑太死板。它检测MS08-067时,靠的是检查Windows版本和补丁号,而不是实际验证漏洞是否可触发。如果系统装了某些第三方安全补丁,nmap照样报漏洞,但实际攻击会失败。反过来,有些漏洞它检测不到,比如需要多次交互才能确认的Web应用逻辑漏洞。这时候你得结合nikto或sqlmap去补盲区。 说个实际案例。上个月帮朋友审计一个小型电商站,nmap扫出目标用了OpenSSH 7.2p2,直接报了CVE-2016-6210(用户枚举漏洞)。我顺手用脚本验证,发现SSH服务确实允许通过时间差异枚举用户名。但进一步测试,系统限制了登录失败次数,实际利用成本很高。nmap只是帮你开了个头,后续的深入测试还得靠经验和工具组合。 最后提醒一句:扫描前确认授权。我见过有人拿nmap扫学校机房,结果被网警报案的。nmap本身是合法工具,但用错地方就是另一回事。扫描时也注意流量大小,--min-rate 5000这种参数会让防火墙立刻报警,不如默认慢速模式稳当。毕竟漏洞扫描的目的是发现风险,而不是给自己制造风险。 工具再强,也只是个起点。nmap能告诉你“这里有洞”,但洞有多深、能不能爬进去、里面有什么,还得靠你自己去试。别迷信扫描结果,也別轻视它——至少它让我在凌晨两点,知道该从哪里下手。 |