服务公告

服务公告 > 综合新闻 > Nmap:脚本

Nmap:脚本

发布时间:2026-04-25 14:01

一、前言

搞过渗透测试的人都知道,Nmap纯端口扫描只是皮毛,真正让你效率翻倍的是NSE脚本库。但面对几百个脚本无从下手,一个个试又太慢。本篇不废话,直接讲怎么用好这些脚本,少踩坑。

二、操作步骤

第1步:确认Nmap和脚本库状态

nmap --version
# 预期输出:
Nmap version 7.94 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
ls /usr/share/nmap/nselib/ | head -20
# 预期输出:
acrackius      brute       default.lua  json      mysql     在路上
amqp           citrixbrute credsss      keychain  peach     ssl
...

第2步:查看脚本分类和可用脚本总数

nmap --script-help | head -30
# 预期输出:
Starting Nmap ( https://nmap.org )
Use --script to select categories or individual scripts
Categories: auth, broadcast, brute, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, vuln
find /usr/share/nmap/scripts/ -name "*.nse" | wc -l
# 预期输出:
600

第3步:单脚本扫描——验证SSH版本枚举

nmap -p 22 --script ssh-enum-keys 192.168.1.100
# 预期输出:
Starting Nmap 7.94 at 2024-01-15 10:30 CST
Nmap scan report for 192.168.1.100
Host is up (0.0020s latency).

PORT   STATE SERVICE
22/tcp open  ssh
|_ssh-enum-keys: Failed to query SSH server: ERROR: Not a public key repository.

MAC Address: 00:11:22:33:44:55 (VMware)

第4步:漏洞检测脚本——检测心脏出血

nmap -p 443 --script ssl-heartbleed 203.0.113.50
# 预期输出:
Starting Nmap 7.94 at 2024-01-15 10:32 CST
Nmap scan report for 203.0.113.50
Host is up (0.015s latency).

PORT    STATE SERVICE
443/tcp open  https
| ssl-heartbleed: 
|   VULNERABLE:
|   Heartbleed: OpenSSL TLS heartbeat read overrun
|     State: VULNERABLE
|     Risk factor: High
|     OpenSSL 1.0.1e-fips 11 Feb 2013
|_    https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160

⚠️ 警告:心脏出血检测属于侵入性扫描,仅在授权测试环境中使用。

第5步:暴力破解脚本——针对特定服务

nmap -p 3306 --script mysql-brute --script-args userdb=/tmp/users.txt,passdb=/tmp/pass.txt 192.168.1.200
# 预期输出:
Starting Nmap 7.94 at 2024-01-15 10:35 CST
Nmap scan report for 192.168.1.200
Host is up (0.0030s latency).

PORT     STATE    SERVICE
3306/tcp filtered mysql
|_mysql-brute: Could not connect

路径说明:
- Ubuntu/Debian: /usr/share/nmap/nselib/
- CentOS/RHEL: /usr/share/nmap/nselib/(路径相同)

第6步:组合脚本扫描——Web服务全面评估

nmap -p 80,443 --script "http-*,ssl-*" --script-trace vuln.example.com
# 预期输出:
Starting Nmap 7.94 at 2024-01-15 10:40 CST
Nmap scan report for vuln.example.com (203.0.113.100)
Host is up (0.050s latency).

PORT    STATE SERVICE
80/tcp  open  http
| http-enum: 
|   /robots.txt: Admin
|   /admin/: Admin
|_  /backup/: Backup
443/tcp open  https
| ssl-cert: Subject: organizationName=Example Inc
| Issuer: CommonName=Let's Encrypt Authority X3
| ssl-dh-params: 
|   VULNERABLE: Logjam on 2048-bit prime
|_  https://weakdh.org

第7步:脚本更新与维护

nmap --script-updatedb
# 预期输出:
NSE script database updated.
You can also fetch a newer script archive from https://nmap.org/nsedoc/

sudo find /usr/share/nmap/scripts/ -name "*.nse" -mtime -30
# 预期输出:(无输出表示脚本近期无更新)


第8步:自定义脚本执行与调试

nmap -p 8080 --script http-backup-finder --script-args http.max-backup-count=5,http.useragent="Mozilla/5.0" 192.168.1.50 -d3
# 预期输出:
[Trace] NSE: Starting script tracing with debug level 3
[Trace] http-backup-finder: GET /robots.txt (1 of 2)
[Trace] http-backup-finder: Checking /backup, /backups, /.bak, /old, /archive
[Info] http-backup-finder: No backup files found

三、常见问题FAQ

Q1: 脚本跑着跑着超时了,咋整?

超时默认是10秒,遇到慢目标直接GG。加点参数:--script-timeout 60s或者单脚本跑时用--script-args timeout=60000。还有个邪道玩法是--max-scan-delay 5s限制发包频率,稳一点。

Q2: 那么多脚本怎么知道哪个靠谱?

别瞎试,先看评级。nmap --script-help script-name | grep -i "risk"能看到风险等级。生产环境只跑safe类别,渗透测试授权范围内才上intrusive和exploit。还有个土办法:GitHub上搜nmap官方仓库的nselib/README看看哪些脚本被维护得多。

Q3: 有些脚本需要账号密码,怎么传参?

两种路子。一是--script-args传:userdb=users.txt,passdb=pass.txt,注意这玩意儿是明文传参的,ps aux能看到,别在生产环境裸跑。二是用nselib里的lua模块自己写认证脚本,变量写到环境变量里。实测mysql-brute、smb-brute这些都支持字典文件。

Q4: 脚本更新后报错"script rules version mismatch"?

Nmap版本和脚本库不匹配了,老版本Nmap带不动新脚本。解决方案:要么nmap --script-updatedb同步一下,要么直接升级Nmap到最新。Ubuntu: sudo apt upgrade nmap / CentOS: sudo yum update nmap。如果急着跑,可以删掉报错的.nse文件降级脚本库,但不推荐。

四、总结

核心要点:NSE脚本是Nmap的灵魂,掌握分类筛选、参数传递、调试技巧这三个基本功就够了。别贪多嚼不烂,上来就跑vuln和exploit分类的,要么被防火墙拉黑,要么直接打挂目标。稳妥流程是:先default脚本摸底,再定向脚本深入,最后授权范围内做暴力或漏洞利用。

延伸阅读:
Nmap Scripting Engine官方文档
NSE脚本API参考
GitHub Nmap官方仓库-nselib