token安全之任意密码重置
前言
偶然间挖了一个漏洞是密码重置,挖掘过程很有趣,可以参考下。
挖掘过程
在说明之前我们可以先走下正常流程,这样才方便查漏~
正常流程

第一步骤:
正常填写完,点击下一步发送请求:
POST /[URI] HTTP/1.1
Host: [Host]
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: [Referer]
Content-Length: 37
Cookie: [Cookie]
X-Forwarded-For: 127.0.0.1
Connection: close
userName=用户名/手机号/邮箱&code=验证码
获得对应的响应报文:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 217
Connection: close
Server: nginx/1.12.2
{"code":200,"data":{"username":"用户名"
,"mobile":"手机号","email":"邮箱","token":"3c6e0b8a9c15224a8228b9a98ca1531df72f78a365657d56853b6867fb37dc3c444bcb3a3fcf8389296c49467f27e1d6"},"msg":"ok"}
第二步骤:
获取验证码->输入验证码-进入第三步骤:
输入验证码进入第三步骤的请求包:
POST /[URI] HTTP/1.1
Host: [Host]
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: [Referer]
Content-Length: 133
Cookie: [Cookie]
X-Forwarded-For: 127.0.0.1
Connection: close
receiver=email&token=3c6e0b8a9c15224a8228b9a98ca1531df72f78a365657d56853b6867fb37dc3c444bcb3a3fcf8389296c49467f27e1d6&verifyCode=6685
第三步骤重置密码请求包:
POST /[URI] HTTP/1.1
Host: [Host]
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: [Referer]
Content-Length: 133
Cookie: [Cookie]
X-Forwarded-For: 127.0.0.1
Connection: close
token=3c6e0b8a9c15224a8228b9a98ca1531df72f78a365657d56853b6867fb37dc3c444bcb3a3fcf8389296c49467f27e1d6&pwd=mstsecsb123&checkPwd=mstsecsb123
分析流程
因为这里主要的目标是逻辑漏洞,所以其他类型的就不作研究~
分析并验证可疑点:
1.第一步骤返回包中能获取到的东西
| 名字 | 类型 |
|---|---|
| username | 正常 [明文] |
| mobile | 打码 [138***888] |
| 打码 [123***1@..] | |
| token | 正常 [加密处理过] |
这里先给token划上疑问>其是否可以逆向?
这里的token值跟md5加密很相似,但是长度不一样(MD5长度为16位/32位)
所以大胆的猜想这里的token值可能是由多个md5拼接组成
得到token的值为96位除以根据MD5的长度(16位/32位),得出可能是由三组或者六组组成,这里我很幸运因为我按照三组的方式解密居然发现解密出来了,这里先按照32位分割:
然后丢去解密:
| Md5 | Text |
|---|---|
| 3c6e0b8a9c15224a8228b9a98ca1531d | key [用户名] |
| f72f78a365657d56853b6867fb37dc3c | 6685 [时间戳] |
| 444bcb3a3fcf8389296c49467f27e1d6 | ok [返回消息正文 "msg":"ok"] |
结论: Token可逆向
2.根据结论分析第二步骤验证码是否跟token有关联:
token=3c6e0b8a9c15224a8228b9a98ca1531df72f78a365657d56853b6867fb37dc3c444bcb3a3fcf8389296c49467f27e1d6&verifyCode=6685
结论: 直接从逆向token操作中可以了解到两者之间是有关联的有token就能知道重置密码的验证码
3.根据结论分析第二步骤是否是必要操作:
这里直接根据第一步骤获取的内容带入到第三步骤,完全可以成功重置密码,发现完全可以绕过第二步骤的验证。
结论: 直接把第一步返回的token带入第三步骤即可重置密码
结尾
token安全之任意密码重置的更多相关文章
- PJzhang:任意密码重置的常规姿势
猫宁!!! 之前在360补天看过carry_your分享的46分钟短视频“任意用户密码重置的10种姿势”. 在京东SRC安全小课堂第89期,也有一篇他的文章:web漏洞之逻辑漏洞挖掘.内容朴实无华. ...
- 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 ...
- Django实现用户密码重置
使用Django内置的认证视图实现简单的通过邮箱重置密码的功能版本:django 1.11 在django.contrib.auth.views中提供了四个类视图用于密码重置 class Passwo ...
- ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(三)密码修改以及密码重置
前言: 本系列文章主要为我之前所学知识的一次微小的实践,以我学校图书馆管理系统为雏形所作. 本系列文章主要参考资料: 微软文档:https://docs.microsoft.com/zh-cn/as ...
- Laravel实现找回密码及密码重置的例子
https://mp.weixin.qq.com/s/PO5f5OJPt5FzUZr-7Xz8-g Laravel实现找回密码及密码重置功能在php实现与在这里实现会有什么区别呢,下面我们来看看Lar ...
- MongoDB·Windows下管理员密码重置解决方案
阅文时长 | 1.07分钟 字数统计 | 1730.4字符 主要内容 | 1.问题切入 2.详细步骤 3.声明与参考资料 『MongoDB·Windows下管理员密码重置解决方案』 编写人 | SCs ...
- WEB安全新玩法 [4] 防护邮箱密码重置漏洞
大部分具有账号系统的应用都会提供重置用户登录密码的功能,常见方式之一是:用户输入自己的邮箱地址或手机号,应用向这个邮箱或手机号发送验证码,用户将收到的验证码输入应用中即可完成密码重置.这一过程容易因设 ...
随机推荐
- 多线程中fork与mutex
在多线程程序中fork出一个新进程,发现新的进程无法正常工作.因为:在使用fork时会将原来进程中的所有内存数据复制一份保存在子进程中.但是在拷贝的时候,但是线程是无法被拷贝的.如果在原来线程中加了锁 ...
- opencv归一化图像
cv::normalize(src, dst, 0.0, 255.0, cv::NORM_MINMAX);
- Docker容器数据卷(七)
Docker致力于: 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的 容器之间希望有可能共享数据 Docker容器产生的数据,如果不通过docker co ...
- Spring Cloud版本 version命名说明 (Edgware)
Spring Cloud版本 version命名说明 (Edgware) 版权声明:guofangsky 版权所有,转载不究. https://blog.csdn.net/guofangsky/a ...
- Fishing Master (思维+贪心)
题目网站:http://acm.hdu.edu.cn/showproblem.php?pid=6709 Problem Description Heard that eom is a fishing ...
- Ultimate Chicken Horse GameProject第二次迭代成果文档
基于上一次的迭代中的数据结构我们补充了UML图.用例图及状态图. 用例图: 选择游戏地图:玩家可以在本地游戏界面将角色移动到地图门口并按下E进入地图. 进行游戏用例: 选择并摆放道 ...
- Codeforces Round #545 (Div. 2) 交互 + 推公式
https://codeforces.com/contest/1138/problem/F 题意 有一条长为t的链,一个长为c的环,定义终点为链和环相连环上的第一个点,现在有10个人在起点,你每次可以 ...
- 《30天自制操作系统》笔记5 --- (Day3)
这个专题荒废了许久,今天补点东西 不够准确的小结 用汇编来开发操作系统,就是使用汇编本身的功能再加上BIOS中断提供的功能来完成功能的过程. 汇编本身的功能不够,毕竟没有外部IO,所以通过给多个寄存器 ...
- Spring Boot 知识笔记(定时任务与异步)
一.定时任务 1.启动类里面增加注入 @SpringBootApplication //@SpringBootApplication = @Configuration+@EnableAutoConfi ...
- Elasticsearch由浅入深(十)搜索引擎:相关度评分 TF&IDF算法、doc value正排索引、解密query、fetch phrase原理、Bouncing Results问题、基于scoll技术滚动搜索大量数据
相关度评分 TF&IDF算法 Elasticsearch的相关度评分(relevance score)算法采用的是term frequency/inverse document frequen ...