0x00 简介

Mysql用户在没有File权限的情况下是无法通过load_file()函数读取文件,但是我们可以尝试低权限用户利用load data infile读取文件。

File权限代表允许在MySQL可以访问的目录进行读写磁盘文件操作,可使用的命令包括select ... into outfile,load file()等函数
1、LOAD DATA INFILE将文件内容导入表中;
2、INTO OUTFILE将表中记录导出到文件中;
3、LOAD_FILE()读取文件中内容。

在高版本的mysql引入了secure-file-priv特性。
secure-file-priv参数是用来限制LOAD DATA, select ... into outfile,load file()的目录。
可使用命令show variables like '%secure%';进行查看。
1、当secure_file_priv的值为时,表示对导入或导出不做限制。
2、当secure_file_priv的值为null时,表示不允许导入或导出;
2、当secure_file_priv的值为/tmp/时,表示限制导入或导出只能发生在/tmp/目录下;

0x01 配置与利用

这里使用phpstudy自带的mysql环境,local_infile=ON,secure_file_priv值为空

local_infile变量指示能否使用load data local infile命令。

1、使用高权限账户创建测试用账户

用户名为test,密码为123

create user 'test'@'localhost' identified by '123';

刷新下系统权限相关表:flush privileges;

2、查看创建的用户test是否有file_priv权限

即使有了file权限,输出目录路径应该secure_file_priv一致

select file_priv from mysql.user where user='test';
或者直接查看test用户权限
show grants for 'test'@'localhost';

file_priv.png
grants.png
若有file权限可利用下面语句进行回收:

revoke file on *.* from 'test'@'localhost';

3、使用高权限账户创建test表

test表用于储存LOAD DATA INFILE读取到的文件内容

CREATE TABLE `test` (
 
  `test` varchar(255) DEFAULT NULL
 
) DEFAULT CHARSET=utf8;

4、使用低权限账号进行读取文件

使用常规的select load_file('C:\\1.txt');是读取不到文件内容的:
load_file.png
这时利用语句:

load data local infile 'C:\\1.txt' into table test fields terminated by '' lines terminated by '\n';

fields terminated by ',' 该句表示以by后边的字符来划分导入表中的每一个字段
lines terminated by ',' 表示行以'n'结尾

执行结果读取到内容:
content.png

0x02总结

1、local_infile=1,该变量表示能否使用load data local infile命令。默认为ON。 可尝试使用load data local infile进行读取文件。
2、当mysql服务以高权限(系统账户)开启时,可尝试使用load data local infile进行读取文件。
3、当高权限启动类似phpmyadmin等(web形式的管理)界面时,可尝试使用load data local infile进行读取文件。

Last modification:March 27th, 2020 at 01:45 pm
如果觉得我的文章对你有用,请随意赞赏