讲师:gh0stkey
整理:飞龙
这是补天平台上的一个案例:
http://www.118114.cn/reg.jsp
首先注册一个账号,然后找回。
我们收到的验证码是六位数。如果网站没有设置频率限制,或者最大尝试次数限制的话,那我们自然就会想到可以爆破它。
然后抓提交手机验证码的封包,我们可以看到没有任何图片验证码:
发送到 Burp 的 Intruder:
只给checkPhoneCode
添加标志,然后将字典类型设置为数字,范围为000000 ~ 999999
。然后爆破,结束后我们发现了一个与众不同的封包。
将里面的验证码提交之后便可重置密码。
这是某个网站的注册页面:
我们模拟注册一下,发现手机验证码是四位:
然后抓注册的封包:
然后将字典设置为四位数字 0000 ~ 9999,进行爆破:
Get it!
目标是www.vobao.com
。
首先注册,然后直接退出找回,我们看到它是邮箱验证。
然后查看验证邮件:
我们发现其中有一个vstr
,它跟找回密码页面中的某个 URL 是一样的,也就是一个标志。
那么vud
就应该起到类似验证码的作用。如果我们不填写vud
直接访问,显示无效。那么就能确定它是验证码了。
这个vud
看起来像是个md5,但是实际上是随机码。那么我们尝试拿另一个邮箱注册找回:
可以看到vstr
是不一样的,vud
当然也不一样。但是如果我们邮箱2的vud
拼接到邮箱1的vstr
上呢?由于邮箱1的vstr
是已知的,即使我们访问不了邮箱1,也可以通过找回密码页面的 URL 来获得,那么我们就可以构造出:
提交后就成功了。
假设邮箱1是别人的邮箱,我们不能访问其内容,但我们能够控制邮箱2,那我们就能拿邮箱2来重置邮箱1的账户。可以看到,这个漏洞的主要成因就是未对不同用户的验证码进行区分。其中vstr
起到用户标志的作用,vud
起到邮箱验证码的作用。