①mysql数据库结构

来源:互联网 发布:长春学历网络教育报名 编辑:程序博客网 时间:2024/06/01 22:00

SQL注入


SQL 注入(SQL injection),是一种存在于应用程序与数据库之间的安全漏洞。简而言之,SQL注入是这样一种漏洞:应用程序在向后台数据库传递SQL查询时,如果为攻击者提供了影响该查询的能力,就会引发SQL注入。攻击者通过影响传递给数据库的内容来修改SQL自身的语法和功能,并且会引发SQL所支持数据库和操作系统的功能和灵活性。

SQL注入的分类如下图所示:
sql注入分类

mysql数据库


mysql数据库是一种关系型数据库。

mysql数据库的结构如下图所示:
数据库结构

mysql中存在很多数据库、每个数据库中保存很多数据表、每个数据表中保存很多字段、每个字段当中保存着很多数据项、对应的数据项组成一条录。

例如,下面就是一种典型的mysql数据库记录:

  • {李明,1205090123,男,23,北京}

如上图所示,对于mysql数据库的sql注入,我们要按照其数据库结构的特点来进行注入。

  • 首先,得到当前数据库名。
  • 然后,得到当前数据库的表名。
  • 接着,得到当前表下的各个字段名。
  • 最后,得到当前表的各个字段的数据项。

“白盒”枚举mysql数据库


这里的“白盒”是指注入者知道mysql数据库结构以及mysql数据库内容的情况。
这时,我们对mysql数据库的枚举操作一般如下:

  • ①枚举数据库名
    数据库

  • ②枚举当前数据库的表名
    表

  • ③枚举当前数据表的字段名和数据项
    字段

“黑盒”枚举mysql数据库


这里的“黑盒”是指注入者知道mysql数据库结构以及mysql数据库内容的情况。这也是我们在学习SQL注入一般环境。

对于mysql数据库(版本大于5.0)而言,mysql中存在一个Information_Schema数据库,这是mysql自带的数据库,它用来访问mysql数据库元数据(数据库名、表名、列名、数据类型,访问权限等)。
其中, Information_Schema数据库中有三张表值得我们重点关注:

  • SCHEMATA表:提供了当前mysql实例中所有数据库的信息。
    SCHEMATA

  • TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。
    TABLES

  • COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。
    COLUMNS

这时,我们对mysql数据库的枚举操作一般如下:

  • ①枚举数据库名
    schema_name

sql语句为:

select schema_name from information_schema.schemata
  • ②枚举当前数据库的表名
    枚举当前数据库的表名

sql语句为:

select table_name from information_schema.tables where table_schema = "security";
  • ③枚举列名
    枚举当前数据表的字段名

sql语句为:

select column_name from information_schema.columnswhere table_name = "users";
  • ④枚举数据项内容
0 0
原创粉丝点击