一切,都是最好的安排。
可以选择接受,或者笑着接受。

“短信验证码”的常见漏洞-思路分析

全文小结:

本文内容篇幅较长,且因各种因素,本文不便使用实战场景截图,敬请谅解。
本文首先讲解了常见场景下的业务逻辑运行流程,此部分内容可方便读者对后面的漏洞部分进行理解。
后半部分主要讲解了“短信验证码”相关的部分常见漏洞:漏洞详情请见目录

简介:

短信验证码是通过发送验证码手机的一种有效的身份验证系统。通过短信验证码,可以比较准确和安全地验证用户的正确性

验证码相关——常见的业务逻辑运行流程:

场景示例:通过手机号登录账户。

一般而言,商城页面、套餐业务订购页面等的登录方式包含:通过个人手机号登录或注册。大致流程如下:

  1. 用户输入手机号
  2. 用户点击“发送验证码”按钮。
  3. 网站前端通过用户输入的手机号,来获取要发送验证码的目标——手机号号码。
    注:网站一般会进行简单的校验来确认是否为正常的手机号。比如手机号的位数是否正常或手机号的参数值的类型是否为纯数字。
  4. 网站后台给此手机号所在的手机,发送1条短信验证码。
  5. 手机接收到验证码
  6. 用户输入验证码点击“登录”按钮。
  7. 网站后台校验短信验证码,校验后的结果返回网站前端。
  8. 校验结果正确则正常跳转页面,校验结果错误则返回登录页面。
  9. 如果校验结果正确,在跳转时会从服务器获取身份凭证(cookie或某一请求包中的参数ID),来以此身份凭证进行浏览页面。

“登录账户”业务逻辑运行流程的漏洞挖掘思路举例

在理清了业务运行流程的基本逻辑之后,我们可以基于此流程来进行尝试性的漏洞挖掘。

1. 短信轰炸

效果:

在10秒内收到大量的骚扰短信,对某个用户造成不良体验。

常见利用思路:

流程说明:
通过常规步骤中的1-5,即可进行验证。
关键步骤:3-4。
3.网站前端通过用户输入的手机号,来获取要发送验证码的目标——手机号号码。

通过 Burp抓包(中间人代理)的方式,截取第3步发出的正常请求包,然后把请求包发送至Repeater模块。

4.网站后台给此手机号所在的手机,发送1条短信验证码。

通过Burp的Repeater模块,网站后台对同一个手机号所在的手机,在10秒内发送大量的短信验证码。如果短信验证码均正常发送(短信验证码每条发送的间隔时间未被限制)到目标手机上,则成功实现 “短信轰炸” 的效果。

2. 短信验证码发送接口可重复调用漏洞

效果:

在1分钟内批量调用“验证码发送接口”,对目标用户群体依次发送大量验证码,对用户造成不良体验。并且对公司造成一定的经济损失(1条短信0.1RMB),请求速度过快则可能导致“短信验证码发送接口”所在的服务器宕机(类似DDos:利用大量合法的分布式服务器对目标发送请求,从而导致正常合法用户无法获得服务)。另一方面,可能由于服务器配置原因,导致服务器在5XX状态下,泄漏内网部分敏感配置信息(看运气)。

常见利用思路:

流程说明:
通过常规步骤中的1、2、3、4、5,即可进行验证。
关键步骤:3、4。
3.网站前端通过用户输入的手机号,来获取要发送验证码的目标——手机号号码。

通过抓包的方式,截取第3步发出的正常请求包,然后对请求包中的手机号进行修改,通过Burp的Intruder模块使每次请求的手机号成为不同的目标。

4.网站后台给每个不同的目标所在的手机,在10秒内 分别发送 1条 短信验证码。

如果短信验证码正常发送到目标手机上(短信发送的间隔时间未被限制),则成功实现 “短信验证码发送接口可重复调用” 的效果。

简单来说,速率上限决定漏洞利用效果的上限,实际利用程度建议把握好尺度。

“1. 短信轰炸” 和 “2. 短信验证码发送接口可重复调用漏洞”的异同:

相同之处:

都是借用了短信验证码发送接口,实现的漏洞利用效果。

不同之处:

“短信轰炸”针对同一手机号进行轰炸,如果限制同一手机号的“验证码请求速率”,就可以避免此危害。
“短信验证码发送接口重复调用漏洞”针对大量群体(每个不同的手机号)进行“轰炸”。须要限制“短信验证码发送接口的发送速率”来进行限制,才能避免此危害。

3. 短信验证码接口爆破漏洞

效果:

通过固定的某一手机号,进行穷举爆破验证码测试,只要此短信验证码与“手机号正常发送的验证码”一致(且短信验证码多次验证失败不失效),就可以正常登录。相当于绕过了短信验证码验证身份的这一步骤,不需要验证码也可登录。

