[GYCTF2020]Blacklist1

提示

  1. 堆叠注入
  2. 当select被禁用时handler的使用

[GYCTF2020]Blacklist1_第1张图片

这里随便输入union select,  他直接给出了黑名单

其实这一题我看到的第一反应是基于布尔的盲注

原因:

  1. 没有禁用ascii  substr  之类的,  并且输入1和0时输入1会有回显0不会
  2. 这里将预编译注入、联合注入、报错注入、都过滤的干净

通过它给出的黑名单考虑可用的命令

可尝试的

  1. 堆叠注入例如show database和show tables
  2. handler命令
  3. 基于布尔的盲注(通过1^0^1,真假真为假,1^1^1,真真真为真,来做手段)              !! 这里后面会排除掉,应为后面才想起来select被禁了,但是查询需要用所以排除!!

[GYCTF2020]Blacklist1_第2张图片

首先尝试

直接show tables找到flag所在的表

1';show tables;#

这里找到表FlagHere

[GYCTF2020]Blacklist1_第3张图片

这里尝试使用handler打开表并读取数据

handler:

诺select 被禁用handler可以替代 (handler+[table_name]+open)先将表打开(handler+[table_name]+read+[first])读取表里的第一个column将first换成next将依次向下读取

payload:1';handler FlagHere open;handler FlagHere read first;handler close;#

  • handler FlagHere read first用于读取表的第一个数据,将first改为next,就能依次向下读取
  • handler ……close用于关闭使用handler……open打开的表。

成功获取flag

[GYCTF2020]Blacklist1_第4张图片

13.2.3. HANDLER语法_MySQL 中文文档 (mysqlzh.com)

HANDLER语句提供通往表存储引擎接口的直接通道。HANDLER可以用于MyISAM和InnoDB表。

HANDLER...OPEN语句用于打开一个表,通过后续的HANDLER...READ语句建立读取表的通道。本表目标不会被其它线程共享,也不会关闭,直到线程调用HANDLER...CLOSE或线程中止时为止。如果您使用一个别名打开表,则使用其它HANDLER语句进一步参阅表是必须使用此别名,而不能使用表名。

如果被指定的索引满足给定的值并且符合了WHERE条件,则第一个HANDLER...READ语法取出一行。如果您有一个多列索引,则指定索引列值为一个用逗号隔开的清单。既可以为索引中的所有列指定值,也可以为索引列的最左边的前缀指定值。假设一个索引包括三个列,名称为col_a, col_b,和col_c,并按此顺序排列。HANDLER语句可以为索引中的所有三个列指定值,或者为一个最左边前缀中的各列指定值。举例说明:

你可能感兴趣的:(BUUCTF,web题,数据库,mysql,ctf,sql)