nmap 扫描漏洞
nmap 扫描漏洞
很多人把 Nmap 当成一个“端口扫描器”,扫完 22、漏洞80、扫描443 就完事了。漏洞但真正让它在渗透测试里站稳脚跟的扫描,是漏洞 NSE——Nmap 脚本引擎。这东西能直接把一个端口探测工具变成漏洞探测的扫描瑞士军刀。我见过太多新手拿着 nmap -sV 的漏洞结果就以为掌握了目标,实际上连 NSE 的扫描默认脚本集都没跑过。
NSE 脚本分好几种,漏洞auth、扫描broadcast、漏洞brute、扫描vuln……其中 vuln 类别是漏洞专门用来发现漏洞的。你不需要自己写 PoC,扫描官方和社区维护的脚本已经覆盖了常见的老漏洞。比如 smb-vuln-ms17-010,永恒之蓝那个。一条命令:
nmap -p 445 --script smb-vuln-ms17-010 192.168.1.100 如果目标没打补丁,你会直接看到 VULNERABLE 的状态行。这比拿 Metasploit 去试要轻量得多,而且不容易触发 IDS 的明显告警——前提是你别用 -A 那种大张旗鼓的选项。
不过这里有个坑。Nmap 的漏洞脚本并不是“利用脚本”,它只做检测。很多脚本是通过版本号比对或者发送特定探测包来判断的。比如 http-vuln-cve2017-5638(Struts2 那个),它会发一个带有恶意 Content-Type 的请求,看响应里有没有异常。但有些服务器会返回 200 却根本没漏洞——脚本误报率不低。我习惯跑完 vuln 类别后,再手动用 curl 或浏览器验证一遍。别偷懒。
另一个实战细节:扫描时机。如果你在办公网里扫内网服务器,-T4 通常没问题。但如果是跨公网扫,-T2 甚至 -T1 更稳妥,否则丢包会让脚本超时,结果里一堆 ERROR。我试过扫一台日本 VPS,-T4 下 smb 脚本全挂,降到 -T2 才出结果。Nmap 的默认超时是 5 分钟,你可以用 --script-timeout 单独调。
还有 --script-args 这个参数。有些脚本需要额外参数才能工作。比如 http-brute 要指定用户名字典和密码字典:
nmap -p 80 --script http-brute --script-args userdb=users.txt,passdb=pass.txt 10.0.0.1 但注意,暴力破解类脚本会触发账户锁定策略。生产环境别乱搞。我见过有人拿 ssh-brute 扫客户跳板机,直接把运维的账号锁了半小时,差点出事故。
“Nmap 的漏洞扫描不是自动化渗透。它更像一个探针,告诉你哪里有裂缝,但撬开裂缝还得靠人。”——这是我刚入行时导师的原话,现在越来越觉得对。
最后说一个容易被忽略的点:--script-updatedb。Nmap 自带的脚本数据库可能过时,尤其是你从 apt 装的版本。跑 nmap --script-updatedb 会从 nmap.org 拉最新的脚本索引。我上个月扫一台老旧的 Jenkins,默认脚本没报,更新数据库后 http-vuln-cve2018-1000861 直接命中。那台机器还在跑 2.138 版本,远程代码执行漏洞,管理员完全不知道。
所以别只把 Nmap 当端口扫描器。它的漏洞检测能力被严重低估了。当然,它不能替代 Nessus 或 OpenVAS,但胜在轻、快、可定制。你甚至可以把几个 vuln 脚本串起来,写成自己的扫描清单。下次扫内网,试试 --script vuln,你会回来谢我的。