学习目标:
今天来谈论一下SQL注入之高权限注入
- 首先在MySQL中也存在多个用户,其中权限最高当让就是root用户.网站在创建的时候会调用数据库链接,会区分系统用户链接与普通用户链接,root就拥有最高权限可以对多个网站进行管辖,普通用户仅拥有当前网站和配置的部分权限。
MySQL权限介绍
mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表
mysql权限表的验证过程为:
先从user表中的Host,User,Password这3个字段中判断连接的ip、用户名、密码是否存在,存在则通过验证。
通过身份认证后,进行权限分配,
按照user,db,tables_priv,columns_priv的顺序进行验证。
即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,
将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,
并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。
User表:存放用户账户信息以及全局级别(所有数据库)权限,决定了来自哪些主机的哪些用户可以访问数据库实例,如果有全局权限则意味着对所有数据库都有此权限
Db表:存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库
Tables_priv表:存放表级别的权限,决定了来自哪些主机的哪些用户可以访问数据库的这个表
Columns_priv表:存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据库表的这个字段
Procs_priv表:存放存储过程和函数级别的权限
上述的四个表也对应这相对的权限
全局性的管理权限: 作用于整个MySQL实例级别
数据库级别的权限: 作用于某个指定的数据库上或者所有的数据库上
数据库对象级别的权限:作用于指定的数据库对象上(表、视图等)或者所有的数据库对象
1.如何查询用户的权限
首先要紧系统库MySQL然后下面查询root用户的权限
select * from user where user='root' and host='localhost'\G;

我们可以看到root用户的权限全部都是y
2.查看mysql 有哪些用户:
mysql> select user,host from mysql.user;
3.查看用户对应权限
select * from user where user='root' and host='localhost'\G;
#所有权限都是Y ,就是什么权限都有
4.创建 mysql 用户
有两种方式创建MySQL授权用户
一.create user/grant 命令(推荐方式)
二.CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass';
通过insert语句直接操作MySQL系统权限表
5.只提供某项权限,以提供查询id权限为例
grant select(id) on test.temp to test1@'localhost' identified by '123456';
6.把普通用户变成管理员
GRANT ALL PRIVILEGES ON *.* TO 'test1'@'localhost' WITH GRANT OPTION;
7.删除用户
drop user finley@'localhost';
回到上一期的第二关我们之所以能够执行注入的操作就是因为我们拿到就是root权限
http://localhost/sqli-labs-php7-master/Less-2/?id=1 and 1=2 union select 1,user(),3
# 总结
本期呢就是想说明一点,并不是所有的用户都可以进行注入,我们要判断自己拥有的权限,有了一定的权限后,我们才可以进行下一步的计划。不要问我怎么获得高权限,我也正在学习,我只是将我学到进行总结。谢谢大家的阅读和关注,我也会一直更新下去。
3395

被折叠的 条评论
为什么被折叠?



