zoukankan      html  css  js  c++  java
  • 任意用户密码重置(五):重置凭证可暴破

    在逻辑漏洞中,任意用户密码重置最为常见,可能出现在新用户注册页面,也可能是用户登录后重置密码的页面,或者用户忘记密码时的密码找回页面,其中,密码找回功能是重灾区。我把日常渗透过程中遇到的案例作了漏洞成因分析,这次,关注因重置凭证可暴破导致的任意用户密码重置问题。

    传送门:

    任意用户密码重置(一):重置凭证泄漏

    任意用户密码重置(二):重置凭证接收端可篡改

    任意用户密码重置(三):用户混淆

    任意用户密码重置(四):重置凭证未校验

    密码找回需要鉴别用户的合法身份,证明你就是你,通常有两种做法,一是网站将重置验证码发至用户绑定的邮箱或手机号,用户持重置验证码证明你就是你,二是用户输入密码保护问题对应的答案。其中,验证码、密保答案就是重置密码的重要凭证。有些网站生成四位数字的重置验证码,复杂度较低,[0000, 9999] 也就一万种组合,在如今的计算能力和网络带宽条件下,顺手的工具三五分钟的功夫就能枚举完。如果服务端又未设置验证码的存活有效期、未限制高频访问,那么极易暴破。

    案例一

    密码找回页面 http://www.xxxx.com/find-pw.html 用攻击者账号 13908081024 进入密码找回全流程,输入图片验证码、选择手机找回、获取短信验证码,发现短信验证码为 4 位数字且短信内容上未看到有效期信息,所以,可暴破短信验证码,进行后续的重置流程。

    用账号枚举漏洞遍历得到的普通手机号 13908093346 为例,进入密码找回流程,提交短信验证码:

    任意用户密码重置(五):重置凭证可暴破

    其中,1234 是我随便输入的错误的短信验证码,需要对 code 参数值进行暴破以找出正确的短信验证码。

    具体而言,我将该请求中的 code 参数值定义为枚举变量、以 [0000, 9999] 为字典,设定 32 个线程进行暴破:

    任意用户密码重置(五):重置凭证可暴破

    很快暴出短信验证码为 6909:

    任意用户密码重置(五):重置凭证可暴破

    提交短信验证码后顺利进入新密码设置页面,重置密码设为 PenTest1024 后提交,服务端返回“修改成功”:

    任意用户密码重置(五):重置凭证可暴破

    尝试用 13908093346/PenTest1024 登录,验证成功:

    任意用户密码重置(五):重置凭证可暴破

    案例二

    密码找回页面 http://xx.xxxx.com/xxxx/findpassword 用攻击者账号 13908081024 进入密码找回全流程,输入图片验证码、选择手机找回、获取短信验证码,发现短信验证码为 4 位数字且短信内容上未告知有效期,所以,可暴破短信验证码,进行后续的重置流程。

    用用户名枚举得到的普通手机号 15012804897 为例,进入密码找回流程,提交短信验证码:

    任意用户密码重置(五):重置凭证可暴破

    其中,1234 是我随便输入的错误的短信验证码,需要对 auto 参数进行暴破以找出正确的短信验证码:

    任意用户密码重置(五):重置凭证可暴破

    很快暴出短信验证码为 9997,输入后进入新密码提交页面,重置密码为 PenTest1024 后提交:

    任意用户密码重置(五):重置凭证可暴破

    尝试用 15012804897/PenTest1024 登录,验证成功:

    任意用户密码重置(五):重置凭证可暴破

    加固措施

    密码重置凭证强度提高,建议六位数字,有效期十分钟,并且验证码应校验一次后立即作废。另外,服务端应限制枚举等恶意请求。

    本文原创作者:yangyangwithgnu  转自 www.freebuf.com

  • 相关阅读:
    redis安装
    redis的使用场景和基本数据类型
    (传输层)tcp协议
    async/await
    Promise对象
    对称加密与非对称加密
    Js遍历数组总结
    HTTPS加密传输过程
    HTML节点操作
    Js的new运算符
  • 原文地址:https://www.cnblogs.com/lic1005/p/8690584.html
Copyright © 2011-2022 走看看