0x00 前言


一般的密码重置的设计都是分为以下四步的:

1.输入账户名
2.验证身份
3.重置密码
4.完成  

通常漏洞是会存在于2或者3步骤中,下面来看看常见的一些重置密码漏洞的方式。

0x01 爆破类型


1 这种重置密码是最多见最容易出现的一类,那就是手机验证码爆破从而重置密码。

WooYun: 爱周游任意用户密码重置及 XSS漏洞

WooYun: 麦包包 任意用户密码重置漏洞

WooYun: 换个姿势第三次重置拉手网任意用户密码

这这种设计一般是在找回密码的时候,会给指定的手机号发送一个用于验证身份的验证码,然后只要用户输入正确的验证码,就可以进行密码重置了。

这种设计产生重置密码漏洞的情况,一般是由于验证设计过于简单,而且对校验码的校验使用次数没有进行限制,导致正确的验证码可以被枚举爆破,从而重置密码。此方法也是最常见的重置密码的方式,因为大多数厂商最开始的设置都是采取的4-6位纯数字验证码的验证方式,而且是没有防止爆破的设计。

2 也是采取的爆破,方法和#1类似,不过就是手机验证码变成了邮箱中的验证码。

WooYun: 有利网 也可以任意用户密码重置额~

WooYun: 驱动之家 任意用户密码重置

WooYun: 咕咚网设计缺陷导致任意用户密码可重置

这这种设计一般是在找回密码的时候,会给指定邮箱发送一个用于校验的url链接,链接中一般会有一个参数就是用于验证身份的验证码,然后用户点击指定url就可以进入重置密码的页面从而去重置密码了。

这种设计产生重置密码漏洞的情况,也是由于重置密码链接中的验证码参数没有设计过于简单,可以被爆破,从而可以重置密码。

0x02 秒改类型


3 采取的方法是偷梁换柱,一般是那种会给指定邮箱发送url重置密码链接的那种。

WooYun: 麦包包 任意用户密码重置漏洞(二)

WooYun: 经纬网可重置任意用户密码

WooYun: 飞马网系列之四任意用户密码重置漏洞(秒改非爆破)

这这种设计一般是在找回密码的时候,会给指定邮箱发送一个用于校验的url链接,链接中一般肯定会存在2个比较重要的参数,一个是用户名(或者uid、qq邮箱之类的能代表用户身份的参数),另一个就是一个加密的字符串(通过服务器端的某种算法生成的用来验证用户身份的参数)。然后用户在重置密码的时候,点击邮箱中的重置密码链接,就可以重置帐号密码了。

这种设计产生重置密码漏洞的情况,一般是由于重置密码链接中的表示用户名的参数和用于校验的加密字符串参数没有进行一一对应,导致可以被黑客偷梁换柱,从而重置密码。

也就是说,那个验证身份的加密字符串是万能的。

比如生成的重置密码url为:http://www.xx.com/xxoo.php?username=wooyun1&code=asdfghjkl 然后由于这里的参数code在服务器端验证的时候,只要其自身的算法满足服务器端的验证就直接通过了,不会去验证这个code是不是和wooyun1账户对应的。

从而,黑客可以直接利用url:http://www.xx.com/xxoo.php?username=wooyun2&code=asdfghjkl 重置帐号wooyun2的密码。

4 同样是偷梁换柱,这种一般是在最后一步设置新密码的时候,程序员往往会疏忽验证用户身份,从而被偷梁换柱,重置密码。这种一般是由于前面2步骤中已经验证了身份,然后3步骤重置密码的时候没有对用户身份进行持续性的验证导致的。

WooYun: like团任意用户密码重置(秒改)

WooYun: 科大讯飞某系统任意账号重置密码漏洞

WooYun: 某同志手机交友应用200W用户密码任意重置(可拐走别人男友)

5 有的时候虽然加密字符串的算法很复杂,但是在重置密码的过程中,要是程序员自己不小心将其泄漏了,那也可以被重置密码。这种属于程序员自己没有将开发调试时候的一些数据在正式上线前去掉导致的。

WooYun: 天天网任意账户密码重置(二)

WooYun: APP终结者11#大连万达电影任意用户账户登录

WooYun: 优酷网任意用户密码修改漏洞(验证可以秒改)

6 有的时候利用邮箱的url重置密码,虽然不存在#3 #4 #5的情况。但是由于加密算法过于简单而被破解,导致密码重置。这种一般都是一些简单的加密算法,将一些关键参数比如用户名、邮箱、手机号、验证字符、时间戳等,进行一定的规则的组合然后进行md5、base64加密。

WooYun: djcc舞曲网任意用户密码重置漏洞(已证明)

WooYun: 猥琐方式再次重置拉手网用户密码

WooYun: 金蝶云之家博客任意用户密码重置

WooYun: 当当网任意用户密码修改漏洞第三次

7 重置密码一般需要四个步骤:1.输入账户名2.验证身份3.重置密码4.完成。有时候当你进行了1之后,直接去修改URL或者前端代码去进行3步骤从而也能成功的绕过了2的验证去重置密码。这种一般是由于没有对关键的身份验证的参数进行追踪导致的。

WooYun: 世峰户外商城设计缺陷任意重置密码

8 有时候修改密码的时候会给邮箱或者手机发送一个新密码,那么抓包将手机号或者邮箱改成我们自己的会怎么样呢?这种一般是由于没有验证手机号或者邮箱的对应身份导致的。

WooYun: 万达某重要平台任意用户密码重置

0x03 需要别人交互


9 有的时候CSRF利用好的话,也可以重置用户甚至是管理员的密码。这种一般是由于登录帐号后重置密码或者绑定邮箱、手机号的时候没有token也没有验证refer导致的。

WooYun: 糗事百科另类方式重置用户密码

WooYun: 看我如重置暴风影音账户密码(需要与用户互交)

WooYun: 土豆网邮箱绑定csrf(可导致劫持账号)

10 有时候XSS漏洞也可以重置密码,当然这种也是因为本身重置密码这里就有其他的设计缺陷。这种一般是用XSS劫持了账户后,由于某些奇怪的设计造成的。

WooYun: pptv视频上传审核通过后储存型xss(百余条用户信息可利用有vip可改密码劫持)

WooYun: 宜搜存储型XSS+重置密码利用

通过了解以上10种常见的重置密码的漏洞,你是不是也感觉收获了蛮多的额。