0x00
首先声明采用的Ubuntu与mysql环境为5.7.26-0ubuntu0.16.04.1
0x01
今天在练习AWD加固时,偶然进入mysql后,使用select load_file('/flag');竟然显示NULL,空值。但是当我换成select load_file('/etc/passwd');竟然显示正常,很奇怪的好叭。所以就疯狂百度最终解决了这个问题
0x02
那么首先就需要使用:show variables like '%secure%';。去查看一下secure-file-priv的当前值。如果是下列的情况则表示正常:
如果不是上述情况,secure_file_priv的值是路径,那么可以自行百度去修改即可。一般而言配置文件的位置如下:
但是总有那么几个例外 ,如果解决不了的话,或者说没有找到相关配置文件(比如我这个环境)。就请到这个目录去修改配置文件:/etc/mysq/mysql.conf.d
然后将secure-file-priv的值变为空,这里直接在[mysqld]中添加“secure-file-priv=”。即可(无需输入其他,直接等于就好)
如果你是其他的环境,不是同一个文件也没有关系。只需要添加secure-file-priv为空即可。然后重启mysql,我使用的命令是/etc/init.d/mysql restart(或者service mysqld restart、service mysql restart、systemctl restart mysqld.service等等,反正重启就行)。这个时候再去尝试是否能读取。如果还是不能读取,这里就需要禁用AppArmor for mysql(相关链接:https://www.cyberciti.biz/faq/ubuntu-linux-howto-disable-apparmor-commands/):
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
使用完之后,用命令sudo aa-status查看下是否禁用了mysql保护:
如果想要开启保护,输入下面的命令(这里我就不开启了):
sudo rm /etc/apparmor.d/disable/usr.sbin.mysqld
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
这个时候再去查看,发现就可以成功了。