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 ...
随机推荐
- 【wqs二分 || 决策单调性】cf321E. Ciel and Gondolas
把状态看成层,每层决策单调性处理 题目描述 题目大意 众所周知,贞鱼是一种高智商水生动物.不过他们到了陆地上智商会减半.这不?他们遇到了大麻烦!n只贞鱼到陆地上乘车,现在有k辆汽车可以租用.由于贞鱼们 ...
- Error response from daemon: manifest for elasticsearch:latest not found
五孔 35个 三孔空调 3个 一开五孔 10个 一开双控 10个 两开双控 2个 一开多控 3个 ...
- https://openmaptiles.org/
docker save klokantech/tileserver-gl:latest -o tileserver-gl.tar docker load -i tileserver-gl.tar do ...
- Python3之正则表达式详解
正则表达式 本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索.替换.匹配验证都不在话下. 当然对于爬虫来说,有了它,我们从HTM ...
- PHP四种基本排序
1. 冒泡排序 // 1.冒泡排序法 $array = [12,3,23,2,4,1,0]; function maoPao($arr){ //先判断是不是空数组 if(!empty($arr)){ ...
- Python 运算符优先级
这个表给出Python的运算符优先级(从低到高). 从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合). 这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上 ...
- Ubuntu完全删除nginx
1.删除nginx,-purge包括配置文件 sudo apt-get --purge remove nginx 2.移除全部不使用的软件包 sudo apt-get autoremove 3.罗列出 ...
- Killer Problem (UVA 11898 )
Problem You are given an array of N integers and Q queries. Each query is a closed interval [l, r]. ...
- 两个线程,一个线程打印1~52,另一个线程打印字母A-Z,打印顺序为12A34B56C……5152Z
使用wait,notify实现 public class Test { public synchronized void a() { for (int i = 1; i <= 52; i++) ...
- zabbix添加开机自启
原文链接:https://www.cnblogs.com/zydev/p/6888805.html 1. zabbix客户端的系统服务脚本 1.1 拷贝启动脚本 zabbix的源码提供了系统服务脚本, ...