Vou começar dizendo que FILE
é de longe os privilégios mais perigosos que você pode dar a um aplicativo. FILE
é muito mais perigoso que GRANT
porque em sql injection para mysql você não pode empilhar quires, assim você não pode transformar um SELECT
em uma instrução GRANT
e lá este privilégio é completamente inútil para injeção de sql. Por contraste, FILE
privileges são comumente usados por exploits para fazer o upload de um backdoor.
Por exemplo, aqui está um exemplo de injeção de SQL usando into outfile
select name from user where id=1 union select "<?php eval($_GET[e])?>" into outfile "/var/www/backdoor.php"
Se você tentar esta consulta em um sistema Ubuntu, ela falhará. Isso ocorre porque o AppArmor está negando o acesso de gravação do MySQL ao / var / www /. Você pode modificar as regras do AppArmor para negar o acesso de leitura / gravação a qualquer pasta escolhida. A configuração do AppArmor é bastante simples e você pode modificá-lo aqui: /etc/apparmor.d/usr.sbin.mysqld
.
Se você estiver em uma distro que não suporte o AppArmor, você ainda pode usar as permissões de arquivo do Linux, tenha em mente que essas funções do arquivo io serão executadas pela conta do usuário que está executando o MySQL. chown user -R /some/dir && chmod 700 -R /some/dir
.