背景介绍:
今天的故事来自一位名叫Vaibhav Kumar Srivastava的白帽子,他的这次OTP绕过很有趣,希望各位也能从中有所收获,那么这个绕过究竟是怎样的呢?让我们一起看看吧。
故事开始:
目标是一个处理教师登录和教育内容的政府网站,以下统称该网站为“example.com”,它在登录界面上的左上角有一处“教师登录”入口的按钮:
为了以教师身份登录,你需要提供注册的手机号码,然后 example.com 将进行验证,而白帽小哥家里刚好有教育部门的成员,于是他尝试了使用这些号码进行登录,顺利通过验证后发现确实能够登录。
这一切似乎并无什么问题,但是白帽小哥在 网站的JS脚本中发现了一个联系电话:
通过点击教师登录并输入在脚本中找到的电话号码,当点击“验证”按钮的那一刻,屏幕上弹出一个发送 OTP 的界面(如果我输入自己的手机号码并点击验证,那么网站会禁止这样的操作,因为这个号码并未在该网站中注册为教师)如果点击发送 OTP,那么 OTP 的信息将会发送给受害者的手机号码,攻击者是无法查看到的。
于是白帽小哥尝试在 Burp 中拦截请求以查看响应数据包中是否会泄漏 OTP信息,很不幸,并不存在漏洞。于是白帽小哥开始检查网页元素并查看手机号码字段,从下面的截图中可以看到,手机号码字段已被“disable”,但是如果我们将状态更改为“enable”,我们就可以实现手机号码的修改:
此时,使用自己的手机号码替换掉受害者的手机号码,然后点击“发送 OTP”按钮:
成功收到验证码信息:
顺利以受害者的身份登录了该系统:
小哥迅速地报告了该漏洞,并获得了该网站的致谢:
总结:
让我们来一起回顾一下本文中所利用的技巧有哪些:
- 网站的JS脚本中暴露了手机号码
- “验证”过程会在服务器端对手机号码进行验证,但“发送 OTP”时并没有验证,因此导致了OTP绕过
- 通过上面的手机短信截图可以看到,只有4位数,因此该网站也存在 OTP 暴力破解隐患
原文:https://codewithvamp.medium.com/account-takeover-by-otp-bypass-ec0cff67f516
OK,今天的故事分享就到这里吧,你学废了么?