SQL注入以及部分绕过方法详解

数据库知识补充

1.information_schema数据库

其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。在information_schema 中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。

2.information_schema.schemata表

提供了当前mysql实例中所有数据库的信息,其中需要用到的是 schema_name 这一列,存放的是各个数据库的名称

SQL注入以及部分绕过方法详解_第1张图片

3.information_schema.tables表

提供了所有数据库中所有的表的信息,其中需要用到的是 table_name 这一列,存放的是各个表的名称(这里表的名称是有可能重复的,因为是不同数据库中的表,名称可以相同),以及 table_schema 这一列,存放的是各个数据库的名称(可以通过选

择条件来指定数据库)

SQL注入以及部分绕过方法详解_第2张图片

4.information_schema.columns表

提供了所有数据库中所有表的所有字段的信息,其中需要用到的是 column_name 这一列,存放的是各个字段的名称

SQL注入以及部分绕过方法详解_第3张图片

联合注入

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

查看当前数据库中所有表名

Id=1 and 1=2 union select

你可能感兴趣的:(web渗透漏洞基础,sql,网络安全)