CYH博客CYH博客

天行健,
君子以自强不息。

任意密码重置总结--wooyun整理

找这个漏洞时候,先把流程过一遍,两遍,观察数据包,测试时候就可以比较哪个不一样,就可以知道修改什么了。



1、捉返回包,改true、1、success这些,绕过验证码验证

任意密码重置总结(图1)


2、跳过验证步骤:

成因:对修改密码的步骤,没有做校验,导致可以输入最终修改密码的网址,直接跳转

修改地址,直接跳到设置新密码的url,跳过验证步骤

找到下一步的url

测试方法:首先使用自己的账号走一次流程,获取每个步骤的页面链接,然后记录输入新密码的对应链接。重置他人用户时,获取验证码后,直接进入输入新密码对应链接到新密码的界面,输入密码重置成功。

任意密码重置总结(图2)

任意密码重置总结(图3)

一个新浪例子:

记得就好,现在还不怎么理解。






3、四位验证码爆破

任意密码重置总结(图4)


4、今天群里老哥一个思路,获取验证码是通过验证码实例化获取,如何从其他地方获取到验证码,然后用这验证码去重置密码,也是可行的。例如,登录处获取到验证码,然后得到的验证码用到重置密码处,就成功通过验证了。


5、利用自己邮箱/手机号码,获取到正确验证码。然后输入正确验证码,用户名改变,然后去掉检测用户名的参数inoutNickname,就可以跳到重置密码页面,而且重置别人的。

任意密码重置总结(图5)



6、利用cookie,正确验证的数据包中的电话号码是加密过后的。思路,只要修改了电话号码,cookie中的加密后的电话号码,就可以触发重置密码成功

任意密码重置总结(图6)

任意密码重置总结(图7)


7、浏览器两个页面之间的跳转。例如我用正确的手机号码和验证码到了输入新密码的界面,停住,然后再开个页面,随便输入用户,然后获取验证码,这时候,再刷新下输入新密码的界面。如果新密码界面url可以修改关于用户信息就修改,没有就刷新。

任意密码重置总结(图8)


任意密码重置总结(图9)

任意密码重置总结(图10)


8、修改用户ID,这个很简单。但通常要观察被加密之后的数据,用户ID通常会被加密,仔细观察,可以通常自己两个用户来测试下。直接修改ID的漏洞,不多了,观察加密过后的数据,或许就是加密过后的用户ID

任意密码重置总结(图11)


9、利用数据包跳转的页面,直接更换页面代码为输入正确验证码页面,就可以成功跳转到输入新密码页面。

思路:照常输入别人用户名和验证码,然后捉包,发现过程会有个包是请求错误页面,这个时候我们把请求错误页面修改成请求输入新密码页面,就可以成功跳转到输入新密码输入页面,进行密码重置。要注意下输入新密码的页面代码,比如这个例子有value值,这个值修改成功我们想要修改的用户value值

任意密码重置总结(图12)

任意密码重置总结(图13)

任意密码重置总结(图14)

任意密码重置总结(图15)

任意密码重置总结(图16)


推文总结:


1、验证码回传(重置凭证泄露)

可能验证码就返回在response包中


2、验证码未绑定用户

成因:输入手机号码和验证码只考虑到手机号对不对和验证码对不对,未对该验证码是否与手机号匹配做验证


3、用户混淆

成因:密码找回逻辑含有用户标识(用户名、用户ID、cookie),接收端(手机、邮件)、凭证(验证码、token),当前步骤等四个要素。若这个要素没有完全关联,则可能导致密码重置漏洞 

参考链接:https://www.freebuf.com/articles/web/162152.html


4、接收端可篡改

成因:重置密码时,凭证会发送到手机上,通过替换手机号,可以使用自己的手机号接收验证码

还有还有一种情况比较特殊,也是手机接收验证码,但是整个验证流程没有让你输入手机号码,重置过程中,一般是第一步绑定用户名的地址,但是如果后面几个流程中还会发送用户名这个参数(这个时候发送的参数可能是单独用于在数据库查询手机号,这个时候我们输入的用户名就很大可能带入了数据库查询,所以可能存在SQL注入)

参考链接:https://www.freebuf.com/articles/database/161495.html


5、token可以预测,有些邮箱验证,会发来token验证,这时候多拿几个token来研究规律


6、基于时间戳生成的token

成因:部分程序使用当前时间戳MD5加密后的值作为token

测试方法:拿两个账号,第一次拿自己的账号走一遍流程,获得一个时间戳,第二次拿admin的账号走一遍流程,第三次再拿自己的账号走一遍,然后获得一个时间戳。这样我们就获得两个时间戳,而管理员的时间戳就是这两个时间戳之间,就利用爆破就可以爆破出重置管理员的时间戳,然后构造正确的链接,完成重置


7、找回密码的凭证脆弱

测试方法:找规律,拿到几个凭证来找规律,就是像上面说的弱token一般


8、测试方法:攻击者可以通过发送一组电子邮件地址而不是单个电子邮件地址向任意电子邮件发送密码重置链接。

任意密码重置总结(图17)


9、重置凭证未校验

参考链接:https://www.freebuf.com/articles/web/164090.html

Tips:有些重置密码的模块可以通过回答密保问题来重置密码。

但是有部分用户并没有设置密保问题,那么就有可能我们提交任意的密保答案都可以重置这些用户的密码。

怎样确认这些用户是否存在密保呢?

一般通过密保重置密码的场景,第一步都会让我们先输入用户名,发送请求包后我们可以拦截response包,很多时候,我们可以发现用户存在且有密保、用户存在但没有密保、用户不存在这三种情况返回包都不一样,我们可以使用burp进行爆破找出存在但没有密保的用户名。


10、万能验证码

有些开发者,会设置一些密码来验证,比如888888、000000

这样的万能验证码却没有删除,就可以利用了


关注一个老洞

http://0day5.com/archives/1043/

任意密码重置总结(图18)



未经允许不得转载:CYH博客 » 任意密码重置总结--wooyun整理
分享到: 更多 (0)

CYH博客 带给你想要内容

联系我们