From 3b50f42474d10d0b27e655b35d87c8ac4adfc9a7 Mon Sep 17 00:00:00 2001 From: ZacharyZcR Date: Tue, 2 Sep 2025 06:52:16 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E6=8F=92=E4=BB=B6=E6=98=BE=E7=A4=BAbug?= =?UTF-8?q?=EF=BC=8C=E6=AD=A3=E7=A1=AE=E6=98=BE=E7=A4=BA=E6=89=80=E6=9C=89?= =?UTF-8?q?=E9=80=82=E7=94=A8=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: - "使用服务扫描插件" 只显示一个错误插件名(如ldap) - 原因:只检查第一个端口来判断所有插件适用性 - 实际扫描有多个端口,每个端口适用不同插件组合 修复: - 改为检查所有发现端口的插件适用性匹配 - 使用Set去重,收集适用于任意端口的所有插件 - 正确显示实际会被使用的插件列表 修复前: 使用服务扫描插件: ldap 修复后: 使用服务扫描插件: webtitle, ssh, mysql, smtp, webpoc 验证: - SSH插件 → 端口22 ✓ - SMTP插件 → 端口25 ✓ - MySQL插件 → 端口3306 ✓ - WebTitle/WebPOC → 端口8080 ✓ --- core/ServiceScanner.go | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/core/ServiceScanner.go b/core/ServiceScanner.go index 508f420..21bd5bb 100644 --- a/core/ServiceScanner.go +++ b/core/ServiceScanner.go @@ -173,24 +173,33 @@ func (s *ServiceScanStrategy) LogVulnerabilityPluginInfo(targets []common.HostIn } } - // 获取实际会被使用的插件列表(考虑端口匹配) - var servicePlugins []string + // 获取实际会被使用的插件列表(考虑所有发现端口的匹配) + servicePluginSet := make(map[string]bool) - // 提取第一个目标端口用于匹配检查 - var firstTargetPort int - if len(targets) > 0 && targets[0].Ports != "" { - firstTargetPort, _ = strconv.Atoi(targets[0].Ports) + // 提取所有目标端口用于插件适用性检查 + var allPorts []int + for port := range portSet { + allPorts = append(allPorts, port) } for _, pluginName := range allPlugins { // 使用统一插件系统检查插件存在性 if s.pluginExists(pluginName) { - // 检查插件是否适用于目标端口 - if s.IsPluginApplicableByName(pluginName, "127.0.0.1", firstTargetPort, isCustomMode) { - servicePlugins = append(servicePlugins, pluginName) + // 检查插件是否适用于任意一个发现的端口 + for _, port := range allPorts { + if s.IsPluginApplicableByName(pluginName, "127.0.0.1", port, isCustomMode) { + servicePluginSet[pluginName] = true + break // 只要适用于一个端口就添加 + } } } } + + // 转换为切片 + var servicePlugins []string + for pluginName := range servicePluginSet { + servicePlugins = append(servicePlugins, pluginName) + } // 输出插件信息 if len(servicePlugins) > 0 {