文章转自 戟星安全实验室 侵权请联系删除
0x00 前言
针对某src进行挖掘时,经过前期的信息收集,发现某个管理系统,以及已知账号123。
针对该系统,最开始是看前端结构是真的没有想到会出个任意重置,所以这里记录一下。
0x01 页面处理逻辑
首先来看一下系统登录的处理页面
通过前端页面不难发现,进入系统需要对应账号密码以及短信验证码;
看到有一个注册页面,尝试注册账号,可惜需要审核。
不能注册,那看看忘记密码的逻辑
不仅需要账号,还需要手机号,我们输入任意账号,返回账号不存在。
当前的思路当然是用字典枚举一下,可是有一个问题就是,我输入存在的账号也返回账号不存在。
然后账号还有密码复杂度要求,而且10位。
0x02 绕过尝试
还有就是常用的,修改返回包,然后输入对应账号进行抓包测试,修改返回包后显示当前用户已登录,此时是心头一喜,感觉进去了。
然而现实是残酷的,点击强制登录,会发现再次校验了用户名和密码,然而拦截对应返回包不再是校验,而是html了,无法控制返回包。
结果就是用户或密码错误。
然后总结一下:
当前系统的验证码可以绕过,但是密码不行;联想到的就是,只要我们知道某个账号的密码或者能实现任意重置,我们就可以登录系统。
这个找到一个可以用的账号密码还是比较难,找到一个账号已经不容易了。
那我们尝试密码重置,毕竟验证码可以绕过。
0x03 密码重置
输入我们已知账号,然后再输入一个任意手机号,任意验证码以及符号要求的密码,点击提交抓包。
拦截对应返回包,会进行多次校验,第一个返回包是no-user,由于我们猜测存在该用户,再结合注册时相关成功结果的返回包,我们修改返回结果为1。
之后遇到第二个数据包校验,增加了一个手机号。
同样拦截返回包,修改其结果为1。
然后第三个数据包,我们看到带上了用户名,手机号,验证码以及密码;注意,这是第一次带上验证码,应该就是对验证码的校验。同样拦截返回包,进行查看分析。
果然返回包的结果为0,应该就是验证码校验了,修改0为1。
然后就是第四个数据包,post请求,带上了所有相关数据信息,不管这个是什么的校验,拦截返回包分析一下。
发现是一个success的跳转,对应下一个包是一个success的连接。
然后前端返回成功的提示,并跳转到登录界面。
到此,我们可能已经完成对账号123的密码重置,但没有登录验证,具体结果不得而知,也行我们被前端欺骗了也说不定。
0x04 登录验证
然后验证,输入账号密码,任意验证码抓包,拦截第二个包,也就是验证码的返回包,修改返回的0为1。
之后又出现了一个包,传递数据是账号;这个一样的拦截他。
之后看到返回包不是1,而是6;那我们修改返回包结果为1;这个包具体什么含义不清楚,返回修改为1就行了。
之后又到了强制登录页面,这次点击登录一样的出现一个用户名密码的包。
由于账号密码登录的返回包是html,不用分析了。直接放通,幸运的是密码重置成功,然后成功进入系统后台。
0x05 概述
讲真,还是第一次挖到这种类型的重置,总的来说存在两个逻辑漏洞造成该系统的任意密码重置:
一个是短信验证码的绕过;
一个是手机号与账号的绑定。
本来根据前端页面的结构来说,想要登录系统或者重置密码是比较艰难的。但是这两个逻辑错误的结合就直接导致了任意密码重置的出现。