好久没发了,最近在坐lao,坐的差不多了,发一篇文章证明一下还活着没去世。此文,让我们来简单了解一些关于短信验证码逻辑漏洞常见的一些手法。
如下图是几年前测的一个系统,目标系统中的登录、注册、重置密码均需要接收短信验证码进行操作:
随便输入验证码内容,然后拦截响应包,此时发现在响应包中存在有状态码:50015
此时的状态码代表的是错误,接下来,我们接受并填写正确的验证码:
同样拦截响应,会发现状态码为:0
那么很可能,在状态码为0的时候,代表的是正确,如果没有其他校验操作的话,我们直接拦截响应包,更改状态码即可绕过验证:
如上,输入错误的验证码,拦截响应,更改状态码为:0
成功绕过校验,可进行注册、登录、重置密码等操作。至于手机号,可以通过收集或者生成某地区号码的方式,进行爆破枚举:
还有一种情况,无需更改响应码,通过查看数据包,发送给目标手机的验证码,有可能直接包含在响应包内容或响应包头部中:
抓取验证码请求包,通过在中间插入逗号或者|来分割,后面再拼接一个手机号:
18899008899,19988009977
18899008899|19988009977
如果漏洞存在,在我们发送验证码后,两个手机号会收到同样的短信码,直接进行利用即可:
还有一种情况,我们可以在网页或者JS中查找接口,通过获取接口进行密码重置,此时便没有需要手机验证码这个环节:
通过网页获取重置接口,直接通过更改手机号重置对应账户密码:
原文始发于微信公众号(Jie安全):太棒辣 | 感谢大哥带我学习关于验证码逻辑漏洞这些事
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论