0x00 简介
Mysql用户在没有File权限的情况下是无法通过load_file()函数读取文件,但是我们可以尝试低权限用户利用load data infile读取文件。
[scode type="blue"]File权限代表允许在MySQL可以访问的目录进行读写磁盘文件操作,可使用的命令包括select ... into outfile,load file()等函数
1、LOAD DATA INFILE
将文件内容导入表中;
2、INTO OUTFILE
将表中记录导出到文件中;
3、LOAD_FILE()
读取文件中内容。
[/scode]
[scode type="green"]在高版本的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/目录下;
[/scode]
0x01 配置与利用
这里使用phpstudy自带的mysql环境,local_infile=ON,secure_file_priv值为空
[scode type="blue"]local_infile变量指示能否使用load data local infile命令。[/scode]
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';
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 data local infile 'C:\\1.txt' into table test fields terminated by '' lines terminated by '\n';
[scode type="blue"]fields terminated by ',' 该句表示以by后边的字符来划分导入表中的每一个字段
lines terminated by ',' 表示行以'n'结尾
[/scode]
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进行读取文件。
评论已关闭