nmap无法自动关联端口、服务与cve,需人工定向扫描:先用-sn发现存活主机,再以-sv精准探测默认中间件端口,依识别结果调用对应漏洞脚本,并输出至文件人工验证。

不能靠 nmap --script=vuln 自动扫出局域网里所有中间件的已知缺陷。Nmap 不会主动把“开放端口→服务类型→对应 CVE →调用脚本”串起来,必须你来定义:哪些 IP、哪些端口、跑什么服务、用哪个脚本验证。
先精准发现目标中间件实例
盲目扫全端口(-p-)效率低、-sV 准确率下降,容易漏掉非标端口上的中间件。应结合常见中间件默认端口+版本探测定向识别:
- 用
nmap -sn 192.168.1.0/24先列出活跃主机 - 再对存活 IP 执行
nmap -sV -T4 -p 22,80,443,8080,8443,9200,27017,6379,8000,8009,8081,9000,9200,9300,11211 192.168.1.10-20—— 显式指定中间件高危端口,强制触发服务识别 - 重点看输出中
service和version字段,例如:8080/tcp open http Apache Tomcat/Coyote JSP engine 1.1或6379/tcp open redis Redis key-value store 7.0.12
按中间件类型显式调用漏洞脚本
每个脚本有严格触发条件(如 portrule 要求 service=redis 且 version 匹配),不加 -sV 或端口未显式指定,脚本直接跳过:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
-
Redis:用
--script=redis-info,redis-unauthorized,可加--script-args="redis.timeout=5000"防卡死 -
Tomcat:确认是 Tomcat 后,加
--script=http-vuln-cve2017-12615,http-tomcat-mgr-login -
Elasticsearch:针对 9200/9300 端口,用
--script=http-vuln-cve2015-1427,http-vuln-cve2014-3120 -
Jenkins:8080 或 8000 端口上识别为 Jenkins 后,用
--script=http-vuln-cve2017-1000353,http-jenkins-script-console -
Struts2:HTTP 服务识别含 “struts” 关键字时,才启用
http-vuln-cve2017-5638,http-vuln-cve2017-9805
批量扫描要避免 shell 循环,改用列表+统一参数
把确认存活的 IP 写入 targets.txt(每行一个,支持 CIDR),然后一条命令完成全量检测:
nmap -iL targets.txt -sV -T4 \ -p 80,443,8080,8443,9200,27017,6379,8009,8000 \ --script=redis-info,redis-unauthorized,http-vuln-cve2017-10271,http-vuln-cve2017-5638,mongodb-info,mongodb-databases \ --script-args="http.useragent=Mozilla,redis.timeout=5000" \ -oN midware_vuln_scan.log -oX midware_vuln_scan.xml
务必加 -oN 和 -oX 输出——终端滚动日志里混着大量探测信息,关键漏洞结果(如 VULNERABLE、unauthorized access)只在文件里能快速定位。
结果要人工验证,不能照单全信
Nmap 脚本输出只是线索,不是结论:
- 看到
redis-unauthorized: VULNERABLE,需手动redis-cli -h 192.168.1.12 info确认是否真能直连 - 看到
http-vuln-cve2017-10271: VULNERABLE,要用 curl 构造 PoC 请求,观察响应是否返回 WebLogic 控制台内容 - Lynis 可同步运行做本地加固检查(如
sudo ./lynis audit system),补足 Nmap 无法覆盖的配置类风险










