Страница 7 из 10 Работа с файлами через SQL-инъекцииСильно сомневаюсь, что это где-то может пройти, но справедливости ради нужно описать и такие способы. При включенных привилегиях file можно использовать команды LOAD_FILE и OUTFILE.
Про их опасность можно судить из нижеприведенных запросов: SELECT * FROM `news` WHERE `id`=-1 union select null,LOAD_FILE('/etc/passwd'),null,null; SELECT * FROM `news` WHERE `id`=-1 union select null,LOAD_FILE('/home/test/www/dbconf.php'),null,null;
Но на этом все беды еще не заканчиваются. SELECT * FROM `news` WHERE `id`=-1 union select null,'',null,null FROM `news` into outfile '/home/test/www/test.php'; Вот так записываем файл, который содержит php код. Правда кроме кода, в нем будет еще несколько записей null но это никаким образом не повлияет на работоспособность php кода.
Однако есть несколько условий, благодаря которым эти способы сработают: Включена привилегия FILE для текущего пользователя базы данных; Права на чтение или запись этих файлов для пользователя, под которым запускается MySQL сервер Абсолютный путь к файлу; менее важное условие - размер файла должен быть меньше чем max_allowed_packet, но поскольку в MySQL 3.23 размер наибольшего пакета может быть 16 мБ, а в 4.0.1 и более, размер пакета ограничивается только количеством доступной памяти, вплоть до теоретического максимума в 2 Гб это условие как правило всегда доступно. |