短信验证码功能进行安全测试
验证码转发:当发送验证码的请求参数中,手机号字段可以通过增加逗号(
,)或增加参数(&phone=)的方式填入两个不同的手机号,如果这两个手机号都收到了相同的验证码,则存在此漏洞。验证码和手机号未绑定:在“先提交手机号获取验证码”和“后提交验证码验证”分步操作的业务流程中,测试者可以获取手机号A的验证码,然后在提交验证的数据包中将手机号参数修改为手机号B,并使用A的验证码,观察是否能以B的身份完成后续流程(如注册、找回密码),若能则存在此漏洞。
验证码参数篡改:在提交验证的数据包中,对验证码参数进行各种篡改测试:
将参数值置空或删除参数。
将参数值改为true、false、null、0、1、yes、no等特殊值。
将参数值改为超长字符串(如
A重复1000次)或特殊字符(如'、"、<、&等)。如果篡改后服务器未正确处理,导致验证意外通过或泄露错误信息,则可能存在漏洞。
万能验证码:尝试在验证码字段输入一些常见的、默认的验证码,如
6666、8888、0000等,如果验证成功则存在此漏洞。短信内容可修改:在发送短信验证码的请求中,修改手机号参数,尝试在其后拼接其他手机号(例如将
phone=13888888888改为phone=138888888888,139999999999),并使用特殊符号字典对拼接符号(如文中的逗号)进行爆破测试,如果第二个手机号收到了短信,则存在此漏洞。响应包泄露验证码:
在输入错误验证码后,检查前端页面的源代码中是否直接包含了正确的验证码。
检查输入错误验证码后的服务器返回包,观察验证码是否出现在HTTP响应头的任何位置(如Header、Cookie)或响应体(Body)中。