mysql注入学习笔记

第一节 information_schema

在注入中,我们想跨库查询,搜索别的数据库的数据。就需要确定库名->表名->字段名,依照这个顺序来搜索到我们想要的数据。需要注意的是查询information_schema的权限需要比较大才可以。

通常我们在数据库命令行中获取库名表名字段名的方式是这样的:

1
2
3
show databases;
show tables;
desc [tablename];

但是在sql注入中,我们是在现有的语句中注入查询,这些被注入的语句一般是select,无法使用show命令,所以我们需要使用select来获取整个数据库中库名表名等信息。而information_schema这个表里刚好存有所有的库名和表名,于是我们就可以通过select查询这个表来获取相关信息。

库名相关信息在schemata这个表中,所以通过information_schema.schemata查所有数据库:

1
select * from information_schema.schemata;

表名相关信息 在tables这个表中,所以通过information_schema.tables查所有的表名

1
select * from information_schema.tables;

也可以用上一步查到的库名作为条件来筛选,在后面加上where table_schema='mysql'

但如果有WAF的话可能会阻止或过滤掉引号,那我们可以用库名的十六进制格式来代替xxx的部分,可以用select hex('xxx')来获取十六进制的库名,如“mysql”= “0x6D7973716C”,所以上面的语句变为where table_schema=0x6D7973716C就可以绕过WAF了。

查字段名在columns这个表中,用以下语句来查字段名:

1
select column_name from information_schema.columns where table_schema='xx' and table_name='xx';

mysql注入学习笔记
https://wanf3ng.github.io/2021/02/01/mysql注入学习笔记/
作者
wanf3ng
发布于
2021年2月1日
许可协议