【SRC】基础思路篇4:验证码安全测试完全指南
文章目录前言一、验证码固定漏洞测试1. 验证码复用漏洞2. 验证码不过期3. 首次验证码固定4. 万能验证码5. 伪随机验证码6. 弱验证码二、发送验证码Session可替换漏洞原理测试步骤三、验证码未绑定手机号漏洞描述测试方法四、验证码为空或特殊值可绕过测试场景测试方法五、验证码空格绕过测试原理测试方法应用场景六、图片验证码接口DOS攻击漏洞原理测试步骤测试技巧七、验证码和登录请求分离漏洞描述测试方法实战案例八、短信验证码回显到前端漏洞描述测试方法九、短信/邮件内容可控漏洞描述测试方法十、手机号验证码复用与注入1. 多手机号注入漏洞2. 手机号参数拼接3. 命令注入测试十一、验证码并发与短信滥发绕过发送限制的方法短信轰炸测试实战案例十二、验证码爆破工具推荐captcha-killer-modified十三、实战经验总结案例1短信轰炸漏洞挖掘案例2短信验证码多手机号注入案例3小程序验证码漏洞结语⚠️本博文所涉安全渗透测试技术、方法及案例仅用于网络安全技术研究与合规性交流旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关内容前必须获得目标网络 / 系统所有者的明确且书面授权严禁用于未经授权的网络探测、漏洞利用、数据获取等非法行为。前言在SRC漏洞挖掘中验证码是很多授权功能的重要防线但也是漏洞高发区。本文将带你全面了解验证码相关的测试思路和实战技巧让你快速掌握验证码安全测试的核心方法。一、验证码固定漏洞测试1. 验证码复用漏洞测试场景同一个验证码是否可以重复使用测试方法使用Burp Suite拦截验证码请求不放行直接添加到Repeater测试多次提交相同的验证码观察是否都能通过验证实战案例某高校系统存在验证码复用漏洞同一个验证码可以多次使用导致短信轰炸和密码爆破成为可能。2. 验证码不过期测试场景新注册手机号的验证码能否用于已存在手机号的验证码登录测试方法用自己的手机号A注册获取验证码尝试用这个验证码登录别人的手机号B如果成功说明存在任意账号接管漏洞风险等级高危 - 如果接口返回受害者账号的token则可以登录后进行敏感操作3. 首次验证码固定测试场景第一次获取的验证码是否是固定值测试方法清除缓存后首次获取验证码多测试几次观察首次验证码是否都是同一个值如123456常见固定值1234、123456、0000等4. 万能验证码测试场景是否存在任何账号都能使用的万能验证码测试方法尝试以下常见万能验证码00001111123488886666实战技巧在登录接口尝试这些值观察是否能绕过验证5. 伪随机验证码测试场景验证码是否存在规律可循测试方法多次获取验证码记录所有值分析是否存在规律如纯数字、4-6位、特定开头等常见规律纯数字位数4-6位存在规律的组合范围例如300开头6. 弱验证码测试场景验证码校验是否过于宽松测试方法尝试输入以下值000000nullnone0特殊情况有些系统只校验位数是否正确不校验具体内容二、发送验证码Session可替换漏洞原理后端未校验手机号是否与当前流程匹配导致可以用别人的手机号获取验证码用自己的Session登录别人的账号。测试步骤1. 使用别人的手机号发送验证码 - 抓包拦截保留请求的cookie 2. 使用自己的手机号发送验证码 - 抓包拦截替换成前面别人手机号验证码请求的cookie 3. 使用自己收到的验证码登录 - 登录后是别人的账号实战案例某系统存在此漏洞攻击者可以轻易实现账号接管。三、验证码未绑定手机号漏洞描述验证码与手机号没有建立绑定关系导致A的验证码可以登录B的账号。测试方法用手机号A获取验证码在登录接口输入手机号B和A的验证码如果登录成功说明存在此漏洞风险等级高危 - 可实现任意用户登录四、验证码为空或特殊值可绕过测试场景场景1验证码参数为空code场景2验证码为truecodetrue场景3删除验证码参数直接删除code参数后提交请求测试方法在Burp Suite中修改请求参数尝试以上各种情况观察是否能成功登录。五、验证码空格绕过测试原理有些系统在验证手机号时会去除前后空格但验证码校验时不会。通过添加空格可以绕过某些限制。测试方法正常请求phone15900000000添加空格绕过phone15900000000 应用场景绕过手机号黑名单限制绕过发送频率限制六、图片验证码接口DOS攻击漏洞原理图片验证码接口存在隐藏参数如高、宽、size等攻击者可以通过修改这些参数消耗服务器资源。测试步骤使用Burp Suite拦截图片验证码请求查看是否存在以下隐藏参数height/hwidth/wsizemargin修改参数值为极大值观察服务器响应测试技巧使用Burp Suite的Repeater模块进行测试使用Group功能批量发送请求注意观察响应时间和服务器负载七、验证码和登录请求分离漏洞描述有些系统的验证码获取和登录验证是两个独立的接口且登录接口不需要验证码即可进行爆破。测试方法先获取一次验证码直接调用登录接口不携带验证码参数如果能成功登录或返回特定错误说明存在漏洞实战案例某系统的登录接口可以直接爆破无需验证码。八、短信验证码回显到前端漏洞描述短信验证码在请求的响应中直接返回攻击者可以获取任意用户的验证码。测试方法请求发送验证码查看响应内容包括响应体Cookie其他响应头如果发现验证码明文说明存在此漏洞风险等级高危 - 可实现任意账号登录九、短信/邮件内容可控漏洞描述请求参数中包含发送内容攻击者可以修改内容为恶意链接。测试方法抓包分析短信发送请求查找是否有content、message等参数修改参数值为恶意内容如色情、赌博、毒品相关网址发送请求观察是否成功十、手机号验证码复用与注入1. 多手机号注入漏洞漏洞原理短信网关支持逗号分隔的批量发送后端未对手机号输入做严格校验。测试方法POST /api/sms/send HTTP/1.1 {phone: 13800000099,13800000000}攻击场景攻击者输入攻击者号码,目标号码系统向两个号码发送相同验证码攻击者用自己的手机接收验证码攻击者提交目标号码 验证码 → 完成登录2. 手机号参数拼接测试方法尝试以下格式phone手机号1,手机号2phone手机号1phone手机号23. 命令注入测试测试方法phone15999999999; sleep(5) phone15999999999|ls十一、验证码并发与短信滥发绕过发送限制的方法方法1特殊字符绕过使用、空格、86086/0086等、逗号等例如8615900000000、15900000000方法2XFF头绕过修改X-Forwarded-For头例如X-Forwarded-For: 192.168.1.1方法3Cookie绕过删除cookies中的session部分后重新请求系统可能通过session校验验证码删除后可能绕过限制短信轰炸测试测试方法测试每分钟发送次数限制如果限制每分钟不超过10次就每分钟发9次持续发送观察是否能绕过限制实战案例某大厂存在短信轰炸漏洞通过重放下订单请求可无限发送短信无时间间隔限制。十二、验证码爆破工具推荐captcha-killer-modified这是一款适配新版BurpSuite的验证码识别插件集成ddddocr验证码识别库能自动识别多种类型验证码。项目地址https://github.com/f0ng/captcha-killer-modified核心功能适配新版Burpsuite接口支持多种验证码类型识别支持自定义识别脚本使用场景当遇到图片验证码无法手动爆破时使用十三、实战经验总结案例1短信轰炸漏洞挖掘发现过程在测试0元购漏洞时点击补兑按钮后收到两条相同的短信使用Burp Suite重放下订单请求再次收到相同短信连续重放多次确认漏洞存在漏洞成因下订单接口每次请求都会触发短信发送短信发送无次数限制和时间间隔限制缺乏请求去重机制案例2短信验证码多手机号注入漏洞发现在登录接口尝试输入多个手机号逗号分隔发现系统向所有号码发送了相同验证码利用此漏洞实现任意账号登录修复建议输入层严格校验正则匹配单个手机号短信发送前二次校验确保不包含分隔符验证码绑定单一手机号案例3小程序验证码漏洞漏洞类型任意用户登录发现过程抓包发现sessionkey泄露通过小程序逆向获取iv和encryptedData解密并伪造其他用户的手机号成功登录目标账号漏洞成因sessionkey直接返回给前端后端未对加密数据进行有效性校验缺少二次验证机制结语验证码是SRC漏洞挖掘的重要环节通过本文的学习相信你已经掌握了验证码相关的核心测试思路。记住耐心观察、大胆尝试、善于总结这是发现漏洞的关键。如果你在测试过程中有任何问题或发现了新的漏洞类型欢迎在评论区交流讨论