mysql读写文件
secure_file_priv参数
secure_file_priv为NULL,表示禁止限制操作 secure_file_priv为某一目录,表示只能操作该目录下的文件 secure_file_priv为空,表示不对读写文件进行限制
在mysql 5.6.34版本以后 secure_file_priv的值默认为NULL
show global variables like "secure%";
load_file()
可以直接查看
select load_file("E:/Desktop/2.txt");
也可以写进数据库中,然后看数据库中的内容
secure_file_priv为空
本机用的是php_study,所以修改my.ini中的配置,在[mysqld] 条目下添加
secure_file_priv=
然后再查看,secure_file_priv 修改为空 将文件写入数据库
insert into user(name) values (load_file('E:\\Desktop\\2.txt'));
secure_file_priv为NULL
如果secure_file_priv 的值为NULL,那么就不能将文件写进数据库中
secure_file_priv为某一目录
secure_file_priv为特定目录
只能操作特定目录的文件,其余不能
load data infile
secure_file_priv为空
当secure_file_priv 值为空,load data infile 可以正常执行
load data infile 'E:\\Desktop\\2.txt' into table user;
secure_file_priv为NULL
但是如果我们将secure_file_priv的值改为NULL(也就是配置文件中没有secure_file_priv的信息)
secure_file_priv为某一目录
还是该目录下的文件可以操作,但是其他目录下的文件不能操作
绕过限制,加上local
使用local需要开启local_infile,改变量默认为ON
如果需要修改
set global local_infile = true;
或者修改配置文件,在[mysqld]下添加条目local_infile = 1
绕过
load data local infile 'D:\\1.txt' into table user;
运行结果
system echo/cat
在版本为5.x时,可以直接使用system cat 进行使用
写文件
注意:
- 此方法只能在本地读取,远程连接mysql时无法使用
- 无法越权读取
mysql写shell的方法
直接写文件
select "cmd" into outfile "E:/Desktop/3.txt";
select "cmd" into dumpfile "E:/Desktop/3.txt";
注意:
- 不能写入已经存在的文件中
- 有
secure_file_priv 的限制
结果
当secure_file_priv 存在限制的时候,不能使用
日志注入
首先要开启log日志,查看日志是否开启
show variables like "%general%";
开启日志,设置日志文件路径
set global general_log = ON;
set global general_log_file = "D:/2.txt";
查看日志,木马已经写进去了 整完之后,把日志关掉,路径改回原来的值
dumpfile和outfile的区别
大佬的解释
outfile函数可以导出多行数据,而dumpfile只能导出一行数据。 outfile函数在将数据写到文件里时有特殊的格式转换,而dumpfile则保持原数据格式。
导出数据到文件的时候,可以指定一些参数 FIELDS ESCAPED BY 可以用来对指定的字符进行转义, FIELDS [OPTIONALLY] ENCLOSED BY 用来对字段值进行包裹, FIELDS TERMINATED BY 用来对字段值之间进行分割
注意:outfile后面不能接0x开头或者char转换以后的路径,load_file后面的路径既可以是单引号,也可以是0x、char转换的字符
参考文章
- Mysql 命令 load data infile 权限问题
- mysql文件读写
|