Показать сообщение отдельно

  #1  
Старый 07.03.2019, 14:07
dooble
Guest
Сообщений: n/a
Провел на форуме:
76692

Репутация: 138
По умолчанию

Эти два механизма известны давно и в хакерской среде используются для чтения файлов на сервере, например:

Код:
Code:
select load_file('/etc/passwd');

use anyDatabase;
CREATE TEMPORARY TABLE `tt` (`name` TEXT);
LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE tt;
SELECT * FROM tt;
Обе конструкции в итоге прочитают /etc/passwd.

Не буду делать по ним полное описание, остановлюсь только на их различии.

Принципиальное различие меду ними состоит в том, что load_file() [далее LF] выполняется в контексте сервера MySQL, а load data local infile [LDLI] - в контексте клиента MySQL.

Отсюда разница в эксплуатации:

LF читает файлы с правами mysql, а LDLI с правами php (обычно это права веб-сервера, здесь и далее рассматривается случай работы из скриптов сайта, например из phpMyAdmin).

Возможно чмоды выставлены так, что у mysql нет прав на чтение скриптов сайта а php не может прочитать за пределами open_basedir.

Кстати про open_basedir и LDLI, на рдоте и в хакере писали, что LDLI обходит open_basedir, но у меня такое ни разу не прокатывало, вот по крайней мере на php, как модуль Apache, тестил на многих серверах - "open_basedir restriction in effect. Unable to open file".

Второй важный момент, когда скрипты сайта и MySQL расположены на разных серверах.

В этом случае LF будет читать файлы там, где сервер MySQL, а LDLI с сервера, где лежат скрипты сайта.
 
Ответить с цитированием