mysql数据库结构:
SQL层的功能:
- 判断语法,语句,语义
- 数据库对象授权情况判断,授权失败不继续
- 解析(解析器):将sql语句解析成执行计划,运行执行计划,生成找数据的方式
- 优化(优化器):运行执行计划,基于算法,从执行计划中选择代价最小的交给“执行器”
- 执行(执行器):运行执行计划,最终生成如何去磁盘找数据的方式
- 将取出的数据,交由下层(存储引擎层)进行处理
- 最终将取出的数据抽象成管理员或用户能看懂的方式(表),展现在用户面前
- 查询缓存:缓存之前查询的数据
MySql内置库:
- mysql:
保存有账户信息,权限信息,存储过程,event, 时区等信息- sys:
包含了一系列的存储过程,自定义函数,以及视图来帮助我们快速的了解系统的元数据信息。(元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等)- performance_schema:
用于收集数据库服务器性能参数- information_schema:
提供了访问数据库元数据的方式。
其中保存着关于MySql服务器所维护的所有其他数据的信息。如数据库名,数据库表名,数据库的表,表的数据类型与访问权限等
核心原理:
mysql内置的information_schema库,它功能强大,是我们进行mysql注入的基石
通过information_schema我们可以窥透整个mysql的运行情况,也可以查看到数据库中所有的数据信息
查询数据库核心语法:
功能名称 | 查询语句 |
---|---|
查库 | select schema_name from information_schema.schemata |
查表 | select table_name from information_schema.tables where table_schema='库名' |
查列 | select column_name from information_schema.columns where table_name='表名' |
查数据 | select 列名 from 库名.表名 |
注:'库名' , '表名' 可以换成十六进制
例如:
select column_name from information_schema.columns where table_name=0x75736572;(0x表示是十六进制,后面的数字是user转换成十六进制的结果)
相当于
select column_name from information_schema.columns where table_name='user';
tips:
- 所有类型的sql注入,都是基于查库,表,列语句
- 如果数据太多,导致无法返回查询结果
- 查询的场景:
可利用limit限定返回的数量及位置,依次查询:
select column_name from information_schema.columns where table_name=0x75736572 limit 0,2;- 回显数据的场景:
concat函数 链接多个数据成为一条返回结果
- 在一些场景,想要快速获取数据,需借助工具,如:BurpSuit