数据库知识补充
1.information_schema数据库
其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。在information_schema 中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。
2.information_schema.schemata表
提供了当前mysql实例中所有数据库的信息,其中需要用到的是 schema_name 这一列,存放的是各个数据库的名称
3.information_schema.tables表
提供了所有数据库中所有的表的信息,其中需要用到的是 table_name 这一列,存放的是各个表的名称(这里表的名称是有可能重复的,因为是不同数据库中的表,名称可以相同),以及 table_schema 这一列,存放的是各个数据库的名称(可以通过选
择条件来指定数据库)
4.information_schema.columns表
提供了所有数据库中所有表的所有字段的信息,其中需要用到的是 column_name 这一列,存放的是各个字段的名称
联合注入
Union select可以一次执行两条语句,并且将两条语句查询到的临时表结果合并成一张临时表进行显示。但是有个前提就是,两张表的字段数必须一致。(我们可以用order by来确定字段数。)
union select联合查询的时候,两边都查到了数据,默认是显示左边的数据,如果左边没有查到数据,右边查到了,就显示右边的数据。所以我们在构造数据的时候,应该构造为左边为假,类似于id=9999或id=1 and 1=2。
函数介绍:
Order by
第一种order by id(输入字符)
基于id这个字段排序,如果没有id这个字段,就报错
第二种order by 1(输入数字)
基于第一列排序,当输出的列数超过最大列数,比如有3列你输入了4,这里4就会被当做是字段的名称来查询,如果没有查到,就报错,如果查到了,就按照4这个列来排序。(可能就 会产生roder by 3和order by 4都不报错,要自己学会判断。)
测试的时候先用order by 1测试语句有没有问题,如果order by 1有问题的话要么被过滤了,要么语句出错了。
Group_concat()函数
作用是将一列中的所有内容合并成一个字符串并返回结果
concat_ws()函数
能够将多个字符串连接成一个字符串返回,并且可以一次性指定分隔符
group_concat(concat_ws(':',username,password))
Database()
显示当前数据库
查询语句:
查看所有数据库
Id=1 and 1=2 union select 1,group_concat(scheam_name),3 from information_schema.schemata %23
查看当前数据库名
Id =1 and 1=2 union select 1,database(),3 %23