关注这个漏洞的其他相关笔记:SQL 注入漏洞 - 学习手册-CSDN博客
0x01:MySQL 数据库简介
MySQL 是一个流行的关系型数据库管理系统(RDBMS),它基于 SQL (Structured Query Language)进行操作。MySQL 是由瑞典 MySQL AB 公司开发的,后来被 Sun Microsystems 收购,最终称为 Oracle 公司的产品。它是一个开源项目,遵循 GNU 通用公共许可证(GPL)发布,同时也提供了商业许可。
0x0101:MySQL 数据库特点
以下是 MySQL 的一些关键特点:
-
开源性: MySQL 是开源的,这意味着你可以免费下载和使用它,甚至可以修改源代码以满足需求。
-
跨平台: MySQL 可以在多种操作系统上运行,包括 Linux、Windows、MacOS 等。
-
高性能: MySQL 以其高性能和可靠性而闻名,适用于处理大量数据和高并发请求。
-
安全性: MySQL 提供了强大的数据加密和访问控制功能,以保护数据不被未授权访问。
-
灵活性: MySQL 支持多种数据类型,包括数值、日期和时间、字符串等,并且可以存储大型对象如图片和视频。
-
可扩展性: MySQL 具有良好的可扩展性,可以通过主从复制、分片和分区等技术来实现对数据的扩展,从而提高系统的高可用性和高性能。
-
支持多种变成语言: MySQL 支持多种编程语言进行开发,如 C、C++、Java、Python 等,这使得开发者可以在不同的平台上使用 MySQL 进行开发。
0x0102:MySQL 数据库应用场景
MySQL 在多种场景下被广泛使用,包括但不限于以下几种情况:
-
Web 应用: MySQL 是许多 Web 应用的首选数据库系统,特别是于 PHP、Python、Java 等后端技术结合使用。许多流行的 Web 框架和 CMS(内容管理系统),如 WordPress、Drupal 等,都支持 MySQL 作为其后端数据库。
-
电子商务: 在电子商务网站中,MySQL 用于存储用户信息、产品信息、订单详情等关键数据。由于 MySQL 具有高性能和可扩展性,因此它可以轻松处理大量并发请求和交易数据。
-
企业应用: 许多企业使用 MySQL 来构建和管理其内部系统,如 ERP(企业资源计划)、CRM(客户关系管理)和 BI(商业智能)系统等。这些系统需要存储、处理和查询大量数据,而 MySQL 提供了可靠的性能和安全性。
-
数据分析: 虽然 MySQL 不是一个专门的数据仓库或大数据分析平台,但它仍然可以用于存储和分析结构化数据。许多组织使用 MySQL 作为其数据仓库的一部分,并使用 SQL 查询来提取和分析数据。
-
移动应用: 随着移动应用的普及,越来越多的开发者选择使用 MySQL 作为其后端数据库。通过 REST API 或其他技术,移动应用可以与 MySQL 数据库进行交互,实现用户认证、数据存储和检索等功能。
总而言之,只要你想将大量数据找个地方进行存储,并想要随时查询和分析这些数据,MySQL 数据库都是一个不错的选择。
0x02:MySQL 数据库详解
由于本文是 SQL 注入的前导知识,所以下面只介绍在注入 MySQL 数据库时,我们需要了解的相关内容。
0x0201:MySQL 数据库层级关系
我们通常将提供数据库服务的服务器,叫做 “数据库服务器”。在一个数据库服务器中,通常存在多个数据库,每个数据库中含有多张数据表,一张数据表中又有多个字段,每个字段中存储的才是我们需要的数据。
数据库服务器的这种结构很容易就让我们和 Excel 表格联系起来:一个 Excel 文件就是一个数据库,在一个 Excel 文件中我们又可以新建多张表,这就类似于数据表,每个表中又有:用户名、密码、手机号 ... 这样的字段,每个字段下面又会存储对应的数据。
0x0202:MySQL 系统库
在高版本(5.0 及以上)的 MySQL 数据库中存在四个系统库,分别为:information_schema
、performace_schema
、mysql
、和 sys
,它们提供了访问数据库元数据的方式。
元数据:关于数据库的数据,如数据库的库名,每个数据库中的表名、字段名等信息。
1. 系统库 - Information_schema
该系统库是信息数据库,其中保存着关于 MySQL 服务器所维护的所有其他数据库的信息。例如数据库或表的名称、列的数据类型或者访问权限、在 Web 渗透过程中有着举足轻重的地位。
1.1 SCHEMATA 表 - SCHEMA_NAME
SCHEMATA 表中保存了已有的所有数据库的信息。
该表中存储了 MySQL 实例中所有数据库的信息,show databases;
的结果就取自于此表:
mysql> select * from information_schema.schemata;
+--------------+--------------------+----------------------------+------------------------+----------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
+--------------+--------------------+----------------------------+------------------------+----------+
| def | information_schema | utf8 | utf8_general_ci | NULL |
| def | challenges | gbk | gbk_chinese_ci | NULL |
| def | dvwa | utf8 | utf8_unicode_ci | NULL |
| def | mysql | latin1 | latin1_swedish_ci | NULL |
| def | performance_schema | utf8 | utf8_general_ci | NULL |
| def | pikachu | utf8 | utf8_unicode_ci | NULL |
| def | security | gbk | gbk_chinese_ci | NULL |
| def | sys | utf8 | utf8_general_ci | NULL |
+--------------+--------------------+----------------------------+------------------------+----------+
8 rows in set (0.00 sec)
1.2 TABLES 表 - TABLE_NAME
TABLES 表中保存了所有已有的数据表的信息。
该表中存储了已有数据库中所创建的所有表的信息,可以通过此表,获取每个数据库下面已有的表名:
mysql> select * from information_schema.tables;
+---------------+--------------------+------------------------------------------------------+-------------+--------------------+---------+------------+------------+----------------+-------------+--------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+--------------------+-----------------------------------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | ENGINE | VERSION | ROW_FORMAT | TABLE_ROWS | AVG_ROW_LENGTH | DATA_LENGTH | MAX_DATA_LENGTH | INDEX_LENGTH | DATA_FREE | AUTO_INCREMENT | CREATE_TIME | UPDATE_TIME | CHECK_TIME | TABLE_COLLATION | CHECKSUM | CREATE_OPTIONS | TABLE_COMMENT |
+---------------+--------------------+------------------------------------------------------+-------------+--------------------+---------+------------+------------+----------------+-------------+--------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+--------------------+-----------------------------------------+
| def | information_schema | CHARACTER_SETS | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 384 | 0 | 65739264 | 0 | 0 | NULL | 2023-08-18 08:01:31 | NULL | NULL | utf8_general_ci | NULL | max_rows=174762 | |
| def | information_schema | COLLATIONS | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 231 | 0 | 66819522 | 0 | 0 | NULL | 2023-08-18 08:01:31 | NULL | NULL | utf8_general_ci | NULL | max_rows=290514 | |
| def | information_schema | COLLATION_CHARACTER_SET_APPLICABILITY | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 195 | 0 | 65431080 | 0 | 0 | NULL | 2023-08-18 08:01:31 | NULL | NULL | utf8_general_ci | NULL | max_rows=344148 | |
| def | information_schema | COLUMNS | SYSTEM VIEW | InnoDB | 10 | Dynamic | NULL | 0 | 16384 | 0 | 0 | 8388608 | NULL | NULL | NULL | NULL | utf8_general_ci | NULL | max_rows=11156 | |
| def | information_schema | COLUMN_PRIVILEGES | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 2565 | 0 | 67028580 | 0 | 0 | NULL | 2023-08-18 08:01:31 | NULL | NULL | utf8_general_ci | NULL | max_rows=26163 | |
| def | information_schema | ENGINES | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 490 | 0 | 66297000 | 0 | 0 | NULL | 2023-08-18 08:01:31 | NULL | NULL | utf8_general_ci | NULL | max_rows=136956 | |
| def | information_schema | EVENTS | SYSTEM VIEW | InnoDB | 10 | Dynamic | NULL | 0 | 16384 | 0 | 0 | 8388608 | NULL | NULL | NULL | NULL | utf8_general_ci | NULL | max_rows=2473 | |
| def | information_schema | FILES | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 14468 | 0 | 67088116 | 0 | 0 | NULL | 2023-08-18 08:01:31 | NULL | NULL | utf8_general_ci | NULL | max_rows=4638 | |
| def | information_schema | GLOBAL_STATUS | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 3268 | 0 | 67026680 | 0 | 0 | NULL | 2023-08-18 08:01:31 | NULL | NULL | utf8_general_ci | NULL | max_rows=20535 | |
| def | information_schema | GLOBAL_VARIABLES | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 3268 | 0 | 67026680 | 0 | 0 | NULL | 2023-08-18 08:01:31 | NULL | NULL | utf8_general_ci | NULL | max_rows=20535 | |
| def | information_schema | KEY_COLUMN_USAGE | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 4637 | 0 | 67064931 | 0 | 0 | NULL | 2023-08-18 08:01:31 | NULL | NULL | utf8_general_ci | NULL | max_rows=14472 | |
| def | information_schema | OPTIMIZER_TRACE | SYSTEM VIEW | InnoDB | 10 | Dynamic | NULL | 0 | 16384 | 0 | 0 | 8388608 | NULL | NULL | NULL | NULL | utf8_general_ci | NULL | max_rows=2314098 | |
| def | information_schema | PARAMETERS | SYSTEM VIEW | InnoDB | 10 | Dynamic | NULL | 0 | 16384 | 0 | 0 | 8388608 | NULL | NULL | NULL | NULL | utf8_general_ci | NULL | max_rows=24087 | |
-> 后面省略
+---------------+--------------------+------------------------------------------------------+-------------+--------------------+---------+------------+------------+----------------+-------------+--------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+--------------------+-----------------------------------------+
292 rows in set (0.07 sec)
1.3 COLUMNS 表 - COLUMN_NAME
COLUMNS 表中存储了数据库中所有表的字段信息。
该表中提供了每个数据库中的列(字段)信息,详细描述了某张表的所有列以及每个列的信息:
mysql> select * from information_schema.columns limit 0,2;
+---------------+--------------------+----------------+----------------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+-----------------+-------------+------------+-------+------------+----------------+-----------------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | ORDINAL_POSITION | COLUMN_DEFAULT | IS_NULLABLE | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH | CHARACTER_OCTET_LENGTH | NUMERIC_PRECISION | NUMERIC_SCALE | DATETIME_PRECISION | CHARACTER_SET_NAME | COLLATION_NAME | COLUMN_TYPE | COLUMN_KEY | EXTRA | PRIVILEGES | COLUMN_COMMENT | GENERATION_EXPRESSION |
+---------------+--------------------+----------------+----------------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+-----------------+-------------+------------+-------+------------+----------------+-----------------------+
| def | information_schema | CHARACTER_SETS | CHARACTER_SET_NAME | 1 | | NO | varchar | 32 | 96 | NULL | NULL | NULL | utf8 | utf8_general_ci | varchar(32) | | | select | | |
| def | information_schema | CHARACTER_SETS | DEFAULT_COLLATE_NAME | 2 | | NO | varchar | 32 | 96 | NULL | NULL | NULL | utf8 | utf8_general_ci | varchar(32) | | | select | | |
+---------------+--------------------+----------------+----------------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+-----------------+-------------+------------+-------+------------+----------------+-----------------------+
2 rows in set (0.07 sec)
2. 系统库 - Performance_schema
该系统库是 MySQL 5.5 新增的一个数据库,主要用于收集和存储与数据库性能相关的统计信息和指标。它主要用于帮助运维人员对数据库性能进行监控、调优和故障排查。
3. 系统库 - Mysql
该库是整个数据库体系中的核心数据库,类似于 SQL Server 中的 master 表,主要负责存储数据库的用户(账户)信息、权限设置、关键字等 MySQL 自己需要使用的控制和管理信息。该库不可以删除,如果你对 MySQL 不是很了解,请不要轻易修改这个数据库里面的信息。
常用举例:在 mysql.user 表中修改 root 用户的密码。
4. 系统库 - Sys
sys 库是 MySQL 5.7 新增加的系统数据库,该库是专门为数据库管理员(DBA)设计的辅助库,旨在帮助用户更轻松地分析和解决数据库性能问题。
该库基于 performance_schema,通过各种预定义的视图和函数,简化了性能数据的访问和分析过程。通过使用 sys 系统库,DBA 可以更快获得有价值的性能信息,从而更好地管理和调优 MySQL 实例的性能和行为。