读取服务端文件
读取文件利用方式
load_file()
select load_file('/etc/passwd')
load data infile()
利用该函数读文件时需要将文件内容保存至一个表中,在方便查看结果的情况下,一般最好自己创建一个新表来保存查询的结果。
-- 创建存储结果的表
create table result(cmd text);
-- 读取文件内容到表中
load data infile '/etc/passwd' into table result;
select * from result;
这里读文件和select函数需要一起使用才能获取到即时的文件内容,若分两次执行将不会获取到文件内容。通过这样执行sql语句可以保证数据库的表中不会存储任何内容。
防御方式
通过启用MySQL的secure_file_priv配置即可管理,具体配置有三种:
NULL:MySQL服务器将禁用导入和导出操作,即无法读取和写入任何文件
空:值为空代表该项配置无效
目录名:MySql服务器的导入和导出操作将被限制在配置的目录中
一般默认情况下,该配置在MySQL的默认配置如下
平台
默认值
WIN
>=5.7.16默认值为NULL,<5.7.16则为空
DEB, RPM, SLES, SVR4(unix/linux)
/var/lib/mysql-files
Otherwise(自行编译版本)
基于CMAKE编译时手动配置参数
具体可参考MySQL官网说明sysvar_secure_file_priv
sec