游客发表

nmap漏洞扫描

发帖时间:2026-10-17 05:11:41

去年冬天,漏洞我帮一个朋友看他公司刚上线的扫描测试服务器。他用nmap扫了一遍端口,漏洞说“没啥问题,扫描就开了80和443”。漏洞我让他把命令贴出来,扫描一看:nmap -sS 192.168.1.100。漏洞这行命令只做了TCP SYN扫描,扫描连服务版本都没探测,漏洞更别说漏洞了。扫描他以为nmap能直接告诉你“这台机器有CVE-2021-44228”,漏洞其实默认扫描根本不碰漏洞库。扫描

nmap本身不是漏洞漏洞扫描器,它是扫描个端口和服务发现工具。但它的漏洞NSE(Nmap Scripting Engine)把这件事变得可能。NSE有超过600个脚本,其中一部分专门用来检测已知漏洞。比如http-vuln-cve2017-5638会去测Struts2的远程代码执行,smb-vuln-ms17-010就是那个“永恒之蓝”的检测脚本。这些脚本不是靠猜,它们会发特定的探测包,看返回的响应特征。

怎么用?一个典型的命令长这样:

nmap -sV --script vuln 192.168.1.100

-sV做版本探测,--script vuln会加载所有归类在“vuln”类别下的脚本。但这里有个坑:直接跑vuln类别可能很慢,而且有些脚本会触发目标系统的防护机制。我一般先跑--script-discovery摸清情况,再针对性选脚本。比如只测SMB漏洞:

nmap -p 445 --script smb-vuln-* 192.168.1.100

结果怎么看?脚本输出会直接挂在端口下面。如果看到VULNERABLE,那就是真有问题。但别高兴太早——误报是常事。有一次我用http-vuln-cve2014-3704扫一台Drupal站点,脚本报了漏洞,结果上去一看,版本是7.32,但管理员打了补丁,只是banner没改。nmap的脚本大多基于版本号或特定响应字符串,不是真正的利用验证。

另一个常见误区是拿nmap去扫外网。我试过用--script vuln扫一个公网IP,跑了四十分钟,最后被机房封了IP。NSE脚本发包频率不低,有些脚本还会尝试暴力破解(比如http-brute),在真实网络里很容易触发IDS。内网用用还行,外网得加--script-timeout和--max-rate控制节奏。

如果你想要更“像样”的漏洞扫描,nmap可以配合vulners脚本。这个脚本会把探测到的服务版本发给vulners.com的API,返回CVE列表。命令是:

nmap -sV --script vulners 192.168.1.100

但需要API key,免费版有限额。我实际用下来,它比vuln类别快,但依赖版本号准确性。如果服务banner被改过,结果就偏了。

说个真实案例。某次内网扫描,一台Windows Server 2008的445端口,smb-vuln-ms17-010脚本返回了VULNERABLE。我手动用Metasploit的ms17_010_eternalblue模块验证,确实能打。但同一网段另一台机器,脚本也报漏洞,结果打过去没反应——后来发现那台机器装了杀软,拦截了利用流量。nmap的脚本只检测漏洞是否存在,不关心利用是否成功。

最后说个容易忽略的点:nmap的漏洞脚本更新不算快。CVE-2023-44487(HTTP/2 Rapid Reset)出来的时候,nmap的NSE库过了几周才有对应脚本。所以别把nmap当唯一手段,它适合快速排查已知的、有公开POC的老漏洞。真要全面评估,还是得用Nessus、OpenVAS或者自己写PoC。但日常运维里,一条nmap --script vuln能帮你省下不少翻CVE列表的时间。

    热门排行

    友情链接