最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何使用脚本识别MongoDB的弱密码用户?
时间:2026-07-08 10:42:45 编辑:袖梨 来源:一聚教程网
必须显式指定authSource参数,因其决定认证数据库,用户若建在test库却默认用admin认证将失败;同时需区分ConnectionFailure(连接失败)与OperationFailure(认证失败),并设置serverSelectionTimeoutMS控制超时。
直接用 pymongo 连接并试登录是最可靠的方式,但必须配合正确的连接参数和错误处理逻辑,否则会漏掉空口令、认证数据库错配、或因超时误判为失败。
为什么 mongo 命令行连得上,脚本却报错?
MongoDB 的认证机制依赖三个关键参数:用户名、密码、认证数据库(authentication database)。很多脚本只传 username 和 password,却默认用 admin 作为认证库——而实际用户可能建在 test 或其他库中,导致连接被拒绝,报错 not authorized on admin to execute command。
- 务必显式指定
authSource参数,例如authSource="admin"或authSource="test" - 若不确定认证库,需对常见库(
admin、test、local)分别尝试 - 空口令用户(如
user: "admin", pwd: "")必须显式传空字符串,不能传None或省略
pymongo.MongoClient 连接时 timeout 和异常类型要分清
连接失败不等于认证失败。网络不通、服务未响应、bindIp 配置错误都会导致超时,但这些和弱口令无关。盲目重试或归类为“失败”会掩盖真实风险。
- 设置
serverSelectionTimeoutMS=3000控制连接建立超时,避免卡死 - 区分异常:
ConnectionFailure(连不上)、OperationFailure(连上了但认证失败)、ConfigurationError(参数错,如 authSource 不存在) - 对
OperationFailure且消息含"Authentication failed"才算一次有效认证尝试失败
怎么避免扫描被阻断或触发告警?
MongoDB 本身无内置登录失败锁定,但高频并发试探容易被防火墙限速、WAF 拦截,或填满日志导致运维警觉。生产环境扫描必须克制。
- 单 IP 对单实例建议 ≤ 5 并发线程,间隔 ≥ 1.5 秒/次
- 禁用
ssl=True除非目标明确开启 TLS,否则会直接失败 - 优先测试已知存在风险的组合:如
user in ["admin", "root"]+pwd in ["", "123456", "admin", "password"],别一上来就跑完整字典 - 若发现
ping成功但db.admin.command("listDatabases")被拒,说明已通过认证——此时可停手,不必继续试其他密码
真正难的不是写脚本,是判断哪些 IP 值得扫、哪些用户该优先试、以及如何从一堆 OperationFailure 里挑出那个真实的空口令——它往往藏在第一个成功建立连接却没报认证错的 case 里,而不是等你把字典跑完。
相关文章
- 勇者不能停如何用云存档迁移 07-08
- 绝地求生游戏大厅进不去怎么办 07-08
- 王者荣耀世界东方曜与鲁班大师配队培养方法 07-08
- 鸣潮2.5:优化了哪些方面 07-08
- 星际裂变新手前期如何探索废墟 07-08
- 这城有良田威仪属性解析 07-08