NSE 是什么
NSE(Nmap Scripting Engine)用 Lua 脚本把扫描从“端口是开的吗”扩展到服务识别、配置核查与漏洞探测。脚本按类别归组(auth、broadcast、default、discovery、dos、exploit、external、fuzzer、intrusive、malware、safe、version、vuln),类别决定了它的噪音量与风险,选脚本本质上是选择对目标的影响级别。
基本信息
| 适用平台 | Nmap 7.x,脚本目录通常为 /usr/share/nmap/scripts |
|---|---|
| 调用语法 | --script <脚本名|类别>,参数用 --script-args |
| 自检入口 | --script-help 看说明,--script-updatedb 更新索引 |
| 安全边界 | safe/discovery 低风险,vuln/intrusive/exploit 需单独授权 |
典型使用场景
- 用 ssl-cert、http-title 这类 safe 脚本补充服务识别信息
- 用 smb2-security-mode 之类的核查脚本确认配置现状
- 对自建测试环境做 vuln 类脚本的漏洞验证
- 用 broadcast 类脚本在授权内网段发现设备分布
- 编写与调试自定义脚本以覆盖内部系统的特殊协议
常用调用示例
常用调用示例
nmap --script-help smb2-security-mode # 先读脚本说明与依赖,再决定是否执行
nmap -sV --script 'default and safe' -p 80,443 10.0.10.5 # 只跑低风险类别,适合生产网段
nmap --script ssl-cert,ssl-enum-ciphers -p 443 10.0.10.5 # 证书与套件枚举,取证用
nmap --script smb2-security-mode -p 445 10.0.10.0/24 # SMB 签名现状核查脚本类别与风险
| 类别 | 用途 | 风险评估 |
|---|---|---|
| safe | 无侵入信息收集 | 生产网段可用,仍建议限速 |
| discovery | 资产与服务发现 | 流量较明显,注意网段范围 |
| version | 服务版本识别 | 常规,配合 -sV 使用 |
| vuln | 漏洞探测 | 可能触发告警与防护,需报备 |
| intrusive | 主动注入类探测 | 可能影响服务,生产禁用 |
| dos/exploit | 压力与利用类 | 生产环境绝对禁止 |
--script=all 会把 dos 与 exploit 类脚本一并纳入,这是最常见的事故来源;需要全类别时改用明确组合,例如 'default or safe or discovery'。
脚本结果只说明“现象命中”,不等于漏洞成立:读脚本源码确认它的判据是什么,再决定报告里写确认、疑似还是无法验证。
脚本执行依赖端口探测结果:只写 --script 而没开 -sV 时,部分脚本会因为缺少服务信息而跳过。需要更完整的服务判定时适当提高版本探测强度,代价是扫描时间与流量上升。