[典型漏洞分享]YS忘记密码机制设计存在缺陷,导致任意用户口令均可被修改【高】
记录了安全测试过程中发现的一些典型的安全问题
YS忘记密码机制存在缺陷,可导致任意用户口令被修改【高】
问题描述:
YS网站提供用户密码修改功能,当用户忘记密码时可通过该功能找回密码,但该修改密码的流程存在如下问题:
1、 手机验证码过短(只有4位且为纯数字),很容易被暴力破解。
2、 只单纯通过手机验证码来判断用户的真伪,在输入手机验证码后直接在页面上进行密码修改,而不是采用更安全的多重认证的方式。
测试步骤:
1、 安装burp并启动http请求拦截功能。
2、 打开YS首页,选择“修改密码”,如图:
3、 在修改密码对话框中输入一个要修改密码的用户名,如下图所示:
4、 点击“下一步”,弹出输入手机验证码的对话框,任意输入一个错误的验证码,并提交,burp将抓到用于向用户手机发送验证码的http请求,同时将该请求发送到burp的repeater,待后面进行重放,如图:
5、 使用burp的repeater功能对该http进行多次重放,每次均修改checkcode的值,由于checkcode为4位纯数字,范围为1-9999,故使用自动化的方式(比如burp的intruder功能)可进行暴力破解,进而获得用户的checkcode,如下图所示:
6、 在手机验证码的对话框中重新输入暴力破解出来的正确的checkcode,即可在当前页面上对用户的密码进行修改!
问题扩展:
结合自动化方法,攻击者即可修改YS任意用户的密码。
解决建议:
1、 用户提交手机验证码的请求不需要带上手机号和用户名等信息,可以直接通过cookie从数据库查询,避免被恶意篡改。
2、 为手机验证码提供放暴力破解机制,即如果尝试3次提交手机验证码错误,则立马让该手机验证码失效,此外,正常情况下,手机验证码最初有效期为半个小时。
3、 当用户密码被修改时或者用户异地登录时应给予登录或手机提醒。