zoukankan      html  css  js  c++  java
  • 任意用户密码重置的几种常见姿势

     

    来源:https://link.jianshu.com/?t=https://www.ichunqiu.com/course/59045

    漏洞描述:

    可通过篡改用户名或ID、暴力破解验证码等方式修改/重置任意账户的密码。

    测试方法:

    密码修改的步骤一般是先校验用户原始密码是否正确,再让用户输入新密码。修改密码机制绕过方式大概有以下三种:

    1. 如果输入新密码的接口可以直接访问,那么在未知原始密码的的情况下即可直接修改密码,通常知道了他人的用户名即可任意修改他人的密码。

    2. 如果系统未校验修改密码的用户身份,那么在提交修改密码请求时,攻击者通过输入密码,将用户名或者用户ID修改为其他人的,即可成功修改他人的密码。

    3. 当修改密码时系统需要电子邮件或者手机短信确认,而应用程序未校验用户输入的邮箱和手机号,那么攻击者通过填写自己的邮箱或手机号接收修改密码的链接和验证码,以此修改他人的密码。

    密码重置机制绕过攻击方式主要有以下两种:

    1. 通过正常手段获取重置密码的链接,猜解链接的组成结构和内容(如用户名或者时间戳的MD5值)。在得知他人邮箱的情况下,构造重置他人密码的链接。

    2. 在得知他人手机号的情况下,通过穷举手机验证码重置他人的密码。

    风险等级:

    【高危】:其它用户的密码被修改/重置成功

    修复方案:

    1. 一次性填写校验信息(原始密码、新密码等)后再提交修改密码请求。

    2. 对客户端提交的修改密码请求,应对请求的用户身份与当前登录的用户身份进行校验,判断是否有权修改用户的密码并对原始密码是否正确也进行判断。

    3. 不应将用于接收验证信息的手机、邮箱等信息全部明文传到客户端,应对手机、邮箱等信息进行屏蔽处理,或不将此类信息返回到客户端。

    4. 对原始密码进行了验证的情况下,限制输入原始密码的错误次数,防止攻击者暴力破解原始密码。

    5. 重置密码链接中的关键信息应随机化,不可预测(例如token机制),且禁止将关键信息返回到客户端。



  • 相关阅读:
    codesmith 连接mysql
    数据库 价格字段 设置 decimal(8,2),价格为100W,只显示999999.99
    AOP和IOC
    Android Studio 每次运行都会再下载一遍,修改
    gradle 的jar下载到哪里了
    遇到的坑
    Error:Failed to resolve: :Base:
    re-download dependencies and 无法下载jar 的解决
    DI是实现面向切面和面向抽象的前提
    基础才是重中之重~ConcurrentDictionary让你的多线程代码更优美
  • 原文地址:https://www.cnblogs.com/relax1949/p/12096337.html
Copyright © 2011-2022 走看看