记一次短信验证码的"梅开五度"
字数 1373 2025-08-10 08:28:42
短信验证码漏洞挖掘实战:从入门到精通
漏洞背景
本文记录了对某SRC厂商业务登录页面进行安全测试的全过程,通过"梅开五度"的方式逐步深入挖掘短信验证码相关漏洞。所有漏洞均已修复,现将技术精髓总结如下,供安全研究人员参考学习。
梅开一度:验证码回显漏洞
测试过程
- 初始测试使用admin/123456尝试登录,系统返回"账号或密码错误"
- 开启Burp代理记录所有数据包
- 使用真实手机号获取验证码后,故意输入错误验证码123456
- 发现响应包中返回了正确的验证码
漏洞原理
系统在验证码错误时,错误地将正确验证码返回给客户端,导致攻击者可以获取有效验证码进行任意用户注册。
修复建议
- 验证码错误时仅返回错误标识,不返回任何验证码相关信息
- 加强前后端校验机制
梅开二度:旧接口未删除漏洞
测试过程
- 两周后发现原漏洞已修复,响应包简化为
{"flag":"error"} - 对比历史数据包发现接口已从
/register/xxx改为/registerPage - 尝试使用旧接口
/register/xxx请求,验证码再次回显
漏洞原理
开发人员通过创建新接口修复漏洞,但未删除旧漏洞接口,导致攻击者仍可通过旧接口利用漏洞。
修复建议
- 修复漏洞时应彻底删除或禁用旧接口
- 实施接口版本管理机制
- 定期审计废弃接口
梅开三度:手机号与验证码未绑定漏洞
测试过程
- 使用自己的手机号(155xxxx3531)获取验证码
- 在注册时将手机号修改为目标号码(131xxxxxxxx)
- 使用自己收到的验证码成功注册目标号码账户
漏洞原理
系统仅验证验证码有效性,未校验验证码与接收手机号的对应关系。
横向扩展
验证码有效期内可批量注册:
- 将手机号后两位作为变量批量请求
- 使用同一验证码注册多个账户
修复建议
- 建立验证码与手机号的绑定关系
- 实施严格的手机号-验证码配对验证
- 限制验证码使用次数
梅开四度:密码找回功能相同漏洞
测试过程
- 在密码找回处使用自己手机号获取验证码
- 拦截请求,将手机号修改为目标号码
- 使用自己收到的验证码成功修改目标账户密码
纵向扩展
同一漏洞可能存在于:
- 注册功能
- 密码找回功能
- 手机号变更功能
- 敏感操作验证
修复建议
- 全业务功能点统一安全审计
- 敏感操作增加二次验证
- 实施操作日志记录
梅开五度:移动端接口差异漏洞
测试过程
- 使用F12切换移动设备调试模式
- 发现移动端接口与PC端不同
- 在移动端接口重复梅开四度的攻击方式成功
祖传技巧
- 切换User-Agent测试不同设备接口
- 关注不同终端的功能实现差异
- 移动端往往安全防护较弱
修复建议
- 统一多端接口安全标准
- 移动端与PC端实施相同安全措施
- 全终端安全测试
总结与最佳实践
- 完整测试流程:即使看似安全的环节也要完整测试
- 数据包管理:保存重要测试数据包便于对比分析
- 漏洞原理分析:理解漏洞本质才能有效扩展
- 横向扩展:同一漏洞可能存在于多个功能点
- 纵向扩展:不同终端可能有不同实现
- 持续测试:修复后要重新测试确认
- 安全开发建议:
- 验证码应加密存储
- 实施严格的手机号-验证码绑定
- 限制验证码使用次数和有效期
- 统一多端安全标准
- 定期安全审计
通过这"梅开五度"的测试过程,展示了如何从一个简单的验证码漏洞入手,逐步深入挖掘出多个高危漏洞的思路和方法。关键在于细心测试、深入分析和持续追踪。