登录接口对不存在的账号返回 用户不存在,密码错了返回 密码错误,脚本拿一份邮箱字典跑一遍,就能筛出哪些地址在这个站注册过。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,两类失败给了不同文案和不同响应时间,等于把账号是否存在直接告诉调用方,后面的撞库只需要盯着有效账号打,效率高很多。
「登录账号枚举」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。报错里带路径的,先去看那个路径在不在、权限对不对。
curl -s -X POST localhost:8080/login -d 'u=nobody&p=x' curl -s -X POST localhost:8080/login -d 'u=admin&p=x' # 两次返回体应当完全一致
同一份配置存在多处的,先确认改的是被加载的那一份。
具体做法是,统一提示成账号或密码错误,返回的状态码保持一致;不存在的账号也走一次密码哈希,把响应时间抹平;按 IP 和账号分别记录失败次数,超过上限就加验证码。
最后用这个标准收尾,两种失败的返回体完全一致,实测响应时间也相差在 30 毫秒以内。
