--- title: nmap高级应用技巧-NSE description: Nmap Scripting Engine(NSE)是Nmap的核心扩展功能,通过Lua脚本实现自动化扫描、漏洞检测、信息收集等高级操作。 date: 2025-08-12 img: https://img.lijue.net/20250812130604330.png navigation: icon: simple-icons:openstreetmap --- ### NSE Nmap Scripting Engine(NSE)是Nmap的核心扩展功能,通过Lua脚本实现自动化扫描、漏洞检测、信息收集等高级操作。 #### NSE脚本按功能分为12大类,每类对应不同扫描需求 | 类别 | 核心目的 | 样例脚本 | 典型使用场合 | |------------|---------------------------------------|-------------------------------|----------------------------------------------------------| | vuln | CVE/漏洞快速验证 | 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 ` | | **https-redirect** | 识别 HTTP→HTTPS 跳转链 | `nmap --script https-redirect -p 80 ` | | **http-robtots** | 收集目标 robots/disallow 条目 | `nmap --script http-robots.txt -p 80 ` | | **http-headers** | 枚举响应标头与安全策略 | `nmap --script http-headers -p 80 ` | | **http-methods** | 检测允许/禁止的 HTTP 方法 | `nmap --script http-methods -p 80 ` | | **http-cors** | 测试 CORS、CSRF 漏洞 | `nmap --script http-cors ` | | **http-sql-injection** | 基本 SQL 注入探针 | `nmap --script http-sql-injection -p 80 ` | | **http-xssed** | 与 xssed.com 集成交叉检测 | `nmap --script http-xssed ` | | **smb-os-discovery** | 枚举 SMB 服务器操作系统/域信息 | `nmap --script smb-os-discovery -p 445 ` | | **smb-enum-shares** | 列出共享目录(需 guest) | `nmap --script smb-enum-shares -p 445 ` | | **smb-enum-users** | 提取本地/域用户列表 | `nmap --script smb-enum-users -p 445 ` | | **smb-vuln-ms17-010** | 探测 EternalBlue(MS17-010) | `nmap --script smb-vuln-ms17-010 -p 445 ` | | **ssh-hostkey** | 抓取并对比公钥指纹 | `nmap --script ssh-hostkey -p 22 ` | | **ssh-brute** | SSH 账号密码暴力破解(需授权) | `nmap --script ssh-brute --script-args userdb=users.txt,passdb=pass.txt -p 22 ` | | **ssh2-enum-algos** | 列出支持的算法与 KEX | `nmap --script ssh2-enum-algos -p 22 ` | | **http-vuln-cve2023-XXXX** | 按指定 CVE 编号进行漏洞检查(替换 XXXX) | `nmap --script http-vuln-cve2023-XXXX ` | | **ftp-anon** | 检测是否允许匿名登录 | `nmap --script ftp-anon -p 21 ` | | **ftp-bounce** | 检查是否允许 FTP Bounce 扫描 | `nmap --script ftp-bounce -p 21 ` | | **dns-zone-transfer** | 测试 AXFR(区域传输)泄露 | `nmap --script dns-zone-transfer -p 53 ` | | **dns-brute** | 字典爆破子域名 | `nmap --script dns-brute --script-args dns-brute.domain=` | | **mysql-brute** | 暴力破解 MySQL 实例 | `nmap --script mysql-brute -p 3306 ` | | **mysql-audit** | 核对 MySQL CIS/基线配置 | `nmap --script mysql-audit --script-args mysql-audit.username='root',mysql-audit.password='pass123' -p 3306 ` | | **ssl-cert** | 解析 TLS 证书详情 | `nmap --script ssl-cert -p 443 ` | | **ssl-poodle** | 探测 SSLv3 & POODLE 漏洞 | `nmap --script ssl-poodle -p 443 ` | | **vulners** | 基于 Vulners DB 的版本漏洞关联 | `nmap --script vulners -sV ` | | **whois-ip** | 查询归属 IP 段的 Whois 信息 | `nmap --script whois-ip ` | | **smtp-enum-users** | VRFY/EXPN 暴力枚举邮箱账户 | `nmap --script smtp-enum-users -p 25 ` | ### 自定义脚本 ```lua[演示.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 ``` ```bash # 复制.nse到脚本文件夹 sudo cp myecho.nse /usr/share/nmap/scripts/ nmap --script-updatedb # 更新索引 ``` ```bash # 执行脚本 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](https://nmap.org/nsedoc/ "NSE Docs"))以覆盖最新漏洞。