前言

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

挖掘过程

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

正常流程

第一步骤:

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

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. Maven 学习资料

    学习资料 网址 在线插件信息 http://maven.apache.org/plugins/

  2. python 之Entry

    # Tkinter教程之Entry篇 # Entry用来输入单行文本 from tkinter import * root = Tk() # 创建entry Entry(root, text='inp ...

  3. 【转载】Makedown数学公式语法

    Typora数学模块 行间表达式快捷键($$) 点击"段落"->"公式块" 快捷键Ctrl+Shift+m "$$"+回车 行内表达式 ...

  4. (day44)前端、HTTP、HTML

    目录 一.什么是前端 二.web服务 (一)流程 (二)请求方式 (1)get请求 (2)post请求 三.HTTP协议 (一)什么是HTTP协议 (二)四大特性 (三)数据格式 (1)请求格式 (2 ...

  5. zzPony.ai 的基础架构挑战与实践

    本次分享将从以下几个方面介绍: Pony.ai 基础架构做什么 车载系统 仿真平台 数据基础架构 其他基础架构 1. Pony.ai 基础架构 首先给大家介绍一下 Pony.ai 的基础架构团队做什么 ...

  6. LG2598/BZOJ1412 「ZJOI2009」狼和羊的故事 最小割

    问题描述 LG2598 BZOJ1412 题解 看到要把狼和羊两个物种分开 自然想到最小割. 发现\((x,y)\)可以向上下左右走以获得贡献,所以建边:\((x,y),(x-1,y)\),\((x, ...

  7. linux-部署1

    0.python安装 ubuntu16.04默认:安装了python2.7和python3.5: Ubuntu18.04默认:只有python3.6.8 下面是针对16.04: python/pyth ...

  8. springboot对JPA的支持

    springboot之jpa支持 导入相关pom依赖 <dependency> <groupId>org.springframework.boot</groupId> ...

  9. Spring Cloud Zuul记录接口响应数据

    系统在生产环境出现问题时,排查问题最好的方式就是查看日志了,日志的记录尽量详细,这样你才能快速定位问题. 如果需要在Zuul中进行详细的日志记录,这两种日志必不可少. API请求信息 API响应信息 ...

  10. python 获取日期以及时间

    >>> import datetime >>> >>> i = datetime.datetime.now() >>> prin ...