真正能批量识别中间件缺陷的是精准Nmap脚本组合,如http-vuln-cve2017-5638、redis-info等十余个高效脚本,需配合端口指定、服务确认和超时调优,避免全量vuln类加载导致误报或漏报。

直接用 nmap --script vuln 扫全网,大概率扫不出东西,还容易被 IDS 记录甚至触发告警。真正能批量揪出中间件缺陷(比如 Tomcat 默认页、Jenkins 未授权、Redis 未鉴权、Elasticsearch 敏感信息泄露)的,得靠精准脚本 + 合理范围 + 避开干扰项。
哪些 Nmap 脚本真能识别中间件缺陷
别迷信 vuln 类别全量加载——它包含大量低效或需交互验证的脚本,实际对中间件有效的就那十几个。重点盯住这些:
-
http-vuln-cve2017-5638:检测 Struts2 远程命令执行(常见于老版 WebLogic、Confluence) -
http-vuln-cve2018-11776:检测 Apache Struts 命令注入(影响较广) -
http-vuln-cve2021-44228:Log4Shell 检测(依赖 Java 中间件,如 Jenkins、Druid) -
redis-info:不验证密码直接获取 Redis 服务器信息,若返回role:master且无requirepass,基本等于未鉴权 -
mongodb-info:连接 MongoDB 默认端口 27017,若返回数据库列表(databases字段),说明未启用访问控制 -
smb-vuln-ms17-010:虽属系统层,但常因中间件(如 IIS+ASP.NET)暴露 SMB 服务而连带触发
注意:http-vuln-* 类脚本默认只对 HTTP/HTTPS 服务生效;redis-info 和 mongodb-info 则必须明确指定端口(-p 6379,27017),否则不会运行。
怎么避免扫成“假阳性”或漏掉真实问题
Nmap 脚本输出里一堆 VULNERABLE 不代表真能打,很多只是“特征匹配”。关键看三件事:
- 确认目标服务是否真在运行该中间件:比如
http-vuln-cve2021-44228返回VULNERABLE,但目标其实是 Nginx 静态站,那就纯属误报;先用nmap -sV -p 80,443 target确认服务名和版本 - 检查脚本是否发了真实探测包:部分脚本(如
http-title)只取标题,不触发漏洞;而http-vuln-cve2017-5638会发恶意 Content-Type,若目标返回 500 或异常响应,才更可信 - 留意输出里的
Risk factor和State:Nmap 输出中出现State: LIKELY_VULNERABLE比单纯VULNERABLE更谨慎;Risk factor: HIGH比INFO更值得关注 - 别信默认超时:中间件响应慢(如老旧 Tomcat),脚本可能因
--script-timeout太短而跳过。加--script-timeout 30s更稳妥
局域网批量扫描的实用命令组合
别一上来就 nmap -sV --script vuln 192.168.1.0/24。先缩小范围,再定向爆破:
- 第一步:快速发现活跃主机 + 开放的中间件端口
nmap -sn 192.168.1.0/24找出在线 IP,再挑出开放 80/443/8080/8443/6379/27017/9200 的机器:nmap -p 80,443,8080,8443,6379,27017,9200 -oG - 192.168.1.0/24 | grep "open" - 第二步:对确认有中间件端口的 IP,分协议跑脚本
Web 类:nmap -sV -p 80,443,8080,8443 --script http-vuln-* --script-timeout 30s 192.168.1.10
数据库/缓存类:nmap -p 6379,27017,9200 --script redis-info,mongodb-info,http-server-header 192.168.1.20 - 第三步:导出结构化结果便于排查
加-oX scan.xml,之后可用grep -i "vuln\|risk" scan.xml快速过滤高风险项
最容易被忽略但导致失败的三个点
很多人扫完一脸懵,不是脚本没用,是卡在这几个细节上:
- 权限问题:
redis-info和mongodb-info需要 RAW socket 权限,普通用户运行会静默跳过——必须加sudo - 防火墙干扰:局域网内有些设备(如某些 IoT 设备、旧打印机)会响应 SYN 却不回 ACK,导致 Nmap 把端口标为
filtered,脚本根本不会触发;加-Pn跳过主机发现可绕过 - 脚本路径失效:如果你用的是自编译或非官方源安装的 Nmap,
--script可能找不到内置脚本;运行nmap --script-help vuln看是否列出已知脚本,否则需手动指定路径:--script /usr/share/nmap/scripts/http-vuln-*.nse


















