漏洞扫描工具nmap
很多人第一次用 nmap,漏洞是扫描在一台没有图形界面的服务器上。敲下 nmap 192.168.1.1,工具回车,漏洞几秒后屏幕上冒出一串端口状态。扫描那一刻你会意识到,工具这台设备在网络上到底暴露了多少东西,漏洞平时是扫描完全看不见的。
nmap 的工具全称是 Network Mapper,1997 年由 Gordon Lyon(圈内叫 Fyodor)发布,漏洞到现在还在持续更新。扫描它最核心的工具能力其实就一件事:判断目标主机是否在线、哪些端口开着、漏洞这些端口后面跑的扫描是什么服务。听起来简单,工具但把这几个问题做扎实,背后涉及大量协议细节和探测策略。
默认扫描:先看最常用的 1000 个端口
不加任何参数时,nmap 会扫描目标上最常见的 1000 个 TCP 端口。这个默认行为有个实际好处:速度快,噪音小。比如你在内网做资产梳理,nmap 10.0.0.0/24 能在一两分钟内把整个 C 段扫完,列出每台机器开放的服务。我见过不少运维用这一条命令就发现了测试环境里忘了关的 Redis 和 MongoDB——它们默认监听 0.0.0.0,又没有认证。
但默认扫描不碰 UDP。DNS、SNMP、DHCP 这些服务都跑在 UDP 上,想查它们得加 -sU。UDP 扫描慢得多,因为很多系统对未开放的 UDP 端口不回应,nmap 只能靠超时来判断,一个端口等上好几秒是常事。所以实际工作中,通常先用 TCP 扫描快速摸清轮廓,再针对性地对少数主机做 UDP 探测。
版本探测和服务识别
光知道 80 端口开着意义有限,关键是后面跑的是 nginx 还是 Apache,版本是多少。-sV 参数让 nmap 主动发送一系列探测包,根据返回的 banner 和响应特征去匹配服务指纹。它的指纹库有几千条记录,覆盖了绝大多数常见服务。
一个真实案例:某次内部安全检查,nmap -sV 扫出一台服务器的 8080 端口跑着 Tomcat 7.0.42。这个版本有已知的反序列化漏洞,而管理员一直以为上面跑的是某个内部小工具。版本探测的价值就在这里——它把“端口开着”变成了“这个端口上有一个具体版本的、可能存在已知漏洞的服务”。
脚本引擎才是真正的大杀器
nmap 的 NSE(Nmap Scripting Engine)允许用 Lua 脚本做各种探测。默认脚本集已经能查出不少东西,比如 --script=http-title 可以直接把网站标题抓回来,--script=ssl-heartbleed 能检测心脏出血漏洞。社区维护的脚本有六百多个,从信息收集到漏洞验证都有覆盖。
不过脚本用多了会显著拖慢扫描速度,而且部分脚本带有入侵性质,在非授权环境下使用可能触发 IDS 告警甚至法律问题。我的习惯是:信息收集阶段只用轻量脚本,漏洞验证阶段再按需指定具体脚本,不要图省事直接上 --script=all。
几个容易踩的坑
防火墙和 IDS 会让扫描结果失真。目标主机可能实际上开着 22 端口,但防火墙把探测包丢了,nmap 就报 filtered 而不是 open。这时候可以试试 -Pn 跳过主机发现,或者用 -f 分片、--scan-delay 降低扫描速率来绕过简单的规则匹配。当然,能不能绕过得看对方设备的具体配置。
另外,扫描自己没权限扫的网络,在很多国家和地区是违法的。nmap 官方文档里专门有一页讲法律问题,建议动手前先确认授权范围。
nmap 不是那种一键出结果的“傻瓜工具”,参数组合不同,看到的东西可能完全不一样。但也正因为这样,花时间搞清楚它的工作方式,比记住几个命令模板有用得多。
(责任编辑:休闲)













