Nmap高级应用技巧-NSE
导言
在日常攻防演练与企业资产巡检中,Nmap 不仅仅是发现开放端口的利器,更是可以通过 NSE 脚本引擎将端口信息转化为可操作情报、漏洞证据与合规数据的统一平台。本文将系统地介绍 Nmap Scripting Engine(NSE),让你把 Nmap 变成一把真正的“瑞士军刀”。
正文
什么是NSE
-
• Nmap Scripting Engine(NSE)是Nmap的核心扩展功能,通过Lua脚本实现自动化扫描、漏洞检测、信息收集等高级操作。 -
• 在渗透评估、红蓝对抗或日常资产普查中,一条命中的 CVE、一个不正确的 CORS 设置,往往就能决定攻与守的胜负。Nmap 早已不只是“端口扫描器”——其内置的 NSE(Nmap Scripting Engine)把 Lua 脚本跑在目标之上,可以在几分钟内完成漏洞初筛、口令爆破、配置审计、后门嗅探等百余种任务。 -
• 此次我们梳理部分脚本与自定义方法,供你在下一次测试前“按图索骥”。
功能
-
• NSE脚本按功能分为12大类,每类对应不同扫描需求
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
常用 NSE
-
• 常用脚本及示例
|
|
|
|
| http-title |
|
nmap --script http-title <target> |
| https-redirect |
|
nmap --script https-redirect -p 80 <target> |
| http-robots |
|
nmap --script http-robots.txt -p 80 <target> |
| http-headers |
|
nmap --script http-headers -p 80 <target> |
| http-methods |
|
nmap --script http-methods -p 80 <target> |
| http-cors |
|
nmap --script http-cors <target> |
| http-sql-injection |
|
nmap --script http-sql-injection -p 80 <target> |
| http-xssed |
|
nmap --script http-xssed <target> |
| smb-os-discovery |
|
nmap --script smb-os-discovery -p 445 <target> |
| smb-enum-shares |
|
nmap --script smb-enum-shares -p 445 <target> |
| smb-enum-users |
|
nmap --script smb-enum-users -p 445 <target> |
| smb-vuln-ms17-010 |
|
nmap --script smb-vuln-ms17-010 -p 445 <target> |
| ssh-hostkey |
|
nmap --script ssh-hostkey -p 22 <target> |
| ssh-brute |
|
nmap --script ssh-brute --script-args userdb=users.txt,passdb=pass.txt -p 22 <target> |
| ssh2-enum-algos |
|
nmap --script ssh2-enum-algos -p 22 <target> |
| http-vuln-cve2023-XXXX |
|
nmap --script http-vuln-cve2023-XXXX <target> |
| ftp-anon |
|
nmap --script ftp-anon -p 21 <target> |
| ftp-bounce |
|
nmap --script ftp-bounce -p 21 <target> |
| dns-zone-transfer |
|
nmap --script dns-zone-transfer -p 53 <target> |
| dns-brute |
|
nmap --script dns-brute --script-args dns-brute.domain=<domain> |
| mysql-brute |
|
nmap --script mysql-brute -p 3306 <target> |
| mysql-audit |
|
nmap --script mysql-audit --script-args mysql-audit.username='root',mysql-audit.password='pass123' -p 3306 <target> |
| ssl-cert |
|
nmap --script ssl-cert -p 443 <target> |
| ssl-poodle |
|
nmap --script ssl-poodle -p 443 <target> |
| vulners |
|
nmap --script vulners -sV <target> |
| whois-ip |
|
nmap --script whois-ip <target> |
| smtp-enum-users |
|
nmap --script smtp-enum-users -p 25 <target> |
自定义脚本
-
• 这里演示自定义脚本最基本的用法
-- 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)以覆盖最新漏洞。
2分钟实战演示
-拿到一个内网 C 段:
sudo nmap -sS -sV -O --script="vuln and safe" -p21,22,80,443,445,3389,3306 10.10.10.0/24
-
• 一次扫完所有“低危+漏洞”脚本,输出里若出现 smb-vuln-ms17-010 返回 VULNERABLE,可直接转 EternalBlue 后渗透。 -
• 组合写法 vuln and safe 表示 “只运行同时属于 vuln 和 safe 的脚本”(避免高危脚本)。只做“无害”探测,不会 DoS、不会留下大量日志。
外网 Web 资产:
nmap --script=http-title,http-headers,http-cors,http-sql-injection --script-args="http.useragent='Mozilla/5.0'" -p80,443 targets.txt
-
• 使用脚本扫描 Web 输入漏洞,若 http-sql-injection 告警,再配合 Burp 深入利用即可。
使用技巧:
按场景选类别——先 safe 再 intrusive,先 discovery 后 exploit;
常更新脚本库——nmap --script-updatedb 每次开打前跑一遍,第一时间跟上最新漏洞披露。
总结
NSE 让 Nmap 从“发现者”跃升为“执行者”:一键即可批量验证漏洞、枚举资产、弱口令检测,大大的节省网安工作者的时间,可以将更多的时间留给防御加固!




