Nmap最强大,最灵活的功能之一NSE脚本引擎
它允许用户自己编写脚本来执行自动化的操作或者扩展Nmap的功能,使用lua语言
基本使用
NSE默认就提供了丰富的脚本库,可以为我们提供诸多Nmap的扩展使用,它的设计初衷主要考虑了一下几个方面:
网络发现
版本侦察
漏洞侦察
后门侦察
漏洞利用
nmap脚本主要分为以下几类,在扫描时可根据需要设置--script=类别这种方式及进行比较笼统的扫描
auth: 负责处理鉴权证书(绕开鉴权)的脚本
broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务
brute: 提供暴力破解方式,针对常见的应用如http/snmp等
default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力
discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等
dos: 用于进行拒绝服务攻击
exploit: 利用已知的漏洞入侵系统
external: 利用第三方的数据库或资源,例如进行whois解析
fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware: 探测目标机是否感染了病毒、开启了后门等信息
safe: 此类与intrusive相反,属于安全性脚本
version: 负责增强服务与版本扫描(Version Detection)功能的脚本
vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067
基本命令行使用
default类别为使用默认脚本扫描,我们可以使用命令行--script=default或者使用-sC来应用默认扫描脚本,像下面这样:
nmap -Pn -sC 47.106.80.112
因为NSE脚本是平行执行的,所以我们还可以多参数同时进行扫描,使用英文状态下的逗号,进行分割
nmap -Pn --script=default,fuzzer,vuln 47.106.80.112
也可以直接是lua脚本的文件名或者表达式之类的值,一样的都用逗号进行分割
多参数同时进行扫描时,基于表达式>分类>文件名/文件夹名这样的优先级排序,进行脚本扫描
NSE表达式
NSE的表达式要由双引号包裹,为了避免与shell冲突
比如说这样四条命令:
nmap --script "http-*" #可以与开头为 http- 的脚本匹配,例如 http-auth / http-open-proxy
nmap --script "not brute" # 可以与不是 brute 分类下的脚本进行匹配
nmap --script "safe or default"