[GYCTF2020]Blacklist1
考点:
堆叠注入
handler命令的使用
看到页面有个简单的输入框,猜想是sql注入

试一下1',发现存在注入点,那就是sql注入了

输入1和输入2提交后好像没有什么有用的东西,试试联合查询注入,发现很多函数被禁止了

尝试堆叠注入,我对堆叠注入只有个浅显的理解,比如我们的payload是1'; show tables--+
应该是1'将前面的语句闭合,";"将前面和后面的命令有了一个先后顺序,先去执行闭合的1'的那个语句,然后再执行";"后面的语句"show tables";而--会把原本的sql查询语句后面的部分注释掉,+只是用作连接符号。可以看到是执行了两个结果。(如果理解不对,还请uu们指出错误)
那么接下来我们继注入:
使用1';show databases--+来查看数据库有哪些(看了网上的blog,好多都是直接show tables,但是直接show tables为什么会直接出现FlagHere表呢)

使用1';show tables--+ 看到FlagHere表

使用1';show columns from `FlagHere`--+ 查看列名

由于限制了多条命令的输入,所以只能改用其他的命令了Handler可以实现查询,可以来了解一下Handler命令的语法使用
MySQL :: MySQL 8.0 Reference Manual :: 15.2.5 HANDLER Statement
1. 打开表
HANDLER tbl_name OPEN [ [AS] alias]
tbl_name:要打开的表的名称。alias(可选):为打开的表指定一个别名,以便在后续的HANDLER操作中使用。这个命令会打开指定的表,以便进行后续的数据读取操作。如果指定了别名,那么在后续的
HANDLER语句中就可以使用这个别名来引用表。2. 读取数据
通过索引读取
HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)[ WHERE where_condition ] [LIMIT ...]
index_name:要使用的索引名称。{ = | <= | >= | < | > }:比较操作符,用于指定读取数据的条件。(value1,value2,...):与索引列对应的值,用于匹配数据。WHERE where_condition(可选):额外的条件,用于进一步过滤数据。LIMIT ...(可选):限制返回的记录数。这个命令会根据指定的索引和条件读取数据。
读取特定位置的数据
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }[ WHERE where_condition ] [LIMIT ...]
{ FIRST | NEXT | PREV | LAST }:指定读取数据的位置。FIRST读取第一条记录,NEXT读取下一条记录,PREV读取上一条记录,LAST读取最后一条记录。这个命令允许你按照索引的顺序读取数据。
简化读取
HANDLER tbl_name READ { FIRST | NEXT }[ WHERE where_condition ] [LIMIT ...]这个命令是上述通过索引读取的简化版本,它不需要指定索引名称,但通常用于没有索引或不需要通过索引读取的场景。
3. 关闭表
HANDLER tbl_name CLOSE这个命令会关闭之前打开的表,释放相关资源。
使用命令1';handler FlagHere open;handler FlagHere read first;handler FlagHere close;--+
读取flag



