逻辑漏洞之密码找回总结
0x00 脑图
0x01 用户凭证暴力破解
- 验证码的位数:4 or 6,有效时间:1min - 15min
- 验证码爆破防护绕过
- 纯数字字典生成脚本
import itertools
words = "0123456789"
r = itertools.product(words, repeat=n)
dic = open("", "a")
for i in r:
dic.write("".join(i))
dic.write("".join("
"))
dic.close()
0x02 返回凭证
- url返回验证码及token
- 密码找回凭证在页面中
- 返回短信验证码
某app挖洞记录:发送Request
,验证码回显在Response
0x03 邮箱弱token
- 时间戳的md5
- 用户名
- 服务器时间
0x04 用户凭证有效性
- 短信验证码
获取验证码,尝试修改手机号;修改返回包中的手机号为自己的手机号,尝试获取验证码 - 邮箱token
- 重置密码token
0x05 重新绑定
- 手机绑定
- 邮箱绑定
0x06 服务器验证
- 最终提交步骤
- 服务器验证可控内容
- 服务器验证逻辑是否为空
某app挖洞记录:未校验验证码,凭据,用户号码的一致性,导致任意用户密码重置
0x07 用户身份验证
- 账号与手机号的绑定
- 账号与邮箱账号的绑定
0x08 找回步骤
某网站挖洞记录:找回密码到了第二步,直接修改mobile参数,可跳过第一步短信验证步骤
0x09 本地验证
- 在本地验证服务器的返回信息,确定是否执行重置密码,但是其返回信息是可控的内容,或者可以得到的内容
- 发送短信等验证信息的动作在本地进行,可以通过修改返回包进行控制
Intercept Server Responses
添加规则如下:
0x10 注入
0x11 token生成可控
观察重置密码步骤数据包中字符串,是否和验证身份步骤中的字符串相同。相同-->尝试绕过验证步骤,不同-->尝试token可控。
0x12 注册覆盖
注册重复的用户名
0x13 session覆盖
找回密码到了邮箱验证这一步骤,打开邮箱,不要在邮箱点击重置密码的链接,复制链接在同一浏览器打开