地址: http://kdweibo.com/home 依次点击: 登陆-->忘记登陆密码 然后登陆邮箱查看重置链接是否存在缺陷 上图中可看到,请求链接存在u和t的参数: 尝试数次后可观察到,u是固定不变的,大概是userName相关的串,而t是有规律的递增。 紧接着尝试重置密码的操作,发现u这个参数是无用的,post请求只发送一个t参数和表单中的新密码,如下图: 好了,现在我们开始研究这个t参数。在找回密码的第一个页面,连续数次提交我的邮箱地址,获取到5个重置密码的链接,把他们列在下面观察一下: 可以看出,t参数只有5-8位 和最后4位是会变化的,均是自增,变化幅度跟时间有关,初步判定这个t参数仅是根据服务器的时间戳生成的。 由此,就可以轻易地猜出这个t参数,做个示范: 假设我想重置这个人的密码,他邮箱是target@163.com 而我自己的邮箱是me@163.com,我便可以如此操作: 1.在找回密码的第一个页面,提交我自己的邮箱 me@163.com 2.然后连续提交数次目标者的邮箱 target@163.com 3. 再提交一次 我自己的邮箱 me@163.com 这时我的邮箱变收到一前一后两个t参数: 52df 773f 24ac5b651d28 8d42 52df 774d 24ac5b651d28 8d54 那目标者收到的token 5-8位一定是 7740-774c 后四位范围一定是 8d44-8d52之间的偶数 此时,小试数次便可试出目标者的重置密码链接: 重置完密码,自动跳转到目标者的微博主页: 修复方案: 1. 随机码应该做成不容易发掘,或者 加密窜采用动态密钥加密(这样就是别人知道这个随机码的规则也计算不出验证码的值就无法构造 ) 2. 重置链接的失效机制可进一步改进。目前收到新重置链接时,旧链接还是有效的 |
还没有人抢沙发呢~