逻辑漏洞之任意密码重置

漏洞简介


 什么是密码重置?

顾名思义,就是修改掉原来的密码

密码重置的途径有哪些?

1、一个网站,一般我们可以登录进入个人中心,直接修改密码

2、当我们忘记密码是还可以使用系统自带的密码找回功能进行密码修改

什么是密码重置漏洞?

密码重置这个功能本身没有问题,但如过对密码重置功能的验证机制不够完善就形成了漏洞

密码重置漏洞形式

一、基于修改密码的

如果后台没有对旧密码进行验证,就直接让输入新密码

  1. 第一种方式,如果存在csrf漏洞,我们就可以利用一波
  2. 如果存在越权漏洞,就可以直接修改其他人的密码
  3. 点击修改后抓包测试,观察数据库包有没有验证类似cookie随机数,如果没有的话,可以尝试修改用户名、手机号或者uid来尝试重置其他密码

如果后台是通过向注册手机或者注册邮箱来重置密码的,关于验证码的漏洞我们都可以尝试,这种方式的前提是你已经通过某种方式进入到了对方的个人中心,所以意义不太大

二、基于找回密码的

一般情况下当我们点击找回密码的时候都是通过验证手机号或者验证邮箱,这就又变成了验证码的问题

  1. 验证码发送后前端返回 
  2. 为限制验证码次数导致验证码爆破
  3. 验证码有规律或可控 
  4. 验证码被放在返回包中
  5. 输入验证码后通过修改响应包的状态来重置密码
  6. 验证码为空(原理就是后台未考虑验证码为空的情况,直接就是如果存在,然后下面仅判断了存在的情况)绕过或者万能验证码
  7. 拦截数据包,发送验证码时可以向多个手机号发送验证码,这个时候就可以添加个云短信,直接接受验证码完成修改等等

还有一种情况就是,找回密码的哥哥页面没有实质型关联,我们可以跳过手机验证页面,直接访问重置密码页面

什么是任意密码重置

以下是个人理解

首先要说一下任意密码重置,肯定比密码重置漏洞危害性更大

那什么才能叫任意呢?

我觉得提到任意,肯定是我们可以获取大部分的账户,上述基于修改密码的第三条,如果修改uid,可以成功修改其他用户密码,这肯定就算一个任意密码重置,因为我们可以注册两个用户得出uid规则,可以被枚举

那其他类型的密码重置漏洞呢?其他类型想要产生任意效果需要配合用户枚举漏洞

最常见的自然是莫过于,过于友善的登陆页面提示,比如:用户名不存在、密码错误之类的

还有就是在注册页面,基本都会提示该用户已注册,这没什么有效的方式,加个token防止数据包被重放吧,当然人家也可能用的爆破

其他的方式的话,也许可以想到信息泄露或者社工。。不在列举

漏洞案例


验证码前端返回:乌云漏洞库

验证码可控:乌云漏洞库

验证码在响应包中:乌云漏洞库

修改响应包状态:乌云漏洞库

验证码爆破:乌云漏洞库

跳过认证直接修改:乌云漏洞库

先这些吧,其他的漏洞类型可以去乌云镜像查找 镜像地址

 

### 致远OA用户密码重置安全漏洞及其修复方法 #### 漏洞概述 致远OA存在一个高危级别的任意用户密码重置漏洞,允许未经授权的攻击者通过构造特定的数据包来触发未授权的密码重置行为。这可能导致攻击者获得合法用户的账户控制权限,并进而实施更严重的攻击活动[^3]。 #### 漏洞影响范围 受影响的产品版本包括但不限于V5/G6 V8.1SP2、V8.2等系列版本。这些版本中存在的缺陷使得它们容易受到上述提到的攻击方式的影响。 #### 修复方案详解 为了有效防范此类攻击的发生,在开发层面应当采取如下措施: - **增强身份验证逻辑** 对于任何涉及更改敏感信息的操作(如修改密码),应该严格检验发起者的身份合法性。具体来说就是确保只有经过认证后的会话才能发送有效的变更请求,并且每次操作都需重新确认一次当前登录状态下的真实意图。此外还需加入额外的身份验证因素,比如短信验证码或邮件令牌等形式作为辅助手段以增加安全性[^2]。 - **优化前端交互设计** 避免直接向浏览器端暴露过多不必要的个人信息字段(例如手机号码、电子邮箱地址)。对于确实必要的提示性文字,则尽可能采用部分隐藏的方式显示给用户查看即可满足业务需求的同时减少潜在风险点的存在概率。 - **引入防暴力破解机制** 设置合理的尝试次数上限以及相应的锁定策略,当检测到来自同一IP地址连续多次失败记录时自动对该源进行短暂封禁处理直至管理员介入审核为止。这样既能够阻止恶意程序批量测试弱口令组合的行为发生又能保障正常用户的正常使用体验不受干扰。 - **改进URL参数加密算法** 使用高强度哈希函数生成唯一性的Token字符串代替原有的简单数值型标识符参与到整个流程当中去。这样一来即使有人截获到了完整的HTTP GET请求也无法轻易解析出其中所携带的具体含义从而达到保护隐私的目的。 ```python import hashlib, time def generate_secure_token(user_id): timestamp = str(int(time.time())) random_salt = 'some_random_string' token_input = f"{user_id}{timestamp}{random_salt}" secure_token = hashlib.sha256(token_input.encode()).hexdigest() return secure_token ``` #### 后续维护建议 官方已经针对这个问题发布了专门的安全补丁文件供客户下载安装使用。强烈推荐各机构尽快安排技术人员依照指导手册完成相应升级工作以免遭受不必要的损失[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值