很多人用nmap就只会敲一个
nmap 192.168.1.1,脚本看到几个开放端口就觉得完事了。扫描真正有意思的脚本东西藏在--script这个参数后面。nmap的扫描脚本引擎(NSE)才是它从"端口扫描器"变成"信息收集瑞士军刀"的关键。NSE脚本是脚本用Lua写的。Lua这门语言本身就轻量,扫描嵌入到nmap里不会拖慢扫描速度。脚本脚本能做的扫描事情远超你的想象——从抓取HTTP标题、探测SMB漏洞,脚本到暴力破解弱口令、扫描检测心脏滴血漏洞,脚本全都覆盖了。扫描
脚本分类与实际用法
nmap把脚本按功能分了类,脚本常用的扫描有这几类:
- auth:处理认证相关,比如匿名FTP登录检测
- default:默认就运行的脚本脚本,
-sC等同于--script=default - discovery:信息收集,探测服务版本、枚举用户等
- vuln:漏洞检测,这是最受关注的一类
- brute:暴力破解,支持ftp、ssh、mysql等多种协议
- exploit:利用漏洞,实际渗透中用得少,容易搞崩目标
跑一个最基础的例子:
nmap -sV --script=default 192.168.1.100这条命令会先做版本探测,然后跑所有默认脚本。输出里会多出很多信息——HTTP头、SSL证书详情、SMTP命令响应等等。比裸扫丰富得多。
想针对性地检测某个漏洞,比如MS17-010(永恒之蓝):
nmap -p 445 --script=smb-vuln-ms17-010 192.168.1.100输出会直接告诉你目标是否存在该漏洞。这比翻一堆CVE文档再手动验证快太多了。
几个容易被忽略的细节
脚本的参数可以微调。比如
http-title脚本默认只抓标题,但你可以在脚本参数里控制超时时间:nmap -p 80 --script=http-title --script-args http-title.timeout=10 192.168.1.100暴力破解类脚本需要传字典。以SSH为例:
nmap -p 22 --script=ssh-brute --script-args userdb=users.txt,passdb=passwords.txt 192.168.1.100不传字典的话,脚本会用内置的默认字典,但那个字典很小,命中率不高。实际测试中,自己准备一份针对性的字典效率会高很多。
还有个实用技巧:用通配符批量调用脚本。比如
--script="http-*"会跑所有以http开头的脚本。扫Web服务的时候特别方便,一次性把HTTP相关的信息全拉出来。性能与注意事项
脚本跑多了会明显拖慢扫描速度。尤其是
vuln类脚本,有些会发送大量探测包。在真实环境中,建议先跑discovery类摸清服务,再针对特定端口跑vuln类脚本。别一上来就--script=vuln全开,那等于在对目标进行半暴力探测,容易触发IDS告警。另外,脚本的执行结果依赖
-sV的版本探测。如果nmap没识别出服务版本,很多脚本根本不会触发。所以-sV基本是跑脚本的标配,别省这一步。最后提一点:NSE脚本的更新跟着nmap版本走。老版本nmap的脚本库可能缺少新漏洞的检测脚本。定期更新nmap不是坏事,
nmap --script-updatedb可以刷新脚本数据库。脚本扫描不是万能的,它只是把已知的检测逻辑自动化了。真正有价值的部分在于你怎么组合这些脚本、怎么解读输出、怎么根据结果决定下一步动作。工具本身不会思考,用工具的人才会。
顶: 93492踩: 9221






评论专区