前言叙述
现在的洞越来越难挖了,近些年的大佬们纷纷登场,安全防护也在不断提升,作为一个不"专业"的人,实在头疼不已,最近实在无力加上很多现实中事忙活,突然不知道咋挖了,只能水一次技术了
* 本文涉及到相关漏洞已报送厂商并修复,本文仅限技术讨论和研究,严禁用于非法用途,否则产生后果自行承担
漏洞复现
非常神奇的在用户找回密码界面,输入手机号的时候,会调用js查询用户是否存在,当然这里可以用抓包去跑一下用户枚举,但是太麻烦了,直接用google搜索一下是不是有手机号相关的内容
site:xxx.com 手机号
很幸运的拿到了一个用户留言的页面,用户名默认是手机号,就选择一个幸运er
在校对手机号存在后,可以发送验证码,在第一次提交的时候会进行验证码校验,此时第一次校验只有五次机会
此时第一想法就是对状态码进行修改,在获取到正确的状态码后,修改,欺骗绕过了进入到修改密码页面
奈何没料到还有二次验证码校验,在输入验证码下一步后,会二次核对验证码,这里有个逻辑问题:
当第一次验证码校验失败后,可以得到失败状态码,但是想撞正确验证码基本不可行,因为只有五次机会
第二次验证码校验没有限制次数,但是二次验证是在通过了一次验证后跳转到修改密码页面,当二次验证码不正确时,修改密码会跳转到error.html
这里想去爆破二次验证的验证码,拿到响应包内的字节长度,结果都是正确跳转到修改密码页面的字节长度
当一次验证码正确,二次验证码错误时,才能爆破二次验证码
内心OS:我知道验证码还问你干啥
后来,想到了之前看过的一个文章方法,可以使用一些符号去间隔手机号,从而达到获取相同验证码的目的
A:受害者手机号,未知验证码
B:本地手机号
在发送验证码之前,使用符号间隔,将会发送给两个手机号同样验证码
瞎猫碰上死耗子,还真的拿到了两个同样的验证码
直接使用方法,A+B获取到验证码,然后每个包内相同的payload手机号,梭到密码修改成功
总结
漏洞存在原因:在检验发送验证码没有对手机号进行检验,从而将两个手机号提交到SMS网关,并发送验证码,挺搞不懂最后的修改密码的语句,A+B方法获取到验证码后,在修改密码的时候必须也是A+B手机号,不能是单个手机号,不然也是跳转到error.html页面,希望下次洞神助我拿个RCE漏洞!
如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款
前面有同学问我有没优惠券,这里发放100张100元的优惠券,用完今年不再发放