fix: 修复服务扫描插件显示bug,正确显示所有适用插件

问题:
- "使用服务扫描插件" 只显示一个错误插件名(如ldap)
- 原因:只检查第一个端口来判断所有插件适用性
- 实际扫描有多个端口,每个端口适用不同插件组合

修复:
- 改为检查所有发现端口的插件适用性匹配
- 使用Set去重,收集适用于任意端口的所有插件
- 正确显示实际会被使用的插件列表

修复前: 使用服务扫描插件: ldap
修复后: 使用服务扫描插件: webtitle, ssh, mysql, smtp, webpoc

验证:
- SSH插件 → 端口22 ✓
- SMTP插件 → 端口25 ✓
- MySQL插件 → 端口3306 ✓
- WebTitle/WebPOC → 端口8080 ✓
This commit is contained in:
ZacharyZcR 2025-09-02 06:52:16 +00:00
parent 1ff44d1ebc
commit 3b50f42474

View File

@ -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 {