PJzhang:任意密码重置的常规姿势
猫宁!!!
之前在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:任意密码重置的常规姿势的更多相关文章
- token安全之任意密码重置
前言 偶然间挖了一个漏洞是密码重置,挖掘过程很有趣,可以参考下. 挖掘过程 在说明之前我们可以先走下正常流程,这样才方便查漏~ 正常流程 第一步骤: 正常填写完,点击下一步发送请求: POST /[U ...
- 任意用户密码重置的十种姿势=====>学习笔记!
原学习视频链接:https://www.butian.net/School/content?id=214%E2%80%98 1.验证码不失效 原因:获取的验证码缺少时间限制,仅判断验证码是否不正确而未 ...
- zzcms8.2#任意用户密码重置#del.php时间盲注#复现
00x0 引言 早上起来,发现seebug更新了一批新的洞, 发现zzcms8.2这个洞好多人在挖,于是我就默默的踏上了复现之路(要不是点进去要买详情,我何必这么折腾~) 环境:zzcms8.2(产品 ...
- PHPCMS v9.6.0 任意用户密码重置
参考来源:http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0173130.html 他分析的好像不对.我用我的在分析一次. 先来看poc: /inde ...
- [web 安全]逻辑漏洞之密码重置
原文:http://wooyun.jozxing.cc/static/drops/web-5048.html 密码找回逻辑一.用户凭证(密码找回的凭证太弱,暴力破解)1.当当网任意用户密码修改漏洞(h ...
- MongoDB·Windows下管理员密码重置解决方案
阅文时长 | 1.07分钟 字数统计 | 1730.4字符 主要内容 | 1.问题切入 2.详细步骤 3.声明与参考资料 『MongoDB·Windows下管理员密码重置解决方案』 编写人 | SCs ...
- WEB安全新玩法 [4] 防护邮箱密码重置漏洞
大部分具有账号系统的应用都会提供重置用户登录密码的功能,常见方式之一是:用户输入自己的邮箱地址或手机号,应用向这个邮箱或手机号发送验证码,用户将收到的验证码输入应用中即可完成密码重置.这一过程容易因设 ...
- MySQL忘记密码,或:root密码重置报错:mysqladmin: connect to server at 'localhost' failed的解决方案
MySQL root密码重置报错:mysqladmin: connect to server at 'localhost' failed的解决方案 1 登陆失败,mysqladmin修改密码失败 ...
- mysql server安装及密码重置
官网上能下载到的mysql安装分两种:msi和zip安装 msi安装比较简单,直接下一步. 主要说zip格式的安装: 1.解压. zip解压后的文件夹改名后(也可以不改名)放在喜欢的位置.例如我放在C ...
随机推荐
- gitlab qq邮件配置
https://blog.csdn.net/u010856284/article/details/83650364 gitlab 11.4以后的添加stmp根据官网出现了配置,导致不能测试通过,以下是 ...
- haproxy和keepalived的理解(转载)
关于此两者,随便google一下都会有大量的文章,因此这里也不用介绍如何来进行安装和配置了.主要从一个整体方案的角度来描述什么要这样做,以及这样做所解决的问题. 所有的系统,都是先经历一个单台机器搞所 ...
- c++实例之通讯录管理系统之清空联系人功能(七)
#include<iostream> using namespace std; constexpr auto MAX = ; //联系人结构体 struct Person { string ...
- 强制类型转换之String类型
㈠布尔(Boolean)类型 布尔值只有两个,主要用来做逻辑判断 true 表示真 : false 表示假 使用typeof检查一个布尔值时,会返回boolean ㈡Null和Unde ...
- maven的概念-01
1.maven 简介 maven是Apach软件基金会维护的一款自动化构建工具: 作用是服务于java平台的项目构建和依赖管理: 2.关于项目构建 1)java代码 Java是一门编译型语言,.j ...
- swagger2 常用注解说明
常用到的注解有: Api ApiModel ApiModelProperty ApiOperation ApiParam ApiResponse ApiResponses ResponseHeader ...
- django 网站上传资源的显示与配置
1. 上传资源的配置 1. 首先在项目里创建一个名称叫media的文件夹专门保存用户上传 2. settings.py文件配置上传资源的路径 # 上传资源路径,如果图片,上传文件等 MEDIA_UR ...
- TCP时间戳选项Timestamp
时间戳选项发送方在每个报文段中放置一个时间戳值.接收方在确认中返回这个数值,从而允许发送方为每一个收到的ACK计算RTT(我们必须说“每一个收到的ACK”而不是“每一个收到的报文段”,是因为TCP通常 ...
- Java-类加载(类的生命周期)
类从被加载到虚拟机内存开始,到卸载出内存为止. 解析阶段在某些情况下可以在初始化后再开始,这是为了支持 Java 语言的运行时绑定. 一.类加载时机 JVM 规范没有强制约束类加载过程的第一阶段(加载 ...
- [占位符 ]
在做项目的时候,数据库中的数据会存在空值;这样,我们需要在前台给它加以判断, 如果我们不加以判断也是可行的,我们需要添加一个空白占位符 空白占位符 是个不错的选择,这样我们的页面显示数据的时候就不会 ...