猫宁!!!

之前在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. commons-codec-1.9.jar 是做什么用的?

    commons-codec用来处理常用的编码方法的工具类包,例如DES.SHA1.MD5.Base64,URL,Soundx等等. 示例: 不可逆算法 1.MD5 String str = " ...

  2. 前端每周清单第 49 期:Webpack 4 Beta 尝鲜,React Windowing 与 setState 分析,Web Worker 实战

    前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点:分为新闻热点.开发教程.工程实践.深度阅读.开源项目.巅峰人生等栏目.欢迎关注[前端之巅]微信公众号(ID: fron ...

  3. Java 中 && 和 & 的区别

    在java中&和&&都属于逻辑运算符,都是判断两边条件为真时为真,否则则为假. 在程序中: int i = 1; if ((i++ > 1) & (i++ > ...

  4. Hadoop-No.12之数据采集的时效性

    数据采集的时效性,指的是可进行数据采集的时间与Hadoop中工具可访问数量的时间之间的间隔.采集架构的时间分类会对存储媒介和采集方法造成很大的影响. 一般来说,在设计应用的采集构架之前建议使用以下分类 ...

  5. oracle数据库 ORA-01461: can bind a LONG value only for insert into a LONG column解决方案

    oracle编码分为ZHS16GBK.utf8网上很多都是说驱动包 ojdbc6 和 ojdbc14 的问题实际上在遇到这个问题是需要同时加载两个jar 分别是class12.jar和nls_char ...

  6. springboot与springcloud版本不对应导致报错java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava/lang/Object;)V

    springboot启动报错: 10:31:50.221 [main] ERROR org.springframework.boot.SpringApplication - Application r ...

  7. The Cost of JavaScript --------引用

    tl;dr: 想要保持页面的快速运行,你需要仅加载当前页面所需的 JavaScript 代码.优先考虑用户所需,之后运用代码分离懒加载其他内容. Is it happening - 在这个时期,你可以 ...

  8. vue 剪切图片上传头像,使用 cropperjs 实现

    我使用的是vue,移动端的项目. 官网地址:cropperjs GitHub地址:https://github.com/fengyuanchen/cropperjs/blob/master/READM ...

  9. 博弈dp入门 POJ - 1678 HDU - 4597

    本来博弈还没怎么搞懂,又和dp搞上了,哇,这真是冰火两重天,爽哉妙哉. 我自己的理解就是,博弈dp有点像对抗搜索的意思,但并不是对抗搜索,因为它是像博弈一样,大多数以当前的操作者来dp,光想是想不通的 ...

  10. 关于博主&&联系博主

    关于我自己 天朝一名普通理科男高中生,现正读高二. 一位正在求学之路上奋斗的蒟蒻.很爱听歌,欧美为主,霉霉死粉.交际方面比较弱. 常用编辑器为DEV-C++,编译器为gcc,常用OJ是洛谷 基本熟练使 ...