From ed117a14fd3c4792e3172da68adfe587dafce0e3 Mon Sep 17 00:00:00 2001 From: ZacharyZcR Date: Tue, 2 Sep 2025 02:30:07 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DPostgreSQL=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E5=9C=A8=E7=A6=81=E7=94=A8=E6=9A=B4=E5=8A=9B=E7=A0=B4?= =?UTF-8?q?=E8=A7=A3=E6=A8=A1=E5=BC=8F=E4=B8=8B=E6=97=A0=E6=B3=95=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E6=9C=8D=E5=8A=A1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题描述: - 在使用-nobr参数时,PostgreSQL插件的identifyService方法 无法正确识别PostgreSQL服务 - 原识别逻辑过于严格,只检查错误信息是否包含'postgres'字符串 修复方案: - 扩展识别关键词列表,包含PostgreSQL常见错误信息 - 添加: authentication, database, password, role, user, pq: 等关键词 - 改进错误处理,提供更详细的调试信息 - 保持向后兼容性,不影响暴力破解功能 测试验证: - 禁用暴力破解模式: 能正确识别PostgreSQL服务 - 启用暴力破解模式: 能正常破解弱密码 - 两种模式均工作正常 --- plugins/services/postgresql.go | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/plugins/services/postgresql.go b/plugins/services/postgresql.go index a904188..f4353f3 100644 --- a/plugins/services/postgresql.go +++ b/plugins/services/postgresql.go @@ -114,17 +114,28 @@ func (p *PostgreSQLPlugin) identifyService(ctx context.Context, info *common.Hos err = db.PingContext(pingCtx) + // 改进识别逻辑:任何PostgreSQL相关的响应都认为是有效服务 var banner string - if err != nil && strings.Contains(strings.ToLower(err.Error()), "postgres") { - banner = "PostgreSQL" - } else if err == nil { - banner = "PostgreSQL" - } else { - return &ScanResult{ - Success: false, - Service: "postgresql", - Error: fmt.Errorf("无法识别为PostgreSQL服务"), + if err != nil { + errMsg := strings.ToLower(err.Error()) + // PostgreSQL常见错误关键词 + if strings.Contains(errMsg, "postgres") || + strings.Contains(errMsg, "authentication") || + strings.Contains(errMsg, "database") || + strings.Contains(errMsg, "password") || + strings.Contains(errMsg, "role") || + strings.Contains(errMsg, "user") || + strings.Contains(errMsg, "pq:") { + banner = "PostgreSQL" + } else { + return &ScanResult{ + Success: false, + Service: "postgresql", + Error: fmt.Errorf("无法识别为PostgreSQL服务: %s", err.Error()), + } } + } else { + banner = "PostgreSQL (连接成功)" } common.LogSuccess(fmt.Sprintf("PostgreSQL %s %s", target, banner))