1 information_schema表介绍:
information_schema表是一个MySQL的系统数据库,他里面包含了所有数据库的表名
SQL注入中最常见利用的系统数据库,经常利用系统数据库配合union联合查询来获取数据库相关信息,因为系统数据库中所有信息都在这个数据库里面,比如所有数据库名、所有的表名、列名以及列名的数据库类型等
这里主要关注MYSQL系统数据库information_schema,关注系统数据库的表columns和schema表以及tables表:
- SCHEMATA表:提供了关于数据库的信息
- COLUMNS表:给出了表中的列信息
- TABLES表:给出了关于数据库中的表的信息
2 SCHEMATA表
这个表里面存放的数据库信息,这个表里面最关键的就是schema_name列,这里面存放了所有数据库名称,查询这个列所有的值即可拿到所有数据库名,这里还有其他列名,如图:
对于SCHEMATA这个表,他里面有一个schema_name这个字段
在这个字段里面他有数据库的所有名字:
select schema_name from information_schema.schemata;
3 COLUMNS表
这个表给出了所有表中的所有列信息,但是同时也包含了数据库名,所有表名,所有列名值对应列column_name,所有数据库名值对应列table_schema,所有表名值对应table_name列,当然此表还有其他列信息
他也可以用:
查看所有的数据库
select distinct table_schema from information_schema.columns;
查看列名
select distinct column_name from information_schema.columns
查询到不重复的列名总共有1014列:
查询表名:
select distinct table_name from information_schema.columns;
4 TALBES表
这个表给出了所有表的信息,但是同时也包含了数据库名,所有表名,所有数据库名值对应列table_schema,所有表名值对应table_name列,当然此表还有其他表的信息,如图,但是这里暂时只关注此两个列
table_schema--数据库
select distinct table_schema from information_schema.tables;
table_name--表名
select distinct table_schema from information_schema.tables;
5 总结
当出现我已经用database()爆出数据库名字过后,可以用information_schema这个数据库查表面,列名等字段信息