Старый 26.09.2010, 00:10   #1
Jokester
 
Аватар для Jokester
 
Регистрация: 01.07.2010
Сообщений: 252
Репутация: 155
По умолчанию MySql file_priv = no чтение файлов.

Вобщем-то мне стыдно, но истина дороже, поэтому публикую.

Состоялся у меня разговор с товарищем 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: "а чё, мы это всегда знали"
я: я уже думал об этом =\
я: пойду тогда внатуре повешусь
__________________
------------------

Последний раз редактировалось Jokester; 28.10.2010 в 00:31..
Jokester вне форума   Ответить с цитированием
Старый 26.09.2010, 00:38   #2
Grey
 
Аватар для Grey
 
Регистрация: 30.06.2010
Сообщений: 38
По умолчанию

Очень полезно, молодцы, что раскопали.
Действительно сможет помочь с обходом, но только не сейф мода, а опен бейс дира.
Grey вне форума   Ответить с цитированием
Старый 26.09.2010, 01:04   #3
che
 
Аватар для che
 
Регистрация: 05.07.2010
Сообщений: 144
Репутация: 166
По умолчанию

я в шоке, работает

MySQL: 5.0.77
Код:
LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE test FIELDS TERMINATED BY '\n'
работает

Код:
select load_file('/etc/passwd');
не работает

Последний раз редактировалось che; 26.09.2010 в 01:15..
che вне форума   Ответить с цитированием
Старый 26.09.2010, 11:03   #4
nikp
Banned
 
Регистрация: 05.07.2010
Сообщений: 201
Репутация: 183
По умолчанию

Работает, проверял долго, шок сильный, если бы нашел сам - не поверил бы (глючит последнее время).
Это как в собственной квартире найти еще одну комнату.

Видимо все начинали с select ... into outfile и хорошо запомнили условия выполнения, а load data infile типа обратная операция, и ограничения автоматически переносятся и на нее. И даже текст
Цитата:
При применении опции LOCAL выполнение может происходить несколько медленнее в сравнении с предоставлением серверу доступа к файлам напрямую, поскольку содержимое файла должно переместиться с клиентского хоста на сервер. С другой стороны, в этом случае нет необходимости в привилегиях FILE для загрузки локальных файлов.
не включает мозг...
nikp вне форума   Ответить с цитированием
Старый 04.02.2011, 19:10   #5
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

дааааа, работает, Mysql 5.1.37
Pashkela вне форума   Ответить с цитированием
Старый 27.02.2013, 10:13   #6
d0znpp
 
Аватар для d0znpp
 
Регистрация: 09.09.2010
Сообщений: 484
Репутация: 252
По умолчанию

Допы
- до 6ки оно включено на стороне сервера (последние 5ки тоже выключены, не отследил)
- на стороне клиента включается в каждом конкретном случае по-своему, для РНР чаще всего включено
- чтение получается с клиента СУБД, то есть, например, с правами РНР с аппсервера, а не с правами MySQL с БД сервера, как в случае с LOADFILE.
- через инъекции без batch не работает, надо команду с новой строки
- ! в качестве обхода open_basedir НЕ РАБОТАЕТ, все права настроены честно, https://bugs.php.net/bug.php?id=55737
__________________
The Sucks Origin Policy

Последний раз редактировалось d0znpp; 01.03.2013 в 14:55..
d0znpp вне форума   Ответить с цитированием
Старый 01.03.2013, 15:00   #7
d0znpp
 
Аватар для d0znpp
 
Регистрация: 09.09.2010
Сообщений: 484
Репутация: 252
По умолчанию

Оно вообще не работает, когда open_basedir хоть как-то настроен, кроме отключенного
https://bugs.php.net/bug.php?id=55737
Цитата:
mysqlnd allows LOAD DATA LOCAL in all cases but
if open_basedir is enabled. If open_basedir is set it is disabled regardless where the file to be loaded resides. This might be too strict for shared envs.
Do you have open_basedir enabled?
__________________
The Sucks Origin Policy
d0znpp вне форума   Ответить с цитированием
Старый 01.03.2013, 15:35   #8
Jokester
 
Аватар для Jokester
 
Регистрация: 01.07.2010
Сообщений: 252
Репутация: 155
По умолчанию

open_basedir оно обходит. До какого то момента точно.

Сейчас на локалке посмотрел - норм

PHP Version 5.2.12
5.1.40-community
win

Ну и раньше попадалось, но не фиксировал конфиги.
Возможно в php 5.3 или в новых mysql это и профиксили как то, можно потестить вобщем-то.

PS Если честно, не могу даже понять каким боком тут опенбейсдир вообще, и как это можно на уровне php прикрыть. Работаем то в чистом mysql по сути.
__________________
------------------

Последний раз редактировалось Jokester; 01.03.2013 в 15:48..
Jokester вне форума   Ответить с цитированием
Старый 01.03.2013, 16:23   #9
d0znpp
 
Аватар для d0znpp
 
Регистрация: 09.09.2010
Сообщений: 484
Репутация: 252
По умолчанию

Она работает в MySQL клиенте под PHP, ей вообще пофигу на MySQL сервепр почти. Файло чистается с правами PHP.

Сначала был mysqli, потом mysqlnd стал (5.3 точно по-дефолту, раньше как настроишь). В mysqli не обходило open_basedir.
__________________
The Sucks Origin Policy
d0znpp вне форума   Ответить с цитированием
Старый 01.03.2013, 18:16   #10
nikp
Banned
 
Регистрация: 05.07.2010
Сообщений: 201
Репутация: 183
По умолчанию

Цитата:
Сообщение от d0znpp Посмотреть сообщение
Она работает в MySQL клиенте под PHP, ей вообще пофигу на MySQL сервепр почти. Файло чистается с правами PHP.
Файло читается с правами клиента MySql, а клиент в php подключается, как библиотека, т.е. наследует права PHP, а не MySql сервера.
Ага.
nikp вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot