堆叠注入之利用handler语句获取数据

SoloWalker Lv3

BUUCTF之[GYCTF2020]Blacklist

handler语句

HANDLER 是 MySQL 中用于直接访问表存储引擎接口的语句,类似于文件操作:

1
2
3
4
5
6
7
8
9
10
-- 打开表
HANDLER table_name OPEN [AS alias];

-- 读取数据
HANDLER table_name READ FIRST; -- 读取第一行
HANDLER table_name READ NEXT; -- 读取下一行
HANDLER table_name READ {索引名} {操作};

-- 关闭表
HANDLER table_name CLOSE;

与union的对比

handler的优势

  • 不需要知道列数,即不需要order by来查询
  • 不受select限制,如果select被ban了也能查询到数据
  • 访问数据更灵活,可以精确控制读取到哪一行

注入过程

1

首先测试一下是什么类型的注入,输入1'报错,即为字符型注入。

2

然后测试了1' order by 3,没有这一列,测试order by 2则通过。

尝试经典的联合查询注入,结果回显:

3

回显了waf,select等查询字符被过滤。大概率是堆叠注入。然后测试show语句,输入1';show databases;#,回显:

4

确认是堆叠注入,也能看到这些数据库名。然后看一下当前数据库的数据表,输入1';show tables;#,回显:

5

此时很明显了,flag就在这。然后查一下FlagHere这个表的字段,输入1';show columns from FlagHere;#,回显:

6

此时我们需要查询到flag字段里面的数据,这时就可以用上面讲到的handler语句来获取数据,输入1';handler FlagHere open;handler FlagHere read first;handler FlagHere close;#,即可回显flag。

总结

一般来说如果是有回显的SQL注入,而select之类的查询语句又被ban了,很大可能是堆叠注入。这可能需要对数据库有更深的理解,有机会的话还是可以再多学习一点数据库的知识。

  • Title: 堆叠注入之利用handler语句获取数据
  • Author: SoloWalker
  • Created at : 2026-03-24 00:00:00
  • Updated at : 2026-04-13 20:55:41
  • Link: https://s0lowalker.github.io/2026/03/24/利用handler进行堆叠注入/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
堆叠注入之利用handler语句获取数据