账户枚举
账户枚举 是什么?
账户枚举利用应用响应差异来判断目标系统中存在哪些账户、邮箱或手机号的攻击。
账户枚举利用的是应用在账户存在与不存在时表现的差异——登录、注册或找回密码流程中返回不同的错误信息、响应时间差异,或不同的 HTTP 状态码。攻击者通过尝试大量候选标识符,逐步整理出有效账户列表,随后即可用钓鱼、凭据填充或密码喷洒等手段加以攻击。
该漏洞常见于登录表单("用户不存在" vs "密码错误")、密码重置("已发送邮件" vs "无此账户")和注册流程("邮箱已注册")。它很少是最终目标:枚举是一个侦察步骤,通过消除盲目猜测来强化后续攻击。一个具体的近期案例是 Gitea 中的 CVE-2025-69413(已在 1.25.2 中修复):/api/v1/user 接口对有效与无效用户名返回可区分的响应,使攻击者得以在凭据填充或鱼叉式钓鱼之前先映射出真实账户。
即便错误信息文案统一,时间仍可能泄露信息:只在用户存在时才对所提交密码进行哈希计算的系统,对未知账户的响应会明显更快。因此,稳健的防御需要组合多种手段:通用且完全一致的提示信息;恒定时间的代码路径(始终执行一次虚拟哈希);通用的密码重置与注册通知;按 IP 与按账户的速率限制;在滥用时启用 CAPTCHA;以及用 MFA 削弱后续攻击。OWASP 的 WSTG-IDNT-04 测试用例规范了如何对其进行检测。
flowchart TD
A[攻击者提交候选标识符] --> B{账户是否存在?}
B -->|是| C["可区分信号:<br/>密码错误 / 哈希缓慢 / 200"]
B -->|否| D["可区分信号:<br/>用户不存在 / 快速响应 / 404"]
C --> E[标记标识符为有效]
D --> F[标记标识符为无效]
E --> G[构建有效账户列表]
G --> H[凭据填充 / 钓鱼 / 密码喷洒]
C -.统一信息 + 恒定时间.-> I[信号一致:枚举被阻断]
D -.统一信息 + 恒定时间.-> I● 示例
- 01
注册页面显示 "此邮箱已被使用",让攻击者批量收集有效邮箱。
- 02
/login 接口对已知与未知用户名的响应时间不同,被用来构建账户列表。
● 常见问题
账户枚举 是什么?
利用应用响应差异来判断目标系统中存在哪些账户、邮箱或手机号的攻击。 它属于网络安全的 身份与访问 分类。
账户枚举 是什么意思?
利用应用响应差异来判断目标系统中存在哪些账户、邮箱或手机号的攻击。
如何防御 账户枚举?
针对 账户枚举 的防御通常结合技术控制与运营实践,详见上方完整定义。
账户枚举 还有哪些其他名称?
常见的别称包括: 用户枚举, 标识符枚举。