本文目录导读:

数据库漏扫(漏洞扫描)中检查弱口令,通常采用暴力破解(字典攻击)或弱口令字典匹配两种核心逻辑,由于直接对数据库进行暴力破解具有高风险(可能导致账号锁定、数据库性能下降甚至崩溃),专业的漏扫工具会采用特定的策略和技术手段。
以下是数据库漏扫检查弱口令的详细技术路径和步骤:
核心原理:认证探测与字典攻击
扫面工具不会直接读取数据库内部的密码哈希值(因为通常无权限),而是模拟客户端发起登录请求。
流程:
- 端口与服务发现:首先识别开放了什么数据库端口(如 MySQL 的 3306,Oracle 的 1521,MSSQL 的 1433)。
- 版本与认证协议解析:识别数据库类型和版本,确定其使用的认证协议(如 MySQL 的
mysql_native_password,PostgreSQL 的 MD5 认证)。 - 字典加载:加载预置的或用户自定义的弱口令字典(
admin/admin,root/root,sa/password@123,test/test123等)。 - 模拟登录:针对发现的每一个数据库实例(IP:Port),遍历字典中的用户名和密码组合,向数据库发送认证请求。
- 结果分析:
- 成功(认证通过):记录为高危弱口令漏洞。
- 失败:根据返回的特定错误码(如“Access denied”)判断用户名是否存在(部分协议会泄露用户是否存在)。
- 锁定/限制:如果多次失败后连接被拒绝(达到数据库最大失败尝试数),工具会暂停或报告该实例存在锁定风险。
具体的检查方法与技术细节
深入分析:认证协议与返回值利用
- MySQL/MariaDB:
- 发送
COM_CHANGE_USER或mysql_native_password认证包,弱口令扫描工具会直接与 MySQL 协议握手,错误时返回ERROR 1045 (28000)。 - 更隐秘的方法(插件嗅探):部分高级工具会通过 MySQL 的
plugin字段(在握手包中)判断是否使用了弱口令插件(如mysql_old_password,该协议极为脆弱且几乎不可逆,但已废弃)。
- 发送
- MSSQL:
- 使用 TDS 协议发送登录包,错误时返回
Login failed for user。 - 利用扩展存储过程:部分工具会尝试启用
xp_cmdshell(如果管理员账户弱口令成功登录),但这已超出静态口令检查范畴,属于后利用。
- 使用 TDS 协议发送登录包,错误时返回
- Oracle:
- 使用 TNS (Transparent Network Substrate) 协议建立连接,然后通过 Oracle 的
AUTH_SESSKEY和AUTH_PASSWORD进行认证,由于其认证过程涉及与 SID/Service Name 的关联,扫描时还需要猜测或读取 SID 列表。
- 使用 TNS (Transparent Network Substrate) 协议建立连接,然后通过 Oracle 的
- PostgreSQL:
- 使用启动包(StartupMessage)进行认证,其协议支持
password(明文)、md5和scram-sha-256,扫描器针对不同的认证类型使用对应的密码构造。
- 使用启动包(StartupMessage)进行认证,其协议支持
高级规避与精准策略
由于直接暴力破解风险高,漏扫工具会使用以下策略减少影响:
- 速率限制:每尝试一个密码后,强制等待 100-500 毫秒,避免触发数据库的防御机制(如
max_connect_errors导致的 IP 封锁)。 - 账号锁定规避:如果检测到某账号已连续失败
n次(3-5 次),工具会跳过该账号,避免导致其被永久锁定或触发警报。 - 指纹识别:在尝试攻击前,先通过服务 Banner(如 MySQL 返回的版本字符串)判断目标版本,从而选择对应的认证要求(MySQL 8.0+ 使用
caching_sha2_password,与旧版不同)。 - 用户枚举:先尝试少量常见用户名(如
sa,root,postgres,admin)但不提供密码,根据数据库的错误响应(部分数据库会区分“用户不存在”和“密码错误”)来推导有效用户名,然后针对这些用户进行精确定向攻击。
字典包的质量是关键
漏扫的有效性高度依赖弱口令字典集,优秀的扫描器会包含:
- 通用弱口令:
admin/admin123,root/p@ssw0rd,test/test。 - 默认出厂密码:
空密码(如 Root 不设置密码),changeme。 - 常见变体:
Password1,P@ssw0rd!@#,companyname123。 - 行业/地区特性:例如银行系统可能使用
abc123,政府系统可能使用Gov@2023。 - 简单枚举:
123456,111111,000000。
典型工具与执行方式
- 商业扫描器:Nessus Professional/Plus(插件 ID: 25793 等专门检测 Oracle 弱口令)、Nexpose、Qualys VM,它们集成了上述逻辑,结果准确且风险可控。
- 开源/专用工具:
- Hydra:
hydra -l root -P passwords.txt mysql://target_ip(直接暴力破解,不包含速率限制,需小心使用)。 - Medusa:类似 Hydra,支持
-m AUTH等参数。 - Ncrack:专门用于网络认证的暴力破解工具,对 MySQL、PostgreSQL 支持较好。
- Nmap 脚本:
nmap --script mysql-brute,nmap --script ms-sql-brute(风险较低,因为默认使用较慢的速率和较小的字典)。
- Hydra:
查找弱口令的检查点
| 检查点 | 描述 | 风险等级 |
|---|---|---|
| 默认密码 | 未修改数据库出厂时的默认密码(如 root/空密码, sa/空密码) |
严重 |
| 常见弱密码 | 123456, password, admin123, pass@123 |
高危 |
| 与服务器信息相关的密码 | companyname2023, server01, 域名, 机柜号相关 |
高危 |
| 空密码 | 某些数据库(如 MySQL 早期版本)允许不设置密码 | 严重 |
| 使用已废弃的认证协议 | 即使密码非弱口令,但使用了 mysql_old_password(仅 4 位哈希)非常脆弱 |
严重 |
| 同账号同密码(跨服务复用) | 数据库管理员密码与 SSH 或 Web 后台密码相同(需关联扫描) | 中-高危 |
注意点
- 不要使用暴力破解工具直接对生产数据库进行大量尝试,可能导致数据库资源耗尽、连接数打满或触发安全警告,应使用专业的漏扫工具(内置速率控制和停机检测),或者联系 DBA 在测试环境/维护窗口进行。
- 建议的防护方式:数据库漏扫的结果不应仅依赖扫描,本质上应使用密码策略管理(如强制使用 16 位以上复杂密码且定期更换,配置 fail2ban 等)。
如果需要在特定环境下进行一次安全的弱口令扫描,建议提供一个非生产环境 IP 和 只允许弱口令扫描 的扫描工具配置,我可以帮你进一步确认具体的检测命令或配置参数。