猫宁!!!

之前在360补天看过carry_your分享的46分钟短视频“任意用户密码重置的10种姿势”。

在京东SRC安全小课堂第89期,也有一篇他的文章:web漏洞之逻辑漏洞挖掘。内容朴实无华。

在freebuf上有一个任意密码重置的文章系列7篇不错:任意用户密码重置(作者:yangyangwithgnu)

下面根据真实测试场景对任意密码重置思路梳理一下:

1-短信验证码可以爆破

密码重置的时候,有些网站没有图形验证码,而且短信验证码是4位,可以0000-9999进行爆破。

如果限制频次,可以尝试频繁替换x-forwarded-for(如果有的话)中的源ip,可能会绕过频次限制。

如果对方是6位的短信验证码,而且图形验证码的有效期没有设定或者设定为24h之类,一样可以进行爆破,只是时间成本略高。

如果对方设置了图形验证码,需要测试一下对方的图形验证码是不是真的有效,有些是前端都是失效的,有些是后端失效的,均可以重复利用实现爆破。

有的图形验证码就是一个摆设,你抓包把它给删除也是没有什么问题的,因为服务器也不会校验它存在与否。

如果对方在校验时存在逻辑错误,首先校验短信验证码的正确性,然后校验图形验证码的正确性,那图形验证码同样无效,即使是一次性的,也不行。

2-短信验证码出现在返回包

短信验证码可能出现在返回包中(不一定必须是响应体中),也有可能出现在前端展示界面(遇到过不止1次),也可以出现在下一次请求中的cookie中。发送给你邮箱的重置密码链接出现在返回包中也可以有用(注意location处)。

3-短信验证码不随机

短信验证码当天有效,假如当天是0000,第二天变成了0005,第三天变成0010,如果这种情况出现在注册接口,可以质疑对方自己可能在任意注册数据造假。这种有点少见。

4-不校验手机号和短信验证码有没有绑定

获取短信验证码,提交post参数的时候,将手机号替换为自己的,拿到真实验证码,再重新替换为别人的就好,成功进入下一步。这里有一点说明,你的手机号有时候也要是注册手机号才行,有时候不是也可以。

部分网站输入用户名(假如你不知道对方手机号)就可以获取短信验证码,获取的时候,抓包将手机号改为自己的,获取验证码之后,提交进入下一步。

5-绕过前端验证

这种情况还是挺多见,输入别人的手机号,获取短信验证码,由于不知道对方的短信详情,尝试输入123456,点击下一步,一般都是报错,可以抓包获取响应体的内容,例如修改false为true,修改404为200。最好是自己注册账户走一遍忘记密码流程,记录下成功时的响应体是什么样的,直接替换对方的报错,如果幸运,直接下一步。有的时候,虽然对方提示重置失败,事实上可能已经成功。

6-跳跃式验证

例如重置密码中的第一步url关键词时resetpwd1,进入下一步是resetpwd2,最后一步是resetpwd3,在输入手机号获取了对方的短信验证码之后,修改url中的关键词直接进入最后的密码重置界面,因为你的session id没有变化,服务器认为还是一个人在操作,但是没有校验你有没有提交获取到的短信。绕过前端验证也是一个选择。

7-重置密码最后一步修改用户id

很多时候,用户都有自己对应的id,重置密码时如果出现有userid,可以考虑替换这个id数值,从而实现修改对方密码的目的,甚至可以进行批量重置。如果没有id,但是有用户名,一样可以去修改,尝试进行重置。

8-替换cookie值

使用自己的账户进行密码重置,进行到最后一步的时候抓包中断。使用对方的账户进行第一步获取短信验证码的操作,复制出对方的cookie,并粘贴到自己账户测试时的cookie请求头中,可能会实现重置对方密码的操作。

9-token规律可循

重置密码的链接中有时会有token等的校验凭证,一般都会进行编码,也许时md5,也许是base64等等,可以尝试解码之后,多次比较token的规律(如果不是随机的话),发现其内容的构成,爆破是一个选择。也有可能这个token根本就不变或者每次递增1。

10-密码重置凭证长期有效

邮箱重置的链接,在你完成重置之后3天啦,还是有效;短信验证码可以被反复使用。

任意密码重置的危害大小除了看业务的重要性,能否实现最大化的重置,是个关键点。如果网站或者app存在注册用户批量猜解,那么你就可以找到更多的账号进行重置,显然比只是简单的重置要有效果。如果可以通过userid进行批量密码重置,那么可以说是威力惊人。

上述方法不一定是单独成行,也可以结合使用,同时除了针对忘记密码功能点,在账户注册,账户登录以及后台系统的测试中均可以提供一些思路。

除了一般的任意密码重置,csrf在密码重置或修改的地方,一样可以重置对方的密码,xss漏洞获取对方cookie之后,进入后台,也有机会修改别人密码,毕竟对方的cookie不一定长期有效。这些也都算是任意密码重置的范畴。

