FEATURED · 精选文章

零基础玩转bWAPP靶场(三十二):Broken Auth. - CAPTCHA Bypassing

发布时间 / 2026/8/3 12:14:02
来源 / 创域科博编辑部
栏目 / 资讯中心
零基础玩转bWAPP靶场(三十二):Broken Auth. - CAPTCHA Bypassing 摘要这是 bWAPP 系列第三十二篇聚焦于Broken Auth. - CAPTCHA Bypassing验证码绕过。和之前所有的注入类漏洞不同这一关是认证绕过漏洞。登录页面加了验证码本意是防止暴力破解但因为验证码验证逻辑有缺陷导致攻击者可以多次尝试密码而不用重新输入验证码。文章会分析三种安全级别的源码差异演示如何通过 Burp Suite 抓包爆破密码同时解释验证码应该怎么设计才能有效防御。附真实案例。一、找目标目标说明攻击面登录表单防护机制CAPTCHA验证码漏洞类型认证绕过——验证码可重复使用最终目标绕过验证码限制暴力破解密码登录成功二、前言这不是注入这是认证绕过如果你一路跟到这个系列前面三十多篇全是各种注入——SQL 注入、XPath 注入、命令注入……都是通过“注入代码”来攻击。这一关完全不一样了——没有注入点。这是一个登录页面有用户名、密码、验证码三个输入框。正常用户输入正确的账号密码和验证码就能登录。验证码的作用防止攻击者用脚本暴力破解密码——因为每次登录都需要输入验证码而验证码每次不同自动化脚本很难处理。但问题来了如果验证码验证通过后没有被销毁那攻击者就可以用同一个验证码尝试无数次密码。这就是验证码绕过。三、关卡介绍3.1 页面功能打开这一关你会看到一个登录页面标题Broken Auth. - CAPTCHA Bypassing三个输入框Login、Password、Re-enter CAPTCHA一个 “Login” 按钮页面提示默认账号密码是bee/bug3.2 正常登录流程输入正确的用户名和密码bee/bug输入验证码图片里显示的内容点 Login登录成功显示 “Successful login!”验证码的作用每次刷新页面验证码图片会变。正常用户每次登录都要重新输入验证码。四、核心知识CAPTCHA 是什么4.1 CAPTCHA 的定义CAPTCHACompletely Automated Public Turing test to tell Computers and Humans Apart——全自动区分计算机和人类的图灵测试。说白了就是用来判断你是人还是机器的一段测试。最常见的形式就是歪歪扭扭的字母数字图片人眼能认出来机器很难识别。4.2 CAPTCHA 的作用防止暴力破解攻击者用脚本反复尝试密码验证码让每次尝试都需要人工识别防止刷票投票系统里防止机器人批量投票防止垃圾评论评论区防止机器人发广告4.3 验证码的正确实现方式一个安全的验证码系统应该做到每个验证码只能使用一次——验证通过后立即销毁验证码有有效期——过期后自动失效验证码和 Session 绑定——无法被其他用户复用验证码图片足够复杂——无法被 OCR 轻易识别这一关的问题在哪验证码验证通过后没有被销毁。也就是说你可以用一个正确的验证码然后尝试无数个密码直到找到正确的那个。五、源码分析5.1 核心逻辑if(isset($_POST[form])) { if($_COOKIE[security_level] 1 or $_COOKIE[security_level] 2) { // Medium / High 级别 if(isset($_SESSION[captcha]) ($_POST[captcha_user] $_SESSION[captcha])) { if($_POST[login] $login $_POST[password] $password) { $message font color\green\Successful login!/font; } else { $message font color\red\Invalid credentials!/font; } } else { $message font color\red\Incorrect CAPTCHA!/font; } } else { // Low 级别 if($_POST[captcha_user] $_SESSION[captcha]) { if($_POST[login] $login $_POST[password] $password) { $message font color\green\Successful login!/font; } else { $message font color\red\Invalid credentials!/font; } } else { $message font color\red\Incorrect CAPTCHA!/font; } } }代码结构$_SESSION[captcha]存储了当前验证码的字符串。用户提交的captcha_user和它比较。关键缺陷验证码验证通过后$_SESSION[captcha]没有被清空或重置。所以一旦你输入了一次正确的验证码就可以一直用同一个验证码值提交请求直到登录成功。5.2 三种安全级别的差异级别验证逻辑验证码是否一次性漏洞状态Low只校验验证码和密码不是可绕过Medium先校验验证码再校验密码不是可绕过High先校验验证码再校验密码不是可绕过高和中的区别其实不大Low 和 Medium/High 的逻辑几乎一样只是 Medium/High 多了一个isset($_SESSION[captcha])检查。真正的核心问题不管哪个级别验证码都没有被销毁。六、Low 安全级别6.1 正常登录输入正确的账号密码和验证码登录成功显示 “Successful login!”。6.2 错误密码 正确验证码输入正确验证码但密码错误页面显示 “Invalid credentials!”登录失败。6.3 暴力破解流程打开页面刷新验证码图片记下验证码字符串比如ABC123用 Burp Suite 拦截登录请求在 Burp 的 Intruder 中把password参数设为 payload 位置用同一个验证码ABC123遍历密码字典因为验证码没有失效每个密码尝试都使用同一个验证码所以 Intruder 可以正常工作——不会被“验证码错误”拦住。6.4 用 Burp Suite 实操步骤打开 Burp代理拦截设为 On在浏览器中输入正确的验证码点击 LoginBurp 拦截到 POST 请求发送到 Intruder标记password参数为 payload 位置设置 payload 为密码字典常用密码列表保持captcha_user参数不变就是那个正确的验证码点击 Start Attack观察响应长度哪个响应长度和其他的不一样哪个就是正确的密码6.5 成功登录爆破出密码后手动输入正确的账号密码和验证码登录成功。七、Medium 安全级别7.1 尝试爆破切换到 Medium重复 Low 级别的爆破流程。Medium 级别多了isset($_SESSION[captcha])检查但核心逻辑没变——验证码验证通过后没有被销毁。所以同样的方法可以绕过 Medium 级别。7.2 源码分析if(isset($_SESSION[captcha]) ($_POST[captcha_user] $_SESSION[captcha])) { // 验证码正确检查用户名密码 // ... 但没有销毁验证码 }验证码验证通过后$_SESSION[captcha]的值保持不变所以可以复用。八、High 安全级别8.1 尝试爆破切换到 High同样的方法。High 级别的逻辑和 Medium 一样验证码同样没有被销毁。结论三种级别都存在同一个问题——验证码可重复使用。8.2 为什么 High 级别也没防住因为 High 级别只是对输入做了更严格的过滤在其他关卡中但在这一关里High 级别的验证码逻辑和 Medium 完全一样——验证码没有一次性失效。这是一次性验证码 vs 会话验证码的区别。这一关用的是“会话验证码”一个 Session 对应一个验证码而不是“一次性验证码”每次验证后销毁。九、应该怎么修复一个安全的验证码系统应该这样设计if($_POST[captcha_user] $_SESSION[captcha]) { // 验证通过立即销毁验证码 unset($_SESSION[captcha]); // 然后检查用户名密码 if($_POST[login] $login $_POST[password] $password) { // 登录成功 } }关键验证码验证通过后立即销毁这样每一次登录尝试都必须输入新的验证码。十、真实世界CAPTCHA 绕过案例CAPTCHA 绕过在现实世界中非常常见2024-2026 年依然大量出现CVE-2025-65807Gila CMS 评论验证码绕过漏洞攻击者可利用该漏洞绕过验证码进行 SQL 注入和 XSS 攻击。CVE-2025-0366WordPress Captcha 插件存在验证码绕过漏洞CVSS 评分 8.1高危允许攻击者绕过验证码进行 SQL 注入等攻击。CVE-2026-40839开源 CRM 系统 ESPO CRM 存在验证码绕过漏洞攻击者可结合 SQL 注入实现未授权数据窃取。CVE-2025-5324某 CAPTCHA 生成器存在逻辑漏洞允许攻击者通过重放攻击绕过验证结合 SQL 注入漏洞窃取数据。CVE-2025-2671某 Web 应用防火墙的 CAPTCHA 实现存在绕过漏洞攻击者可通过修改 HTTP 头绕过验证进行 SQL 注入。启示验证码只是增加攻击成本的辅助手段不是核心防线。如果验证码逻辑有缺陷如可重复使用、可重放、可自动识别它就无法起到防护作用。十一、总结这一关的核心问题不在于密码强度也不在于注入漏洞而在于验证码的设计缺陷——验证码验证通过后没有被销毁导致攻击者可以用同一个验证码反复尝试密码。Low、Medium、High 三个级别的验证码逻辑都没有解决这个问题所以三个级别都存在漏洞。防御方案很简单验证码验证通过后立即用unset($_SESSION[captcha])销毁让每一次登录尝试都必须输入新的验证码。记住一句话验证码的核心价值在于“一次性”如果验证码可以重复使用它就和没有验证码一样。重要声明本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。如果这篇文章帮你解决了实操上的困惑别忘记点击点赞、分享也可以留言告诉我你遇到的其它问题我会尽快回复。你的关注是我坚持原创和细节共享的力量来源谢谢大家。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