验证码”的常见漏洞"/>
“短信验证码”的常见漏洞
全文小结:
本文内容篇幅较长,且因各种因素,本文不便使用实战场景截图,敬请谅解。
本文首先讲解了常见场景下的业务逻辑运行流程,此部分内容可方便读者对后面的漏洞部分进行理解。
后半部分主要讲解了“短信验证码”相关的部分常见漏洞:漏洞详情请见目录。
简介:
短信验证码是通过发送验证码到手机的一种有效的身份验证系统。通过短信验证码,可以比较准确和安全地验证用户的正确性。
验证码相关——常见的业务逻辑运行流程:
场景示例:通过手机号登录账户。
一般而言,商城页面、套餐业务订购页面等的登录方式包含:通过个人手机号登录或注册。大致流程如下:
- 用户输入手机号。
- 用户点击“发送验证码”按钮。
- 网站前端通过用户输入的手机号,来获取要发送验证码的目标——手机号号码。
注:网站一般会进行简单的校验来确认是否为正常的手机号。比如手机号的位数是否正常或手机号的参数值的类型是否为纯数字。- 网站后台给此手机号所在的手机,发送1条短信验证码。
- 手机接收到验证码。
- 用户输入验证码,点击“登录”按钮。
- 网站后台校验短信验证码,校验后的结果返回网站前端。
- 校验结果正确则正常跳转页面,校验结果错误则返回登录页面。
- 如果校验结果正确,在跳转时会从服务器获取身份凭证(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. 登录账户的平行越权漏洞”的异同:
相同之处:
都是更改服务器返回的结果,实现的漏洞利用效果。
不同之处:
“校验结果的业务逻辑漏洞”针对“校验结果的明文"更改后的效果。如果对校验结果部分进行强加密,就可以避免此危害。
“登录账户的平行越权漏洞”针对“登录成功后获取的用户凭证的明文”更改后的效果。如果对用户凭证部分进行强加密,就可以避免此危害。
漏洞挖掘总结:
理清正常业务的运行流程,依据正常的业务流程,尝试“可能存在漏洞的”业务功能。
本人才疏学浅,全文如果谬误之处,敬请斧正。
特此声明:
本文以上内容仅作为技术交流使用,如有违反行为,本文作者概不负责。
更多推荐
“短信验证码”的常见漏洞
发布评论