PJzhang:任意密码重置的常规姿势的更多相关文章

  1. token安全之任意密码重置

    前言 偶然间挖了一个漏洞是密码重置,挖掘过程很有趣,可以参考下. 挖掘过程 在说明之前我们可以先走下正常流程,这样才方便查漏~ 正常流程 第一步骤: 正常填写完,点击下一步发送请求: POST /[U ...

  2. 任意用户密码重置的十种姿势=====>学习笔记!

    原学习视频链接:https://www.butian.net/School/content?id=214%E2%80%98 1.验证码不失效 原因:获取的验证码缺少时间限制,仅判断验证码是否不正确而未 ...

  3. zzcms8.2#任意用户密码重置#del.php时间盲注#复现

    00x0 引言 早上起来,发现seebug更新了一批新的洞, 发现zzcms8.2这个洞好多人在挖,于是我就默默的踏上了复现之路(要不是点进去要买详情,我何必这么折腾~) 环境:zzcms8.2(产品 ...

  4. PHPCMS v9.6.0 任意用户密码重置

    参考来源:http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0173130.html 他分析的好像不对.我用我的在分析一次. 先来看poc: /inde ...

  5. [web 安全]逻辑漏洞之密码重置

    原文:http://wooyun.jozxing.cc/static/drops/web-5048.html 密码找回逻辑一.用户凭证(密码找回的凭证太弱,暴力破解)1.当当网任意用户密码修改漏洞(h ...

  6. MongoDB·Windows下管理员密码重置解决方案

    阅文时长 | 1.07分钟 字数统计 | 1730.4字符 主要内容 | 1.问题切入 2.详细步骤 3.声明与参考资料 『MongoDB·Windows下管理员密码重置解决方案』 编写人 | SCs ...

  7. WEB安全新玩法 [4] 防护邮箱密码重置漏洞

    大部分具有账号系统的应用都会提供重置用户登录密码的功能,常见方式之一是:用户输入自己的邮箱地址或手机号,应用向这个邮箱或手机号发送验证码,用户将收到的验证码输入应用中即可完成密码重置.这一过程容易因设 ...

  8. MySQL忘记密码,或:root密码重置报错:mysqladmin: connect to server at 'localhost' failed的解决方案

    MySQL root密码重置报错:mysqladmin: connect to server at 'localhost' failed的解决方案   1  登陆失败,mysqladmin修改密码失败 ...

  9. mysql server安装及密码重置

    官网上能下载到的mysql安装分两种:msi和zip安装 msi安装比较简单,直接下一步. 主要说zip格式的安装: 1.解压. zip解压后的文件夹改名后(也可以不改名)放在喜欢的位置.例如我放在C ...

随机推荐

  1. react 项目 mock数据

    前言 我们都知道在实际的开发阶段,后端接口开发是和前端开发同步进行,甚至迟于前端的进度,这就直就导致前端需要等待后端接口的时间. 这种情况就严重导致前端开发缓慢,那这时候前端的开发人员只能写静态模拟数 ...

  2. 逻辑卷----LVM的基础和应用

    逻辑卷管理器 Logical Volume Manager-------逻辑卷宗管理器.逻辑扇区管理器.逻辑磁盘管理器,是Linux核心所提供的逻辑卷管理(Logical volume managem ...

  3. 基于node.js的websocket上传小功能

    一.node.js 在目录里新建index.js var ws = require("nodejs-websocket"); console.log("开始建立连接... ...

  4. redis异步处理

    $reids = new Redis; $redis->connect('localhost',6379); $redis->auth(''); //将数组转换成字符串再存到redis中 ...

  5. js中彻底删除对象属性

    delete运算符可以删除对象的属性,但是仅仅是断开了属性和宿主对象的联系,而不会去操作被删除属性的属性值,所以就需要彻底删除的出现 function myDelete(obj,propertyNam ...

  6. BZOJ 3073: [Pa2011]Journeys Dijkstra+线段树优化建图

    复习一下线段树优化建图:1.两颗线段树的叶子节点的编号是公用的. 2.每次连边是要建两个虚拟节点 $p1,p2$ 并在 $p1,p2$ 之间连边. #include <bits/stdc++.h ...

  7. 交换机配置—— 结合以太通道的VLAN配置

    一.实验目的:建立以太通道使相同VLAN下主机互通 二.拓扑图如下 三.具体步骤如下 (1)S1三层交换机配置 Switch>enableSwitch#config terminalEnter ...

  8. CDOJ 1264 人民币的构造 区间问题+数论

    人民币的构造 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status ...

  9. Anadi and Domino

    C - Anadi and Domino 参考:Anadi and Domino 思路:分为两种情况: ①n<=6,这个时候肯定可以保证降所有的边都放上一张多米诺牌,那么答案就是m ②n==7, ...

  10. (五)C语言之表达式