身份认证安全
绕过方法
- 暴力破解
- 撞库
- cookie伪造、session
修复方法
- 增加验证码
- 限制登录频率
- 二次验证
- 使用session会话认证避免cookie仿冒。
- 每次登录重新生成swssion
- session闲置超时退出。
任意密码找回
密码找回的方法
-
用户凭证暴力破解
- 原理:凭证只有验证码且时间次数限制条件弱
- 方法:抓包-爆破
-
返回凭证
- 原理:校验凭证如验证码从的响应包url/请求体里由服务端返回到客户端
- 方法:抓包-检查-解码
-
邮箱弱token
- 原理:邮箱里修改密码的链接容易被伪造如(?id=MD5(uid+时间戳))
- 方法:一个已知账号和一个未知账号同时点击找回密码爆破构造出找回密码URL
-
用户凭证有效性
- 原理1:修改他人密码时抓包将他人手机号替换为自己手机号获取验证码
- 原理2:修改自己密码时通过了用户校验输入新密码提交后抓包将用户id改为他人的
- 原理3:访问自己的重置密码邮箱链接输入新密码提交后抓包将用户id改为他人
-
重新绑定手机和邮箱
- 原理:给已知账号绑定手机,抓包将用户id改为他人,实现自己手机绑定他人id,并通过手机号改密。
-
服务器验证
- 原理1:使用邮箱找回密码,通过链接至修改密码页面,修改密码提交抓包修改为他人id。
- 原理2:密保问题和新密码在同一个界面,抓包删除密保问题提交。
-
跳过验证
- 原理:修改密码页面抓包,修改USERNAMECOOKIE为其他用户,修改密码后提交。
- 原理2:修改step步骤参数,直接跳到修改密码,抓包修改cookie/uid,修改密码后提交。
-
本地验证
- 原理1:在本地验证服务器的返回信息,确定是否执行密码重置,其返回信息是可控/可获得的内容。
- 原理2:发生短信等验证信息的动作在本地执行,可以通过修改request包进行控制
-
Token生成可控
- 原理1:修改密码时抓发送验证码的包,将接收验证码的邮箱改为自己的。邮箱点击链接修改密码。
- 原理2:提交验证码时抓包,修改UID,此时用户返回他人token,用已知账号抓改密包,替换其中的token发送。
-
注册覆盖
- 原理:注册相同用户名,数据库原账号内容被覆盖,相当于改密。未做用户名已存在校验。
-
Session覆盖
- 原理:同一浏览器,输入自己的账户进行邮箱密码找回,进入邮箱查看链接,接着输入他人账户,进行密码找回,返回刚刚自己的邮箱点击链接,由于session覆盖导致了,这个链接成为了修改他人密码的链接,成功修改他人密码
原创2023年6月9日大约 6 分钟