游客发表
直接说命令:nmap --script vuln <目标>。漏洞这条命令跑下去,脚本nmap 会把内置的扫描漏洞检测脚本一股脑全甩到目标上。我见过太多人只敲 nmap -sV 就以为万事大吉,命令结果漏掉一堆高危漏洞。漏洞说实话,脚本--script vuln 才是扫描真正让 nmap 从“端口扫描器”变成“轻量级漏扫工具”的那把钥匙。
nmap 的命令脚本库按类别存放在 /usr/share/nmap/scripts/ 下,vuln 这个类别大概有 150 多个脚本。漏洞它们检测的脚本东西五花八门:SMB 的永恒之蓝(ms17-010)、HTTP 的扫描 Shellshock、SSL 的命令 Heartbleed、还有各种默认口令、漏洞目录遍历、脚本SQL 注入的扫描探测。比如 smb-vuln-ms17-010.nse 这个脚本,跑一次就能告诉你目标有没有打补丁。我上次在内网一台老 Server 2008 上试,三秒钟出结果——存在漏洞。那台机器后来被我们隔离了,运维还一脸懵。
但别高兴太早。--script vuln 不是万能的,它只做“已知指纹匹配”和“简单 PoC 验证”,不会做深度利用。有些脚本误报率不低,比如 http-vuln-cve2017-5638 在非 Struts2 的服务器上也可能报“疑似”。所以扫完必须手工复核,别直接拿报告去交差。
全量跑 vuln 太吵,流量大、时间长,还容易被 WAF 封。我习惯先摸清服务,再针对性调用。比如发现 445 端口开着,直接:
nmap -p 445 --script smb-vuln-ms17-010,smb-vuln-ms08-067 192.168.1.100 两个脚本,几秒钟完事。要是 HTTP 服务,就用:
nmap -p 80,443 --script http-vuln-* 目标域名 注意星号通配符——shell 里要加引号或者转义,不然会被本地 shell 先展开。我吃过这个亏,命令直接报错,还以为是 nmap 的问题。
还有个小技巧:--script-args 可以传参。比如 http-vuln-cve2014-3704(Drupalgeddon)需要指定路径,就写 --script-args http-vuln-cve2014-3704.uri=/admin。不传的话脚本可能跑空。
默认情况下,漏洞脚本扫描比普通端口扫描慢得多。每个脚本都有超时和重试,网络差的时候能卡到你怀疑人生。加 -T4 能提速,但别用 -T5——丢包严重,漏报率飙升。我一般这么组合:
nmap -sV -T4 --script vuln --script-timeout 30s -oX scan.xml 目标 --script-timeout 设成 30 秒,避免某个脚本卡死拖垮整个扫描。-oX 输出 XML,方便后面用 xsltproc 转成 HTML 报告。别小看这个,客户要报告的时候你现写脚本解析文本输出,那才叫痛苦。
隐蔽性方面,--script vuln 会发大量特征明显的请求,IDS 一抓一个准。真要隐蔽,不如用 --script 挑一两个脚本,配合 --scan-delay 慢慢来。但内网渗透里,速度往往比隐蔽重要——时间窗口就那么点。
第一,--script vuln 不会自动开启版本探测。有些漏洞脚本依赖 -sV 的结果来决定跑不跑。所以命令里最好带上 -sV,否则脚本可能直接跳过。
第二,Windows 目标上 SMB 相关脚本经常因为凭据问题失败。加 --script-args smbusername=administrator,smbpassword=xxx 能提高成功率。没凭据?那就只能靠 smb-vuln-ms17-010 这类不需要认证的脚本碰运气。
第三,别在 production 环境直接跑全量 vuln。有些脚本会触发服务崩溃——比如老版本的 http-vuln-cve2015-1635 可能让 IIS 假死。测试环境先验证,生产环境只跑确认无害的脚本。
最后说个真实案例。某次外部评估,客户只给了 IP 段。我跑 nmap -sV --script vuln -p-,扫了六个小时,报告里 30 多个“漏洞”。手工验证后发现只有 4 个是真的,其余全是版本误判或者需要特定条件才能触发。所以——工具输出永远只是起点,人才是终点。
友情链接