Поскольку мы занимаемся этичным хакингом, то должны уметь не только найти уязвимость, но и пропатчить ее.
Какие можно дать рекомендации по настройке сервера.
1) Отменить привилегию на создание временных таблиц
2) Запретить использование load data local infile
3) Использовать версию PhpMyAdmin >=4.8.5
4) Не использовать PhpMyAdmin вообще, или ограничить доступ по ИП (ну или добавить бейсик-авторизацию )
На втором пункте остановимся подробнее.
Глобальная переменная
local_infileопределяет такую возможность, и по дефолту она включена.
Чтобы запретить локальное чтение в my.ini (my.cnf) в раделы [mysqld] и [mysql] надо добавить
local-infile = 0
Но нужно помнить следующие вещи:
При наличии прав Superuser настройку можно переопределить командой (прямо в ПМА)
SET GLOBAL local_infile=1;
Кроме того в php есть бага реализации mysqli_real_connect, которая игнорирует (перезаписывает) состояние переменной local-infile, если перед вызовом функции в опциях указать свое значение local_infile, например
Код:
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_LOCAL_INFILE, true);
$mysqli->real_connect($host, $username, $password, $database);
Еще есть одна засада, (просто для полноты описания проблемы) команда mysqlimport с опцией --local, проигнорирует настройки и отработает аналогично разрешенной load data local infile.