nmap高级应用技巧-NSE

Nmap Scripting Engine(NSE)是Nmap的核心扩展功能,通过Lua脚本实现自动化扫描、漏洞检测、信息收集等高级操作。
2025-08-12

NSE

Nmap Scripting Engine(NSE)是Nmap的核心扩展功能,通过Lua脚本实现自动化扫描、漏洞检测、信息收集等高级操作。

NSE脚本按功能分为12大类,每类对应不同扫描需求

类别核心目的样例脚本典型使用场合
vulnCVE/漏洞快速验证http-vuln-cve2017-5638目标服务版本与已知漏洞匹配
safe只读式安全审计(无破坏性)ssh2-enum-algos建立会话后立即枚举支持的算法
default默认已开启的基础信息采集http-title首次扫描时的“看一眼”
discovery发现服务/子网/资产信息smb-os-discovery内网资产清点、OS 指纹识别
auth认证、密钥与票据处理ssh-hostkey密钥指纹比对、横向渗透准备
brute弱口令爆破http-form-brute对表单类登录口的暴力尝试
exploit利用已确认漏洞取得立足点(需授权)http-vuln-cve2021-41773实战攻击复现、漏洞验证
intrusive高交互操作(易被 IDS 告警)http-slowloris拒绝服务场景模拟/压力测试(慎用!)
malware嗅探后门或恶意软件痕迹http-malware-host威胁狩猎与入侵后取证
version精细化版本指纹http-apache-negotiation为后续补丁或 PoC 匹配做准备
broadcast广播域/多播发现nbstat内网渗透早期:快速识别 NetBIOS 设备
external外链第三方数据源(DNSBL 等)dns-blacklist资产信誉检查、垃圾邮件源或钓鱼域名扫描

常用 NSE 脚本一览

脚本名称主要用途Nmap 一键示例
http-title抓取 HTTP 网站标题nmap --script http-title <target>
https-redirect识别 HTTP→HTTPS 跳转链nmap --script https-redirect -p 80 <target>
http-robtots收集目标 robots/disallow 条目nmap --script http-robots.txt -p 80 <target>
http-headers枚举响应标头与安全策略nmap --script http-headers -p 80 <target>
http-methods检测允许/禁止的 HTTP 方法nmap --script http-methods -p 80 <target>
http-cors测试 CORS、CSRF 漏洞nmap --script http-cors <target>
http-sql-injection基本 SQL 注入探针nmap --script http-sql-injection -p 80 <target>
http-xssed与 xssed.com 集成交叉检测nmap --script http-xssed <target>
smb-os-discovery枚举 SMB 服务器操作系统/域信息nmap --script smb-os-discovery -p 445 <target>
smb-enum-shares列出共享目录(需 guest)nmap --script smb-enum-shares -p 445 <target>
smb-enum-users提取本地/域用户列表nmap --script smb-enum-users -p 445 <target>
smb-vuln-ms17-010探测 EternalBlue(MS17-010)nmap --script smb-vuln-ms17-010 -p 445 <target>
ssh-hostkey抓取并对比公钥指纹nmap --script ssh-hostkey -p 22 <target>
ssh-bruteSSH 账号密码暴力破解(需授权)nmap --script ssh-brute --script-args userdb=users.txt,passdb=pass.txt -p 22 <target>
ssh2-enum-algos列出支持的算法与 KEXnmap --script ssh2-enum-algos -p 22 <target>
http-vuln-cve2023-XXXX按指定 CVE 编号进行漏洞检查(替换 XXXX)nmap --script http-vuln-cve2023-XXXX <target>
ftp-anon检测是否允许匿名登录nmap --script ftp-anon -p 21 <target>
ftp-bounce检查是否允许 FTP Bounce 扫描nmap --script ftp-bounce -p 21 <target>
dns-zone-transfer测试 AXFR(区域传输)泄露nmap --script dns-zone-transfer -p 53 <target>
dns-brute字典爆破子域名nmap --script dns-brute --script-args dns-brute.domain=<domain>
mysql-brute暴力破解 MySQL 实例nmap --script mysql-brute -p 3306 <target>
mysql-audit核对 MySQL CIS/基线配置nmap --script mysql-audit --script-args mysql-audit.username='root',mysql-audit.password='pass123' -p 3306 <target>
ssl-cert解析 TLS 证书详情nmap --script ssl-cert -p 443 <target>
ssl-poodle探测 SSLv3 & POODLE 漏洞nmap --script ssl-poodle -p 443 <target>
vulners基于 Vulners DB 的版本漏洞关联nmap --script vulners -sV <target>
whois-ip查询归属 IP 段的 Whois 信息nmap --script whois-ip <target>
smtp-enum-usersVRFY/EXPN 暴力枚举邮箱账户nmap --script smtp-enum-users -p 25 <target>

自定义脚本

演示.lua
-- myecho.nse
local stdnse = require "stdnse"

description     = [[极简回显脚本:打印自定义消息]]
author          = "YourName"
license         = "GPLv2"
categories      = {"safe"}

-- 任何 TCP 端口都触发
portrule = function(host,port) return port.protocol == "tcp" end

action = function(host,port)
  local msg = stdnse.get_script_args("myecho.msg") or "Hi from custom-NSE!"
  return ("%s -> %s:%d (%s)"):format(msg, host.ip, port.number, port.service or "unknown")
end
# 复制.nse到脚本文件夹
sudo cp myecho.nse /usr/share/nmap/scripts/
nmap --script-updatedb    # 更新索引
# 执行脚本
nmap --script myecho -p22 127.0.0.1
nmap --script myecho --script-args 'myecho.msg=HelloNSE' -p80 scanme.nmap.org
nmap --script '(safe or discovery) and myecho' -p80,443 10.0.2.0/24

总结

NSE 脚本可大幅提升 Nmap 在渗透测试和信息收集中的效率。建议定期关注 Nmap 官方脚本库更新(NSE Docs)以覆盖最新漏洞。