Вобщем-то мне стыдно, но истина дороже, поэтому публикую.
Состоялся у меня разговор с товарищем
Pr0xor'м на отвлечённую тему, в котором мой оппонент походя упомянул, что читать файлы мускул может и без привелегий FILE. Я в это дело не поверил и попросил продемонстрировать, на что мне был дан ответ, что нужно что-нибудь взамен. Торговаться я не стал, а полез в маны, и вот что там увидел:
http://www.mysql.ru/docs/man/LOAD_DATA.html
Цитата:
Команда LOAD DATA INFILE читает строки из текстового файла и вставляет их в таблицу с очень высокой скоростью. Если задано ключевое слово LOCAL, то файл читается с клиентского хоста. Если же LOCAL не указывается, то файл должен находиться на сервере. (Опция LOCAL доступна в версии MySQL 3.22.6 и более поздних.)
Если текстовые файлы, которые нужно прочитать, находятся на сервере, то из соображений безопасности эти файлы должны либо размещаться в директории базы данных, либо быть доступными для чтения всем пользователям. Кроме того, для применения команды LOAD DATA INFILE к серверным файлам необходимо обладать привилегиями FILE для серверного хоста. See section 4.2.7 Привилегии, предоставляемые MySQL.
|
И самое главное что дефолт выглядит так:
Цитата:
В версиях MySQL 3.23.49 и MySQL 4.0.2 команда LOCAL не будет работать в случаях, если демон mysqld запущен с параметром --local-infile=0 или если для клиента не включена возможность поддержки LOCAL. See section 4.2.4 Вопросы безопасности, относящиеся к команде LOAD DATA LOCAL.
....
Если вы конфигурируете MySQL без опции --enable-local-infile, то команда LOAD DATA LOCAL будет запрещена для всех клиентов, если, конечно, они не будут вызывать mysql_options (... MYSQL_OPT_LOCAL_INFILE, 0). Обратитесь к разделу See section 8.4.3.159 mysql_options().
В случае клиента mysql, LOAD DATA LOCAL может быть разблокирована заданием опции --local-infile[=1] или заблокирована с помощью опции --local-infile=0.
По умолчанию все MySQL-клиенты и библиотеки компилируются с опцией --enable-local-infile для обеспечения совместимости с MySQL 3.23.48 и более старыми версиями.
|
Тоесть это дефолт.
Отсюда следует, что имея например ПМА с любой учёткой создаём таблицу и
LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE test FIELDS TERMINATED BY '\n'
Для ПМА этот файл будет ЛОКАЛЬНЫМ и файл прив ему не нужен.
А с шелла это должно позволить обходить сейф_мод (Но это теоретически, возможно я ошибаюсь, прошу принять участие в тестах я пока не тестил).
http://securityreason.com/securityalert/3102
Вроде как это должны были залатать, но не факт, нужны тесты
Вот такие пироги.
PS Спасибо Квазару за тесты
PPS
Цитата:
Qwazar: публикуй :-)
я: Бля вот это мы мудаки =\
я: Вот что значит свежий взгляд =\
я: Стыдоба!!! Хакеры блеать 
Qwazar: ога :-(
Qwazar: надо маны перечитать заново
я: /me пошёл делать харакири
Qwazar: да блин.. фейл
Qwazar: гг а прикинь сейчас все скажут
Qwazar: "а чё, мы это всегда знали"
я: я уже думал об этом =\
я: пойду тогда внатуре повешусь
|