[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