mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 14:06:44 +08:00
fix: 修复服务扫描插件显示bug,正确显示所有适用插件
问题: - "使用服务扫描插件" 只显示一个错误插件名(如ldap) - 原因:只检查第一个端口来判断所有插件适用性 - 实际扫描有多个端口,每个端口适用不同插件组合 修复: - 改为检查所有发现端口的插件适用性匹配 - 使用Set去重,收集适用于任意端口的所有插件 - 正确显示实际会被使用的插件列表 修复前: 使用服务扫描插件: ldap 修复后: 使用服务扫描插件: webtitle, ssh, mysql, smtp, webpoc 验证: - SSH插件 → 端口22 ✓ - SMTP插件 → 端口25 ✓ - MySQL插件 → 端口3306 ✓ - WebTitle/WebPOC → 端口8080 ✓
This commit is contained in:
parent
1ff44d1ebc
commit
3b50f42474
@ -173,25 +173,34 @@ 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 {
|
||||
common.LogBase(i18n.GetText("scan_service_plugins", strings.Join(servicePlugins, ", ")))
|
||||
|
Loading…
Reference in New Issue
Block a user