常见利用思路:

流程说明:
通过常规步骤中的6、7、8,即可进行验证。
关键步骤:6、7。
6.用户输入验证码点击“登录”按钮。

此处进行抓包,修改目标为“某一范围内的验证码”,进行批量爆破。只要此范围内的手机号对应的验证码有一个是8546,即可实现登录效果。

7.网站后台校验短信验证码,校验后的结果返回网站前端。

这一步作为响应包验证结果。

8.校验结果正确则正常跳转,校验结果错误则返回登录页面。

4. “短信验证码对应手机号” 可暴力破解

效果:

通过固定的某一短信验证码(如8536),进行穷举爆破手机号测试,只要此短信验证码与“手机号正常发送的验证码”一致,则可以正常登录。漏洞危害较低,纯粹是大基数下拼运气。但如果是登录的话,也类似于平行越权了(四位数验证码体验最佳)。

常见利用思路:

流程说明:
通过常规步骤中的6、7、8,即可进行验证。
关键步骤:6、7。
6.用户输入验证码点击“登录”按钮。

此处进行抓包,修改目标为“某一范围的手机号”,进行批量爆破。只要此范围内的手机号对应的验证码有一个是8536,即可实现登录效果。

7.网站后台校验短信验证码,校验后的结果返回网站前端。

这一步作为响应包验证结果。

8.校验结果正确则正常跳转,校验结果错误则返回登录页面。

“3. 短信验证码接口爆破漏洞” 和 “4. ‘短信验证码对应手机号’ 可暴力破解”的异同:

相同之处:

都是借用了登录按钮的验证接口,实现的漏洞利用效果。

不同之处:

“短信验证码接口爆破漏洞”针对同一手机号进行“爆破”,如果限制同一手机号的“短时间内的验证次数的总数”,就可以避免此危害。
“短信验证码发送接口重复调用漏洞”针对大量群体(每个不同的手机号)进行“爆破”。须要限制“短时间内大批量验证短信验证码的IP”来进行限制,才能避免此危害。

5. 校验结果的业务逻辑漏洞

效果:

通过更改网站后台的校验返回结果,进行绕过“校验成功后跳转”这一步骤,实现绕过“校验成功”这一步骤,直接进行用户登录。

常见利用思路:

流程说明:
通过常规步骤中的7、8、9,即可进行验证。
关键步骤:7、8。
7.网站后台校验短信验证码,校验后的结果返回网站前端。

此处进行抓包,如果校验结果为明文(如某一参数值:true/false),则更改false为true,即可实现绕过“校验成功”这一步骤,直接使用错误的验证码实现账号的登录效果。

8.校验结果正确则正常跳转页面,校验结果错误则返回登录页面。

此处作为验证结果校验利用是否成功。

9.如果校验结果正确,在跳转时会从服务器获取身份凭证(cookie或某一请求包中的参数ID),来以此身份凭证进行浏览页面。

6. 登录账户的平行越权漏洞

效果:

通过更改身份凭证,进行更改获取“身份凭证”这一步骤的结果,实现“任意用户登录”这一效果。

常见利用思路:

流程说明:
通过常规步骤中的7、8、9,即可进行验证。
关键步骤:8、9。
7. 网站后台校验短信验证码,校验结果返回网站前端。
8. 校验结果正确则正常跳转,校验结果错误则返回登录页面。
9. 如果校验结果正确,在跳转时会从服务器获取身份凭证(cookie或某一请求包中的参数ID),来以此身份凭证进行浏览页面。

此处进行抓包,如果身份凭证为明文的结果(如某一参数值:0981),更改身份凭证0981为0980,即可实现更改“原手机号”为“任意手机号”,直接使用个人手机号登录其他用户手机号的登录效果。
注:新页面的登录用户名是否更改,可以作为作为利用是否成功的标志。

“5. 校验结果的业务逻辑漏洞” 和 “6. 登录账户的平行越权漏洞”的异同:

相同之处:

都是更改服务器返回的结果,实现的漏洞利用效果。

不同之处:

“校验结果的业务逻辑漏洞”针对“校验结果的明文"更改后的效果。如果对校验结果部分进行强加密,就可以避免此危害。
“登录账户的平行越权漏洞”针对“登录成功后获取的用户凭证的明文”更改后的效果。如果对用户凭证部分进行强加密,就可以避免此危害。

漏洞挖掘总结:

理清正常业务的运行流程,依据正常的业务流程,尝试“可能存在漏洞的”业务功能。
本人才疏学浅,全文如果谬误之处,敬请斧正。


特此声明:

本文以上内容仅作为技术交流使用,如有违反行为,本文作者概不负责。

posted on 2023-12-27 18:27  大道至理  阅读(1007)  评论(0编辑  收藏  举报