任意用户密码修改逻辑漏洞的修复办法

         可以通过篡改用户名或身份证、暴力解读验证码等方法修改/重置任意账户的密码。测试方法:

修改密码的步骤一般是检查用户的原始密码是否正确,然后让用户输入新密码。修改密码机制的绕过方法如下:

1.如果输入新密码的界面可以直接访问,则可以在未知原始密码的情况下直接修改密码,通常可以通过了解别人的用户名来任意修改别人的密码。

2.如果系统没有验证修改密码的用户身份,在递交修改密码请求时,攻击者可以通过输入密码,将用户名或用户ID修改为别人,成功修改别人的密码。

3.修改密码时,系统需要确认电子邮件或手机邮件,如果应用程序没有检查用户输入的邮件地址和手机号码,攻击者通过填写自己的邮件地址或手机号码接受修改密码的链接和检查代码,修改别人的密码。

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

1.通过正常手段获得重置密码的链接,推测链接的构成结构和内容(例如用户名和时间戳的MD5值)。在了解别人邮箱的情况下,结构重置别人密码的链接。

2.在知道别人的手机号码的情况下,手机认证码重置别人的密码。

我遇到的密码重置脆弱性是在忘记密码时自动将手机邮件发送到绑定用户的手机上,我做的是在他发送之前拦截,修改手机号码,接受手机邮件,重置用户密码。另一个是手机邮件验证成功后,重新设定密码时拦截数据包,通过修改systemnumber、systemid等方法修改别人的账户密码。

密码修改功能通常通过分阶段实现,攻击者在不知道原始密码的情况下绕过程序修改用户密码。

重置密码的过程一般是首先验证注册的邮箱和手机号码,获得重置密码的链接(一般包括唯一的文字串)或者验证代码,访问重置密码的链接或者输入验证代码,最后输入新的密码。密码重置机制绕过攻击是指在未知别人重置密码链接或手机认证码时,通过结构重置密码链接或举起手机认证码直接重置别人的密码。

修复方案:

1.一次填写检查信息(原始密码、新密码等)后,递交修改密码请求。

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

3.不受验证信息的手机、邮箱等信息不应全部明确传达给客户,不应屏蔽手机、邮箱等信息,不应返回客户端。

4.验证原始密码时,限制输入原始密码的错误次数,防止攻击者暴力破解原始密码。

5.重置密码链接的重要信息应随机化,无法预测(例如token机制),禁止将重要信息返回客户端。

分享: