Mysql中可以通过
load_file
这个函数来获取mysql服务器上的文件的信息,也可以通过into outfile
来写出到目标服务器,这样的话,就非常的爽了。解决这个问题,我们可以通过防止注入的方式拼接mysql,恶如表示通过字符串 的方式来拼接命令,第二种方式,配置mysql用户的权限
通过命令查看系统文件
-- 直接输入字符串到 文件中
select 'doubi' into outfile 'D:/yellowcong.txt';
-- 输出sql查询结果到文件中
select * from sys_user into outfile 'D:/yellowcong.txt';
-- 获取服务器的文件信息
select load_file('D:/yellowcong.txt') from dual;
-- 查看用户组信息 linux
-- cat /etc/passwd
-- 我发现linux的版本,没有这类的错误
select load_file('/etc/passwd') from dual;
通过命令的方式来获取服务器的系统时间,并写入到D盘文件
D盘生成了文件信息
linux环境测试
发现启动的时候,设置了--secure-file-priv
,刚好解决了我们的这个问题,不用怕别人偷摸看咋们文件了
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
查看参数
#查看参数配置,发现secure_auth开启了,所以不能写入文件
#需要修改my.cnf配置才可以进行这个操作
show variables like '%secure%';