常见漏洞验证121 条

账号枚举检查

登录/注册/找回流程的响应差异可被用来判断账号是否存在;核查文案、状态码与响应时间三方面的一致性。

账号枚举在查什么

登录、注册与找回密码流程如果对「账号存在」与「账号不存在」给出不同反馈,就等于提供了一个账号探测器。可用的差异有三类:响应文案(用户不存在与口令错误)、状态码、响应时间。枚举本身危害有限,但它是撞库与定向钓鱼的前置步骤——攻击者先确认一批有效账号,再针对性地试口令。核查因此要横向覆盖三条链路,并注意只用自有测试账号。

基本信息

渠道登录报错、注册占用提示、找回密码响应
信号文案差异、状态码差异、响应耗时差异
验证方式存在与不存在的账号各触发多次,对比三类差异
纪律只用自有测试账号与自有域名,绝不使用真实用户邮箱
修复方向统一提示文案与响应时间,敏感流程加限速

典型使用场景

  • 账号安全评估的常规项,成本低、结论清晰
  • 为撞库防护评估提供输入:有效账号集合是否可被批量确认
  • 核查注册流程的占用提示是否泄露账号存在性
  • 对比三条链路的一致性:登录与找回的处理逻辑常不同步
  • 修复验证:确认文案与时间差已统一,且有频次限制

检查步骤

检查步骤
# 1. 用存在与不存在的账号各触发 5 次同类请求(自有域名)
for i in 1 2 3 4 5; do
  curl -s -o /dev/null -w 'exists  %{http_code} %{time_total}\n' \
    -X POST https://example.com/login -d 'user=own-test@example.com&pass=x'
  curl -s -o /dev/null -w 'missing %{http_code} %{time_total}\n' \
    -X POST https://example.com/login -d 'user=no-such-user-xyz@example.com&pass=x'
done
# 2. 对比状态码、响应文案与耗时;多轮取样比单次更有说服力
# 3. 在找回密码与注册流程重复同样验证
# 4. 记录差异点(不记录真实用户信息)

差异类型与影响

差异类型可被利用程度处置
文案不同(用户不存在 / 口令错误)高,直接可判统一为中性提示
状态码不同(404 / 401)高,脚本化成本极低统一返回值
响应时间明显不同中,需要取样统计统一处理路径,必要时加入随机延迟
无任何差异不可利用记录为已核查
枚举本身属低危,但会助长撞库与定向钓鱼:修复以统一响应与限速为主,不必夸大定级。
不要用真实用户邮箱或手机号批量尝试:这既触碰隐私,也会造成真实的密码重置邮件骚扰,必须有书面授权才可能例外。

易错点

  • 用真实用户邮箱批量尝试:触碰隐私且会触发真实邮件通知,属越界行为
  • 只看文案忽略响应时间:时间差同样可被统计利用,取样要多轮
  • 只测登录漏掉找回与注册:三条链路常由不同逻辑实现,差异不同步
  • 单次请求就下结论:网络抖动会放大时间差误判,需要多轮取样

数据来源与参考

  • OWASP WSTG WSTG-IDNT-04
  • CWE-204(Response Discrepancy)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