短信验证码功能进行安全测试

  1. 验证码转发:当发送验证码的请求参数中,手机号字段可以通过增加逗号(,)或增加参数(&phone=)的方式填入两个不同的手机号,如果这两个手机号都收到了相同的验证码,则存在此漏洞。

  2. 验证码和手机号未绑定:在“先提交手机号获取验证码”和“后提交验证码验证”分步操作的业务流程中,测试者可以获取手机号A的验证码,然后在提交验证的数据包中将手机号参数修改为手机号B,并使用A的验证码,观察是否能以B的身份完成后续流程(如注册、找回密码),若能则存在此漏洞。

  3. 验证码参数篡改:在提交验证的数据包中,对验证码参数进行各种篡改测试:

    • 将参数值置空删除参数。

    • 将参数值改为true、false、null、0、1、yes、no等特殊值。

    • 将参数值改为超长字符串(如A重复1000次)或特殊字符(如'"<&等)。

      如果篡改后服务器未正确处理,导致验证意外通过或泄露错误信息,则可能存在漏洞。

  4. 万能验证码:尝试在验证码字段输入一些常见的、默认的验证码,如666688880000等,如果验证成功则存在此漏洞。

  5. 短信内容可修改:在发送短信验证码的请求中,修改手机号参数,尝试在其后拼接其他手机号(例如将phone=13888888888改为phone=138888888888,139999999999),并使用特殊符号字典对拼接符号(如文中的逗号)进行爆破测试,如果第二个手机号收到了短信,则存在此漏洞。

  6. 响应包泄露验证码

    • 在输入错误验证码后,检查前端页面的源代码中是否直接包含了正确的验证码。

    • 检查输入错误验证码后的服务器返回包,观察验证码是否出现在HTTP响应头的任何位置(如Header、Cookie)或响应体(Body)中。

← SQL注入漏洞全面学习笔记 API攻防安全基础 →