web渗透测试----22、业务逻辑漏洞--(2)任意用户密码重置

文章目录

  • 一、验证码设计缺陷
    • 1、验证码不失效
      • 1.1、检测方法
      • 1.2、修复方法
    • 2、仅判断验证码是否正确
      • 2.1、检测方法
      • 2.2、修复方法
    • 3、验证码在响应中返回
      • 3.1、检测方法
      • 3.2、修复方法
  • 二、绕过验证方式
    • 1、无任何验证
      • 1.1、检测方法
      • 1.2、修复方法
    • 2、修改返回包,绕过验证
      • 2.1、检测方法
      • 2.2、修复方法
    • 3、直接访问设置密码界面
      • 3.1、检测方法
      • 3.2、修复方法
    • 4、邮箱中密码重置连接可fuzzing
      • 4.1、检测方法
      • 4.2、修复方法
  • 三、权限未绑定
    • 1、未判断手机号是否与用户绑定
      • 1.1、检测方法
      • 1.2、修复方法
    • 2、Session覆盖导致任意用户密码重置
      • 2.1、检测方法
      • 2.2、修复方法
    • 3、越权导致修改任意用户密码
      • 3.1、检测方法
      • 3.2、修复方法
  • 四、数据库未授权导致


任意用户密码重置漏洞是:未经用户本身授权,非法修改任意账号密码的一种攻击方式;任意用户密码重置影响系统的稳定性,可由此作为攻击入口,进行持续攻击。

常见的任意用户密码重置类型大致分为四种:
1、验证码设计缺陷
2、绕过验证方式
3、权限未绑定
4、数据库未授权访问

一、验证码设计缺陷

1、验证码不失效

1.1、检测方法

获取验证码时,由于验证码不失效,可针对验证码进行枚举。

1.2、修复方法

1、优先进行验证码的校验。
2、验证码校验过一次即失效,再次验证需要重新生成新的验证码。
3、设定提交校验的验证码的有效期,时间不宜过长。
4、验证码的校验应当在服务器端进行,避免客户端校验,以防绕过。

2、仅判断验证码是否正确

2.1、检测方法

重置密码过程中,通过手机号获取验证码,但重置密码时仅校验了验证码是否正确,未对手机号和验证码的关联性做验证。

2.2、修复方法

校验手机号和验证码是否匹配。

3、验证码在响应中返回

3.1、检测方法

发送获取验证码的请求,抓取响应,在响应包中可查看验证码。

3.2、修复方法

验证码避免返回在响应中。


二、绕过验证方式

1、无任何验证

1.1、检测方法

密码重置页面五任何验证,通过账号,给定验证码及新密码即可更改。

1.2、修复方法

验证手机用户的有效性,获取短信验证码,确认重置密码时,验证手机号与短信验证码是否匹配。

2、修改返回包,绕过验证

2.1、检测方法

此方法一般是通过拦截响应包,修改响应中的code等参数,将其更改未成功验证的值,进行绕过。

2.2、修复方法

设置密码界面,提交修改密码处再次验证验证码。

3、直接访问设置密码界面

3.1、检测方法

重置密码的链接可在前端js中获取,直接访问重置密码的URL进行用户密码重置。

3.2、修复方法

修改js代码,删除密码重置api,严格控制用户权限。

4、邮箱中密码重置连接可fuzzing

4.1、检测方法

找回密码时,系统发送一个找回密码的链接到邮箱中,访问此链接,在URL中会明文显示出邮箱,并在页面中显示处邮箱和手机号,输入新密码,成功设置。

4.2、修复方法

URL中不明文显示email、id、手机号等敏感信息;手机号等信息不自动显示、链接中增加随机值校验。


三、权限未绑定

1、未判断手机号是否与用户绑定

1.1、检测方法

重置密码时未鉴权、未校验手机号是否与此用户匹配

1.2、修复方法

对用户进行鉴权,判断id是否为当前用户的id;更新密码时,验证旧密码。

2、Session覆盖导致任意用户密码重置

2.1、检测方法

用攻击者的session替换攻击者的session,绕过系统验证,重置被攻击者的密码。

2.2、修复方法

判断session与用户的匹配关系。

3、越权导致修改任意用户密码

3.1、检测方法

更新密码时未进行鉴权,可通过修改请求中ID等参数修改其他用户密码。

3.2、修复方法

对用户进行鉴权,判断id是否为当前用户的id;更新密码时,验证旧密码。


四、数据库未授权导致

数据库未授权访问,导致可直接访问数据库中的users表,修改任意用户的密码。
修复建议:对数据库设置访问权限,禁止未授权访问。

你可能感兴趣的:(#,web安全,渗透测试,任意用户密码重置,逻辑漏洞)