Простое руководство по Load File и Into OutFile. Если вы знакомы с основами MySQL инъекции, вы можете приступить к чтению этого руководства.
Хорошо, давайте посмотрим, что такое Load File и Into OutFile.
-- Что такое Load File и Into OutFile?
Это команды (используются в MySQL инъекциях).
Load File: Читает содержимое файла и возвращает его в виде строки.
Into OutFile: Записывает выбранные строки в файл. Файл создается на сервере. Таким образом, у вас должны быть права доступа для использования этих команд. Создаваемый файл не должен существовать. Таким образом, помимо прочего, предотвращается уничтожение таблиц и файлов (таких как "/etc/passwd”). (… Источник: MySQL.com)
Итак, начнем!
Вы должны заменить один видимый столбец (т.е. номер, показанный на странице) в URL на строку “user” для того, чтобы увидеть имя пользователя.
Рассмотрим пример:
http://vulnsite.com/index.php?id=-1+union+all+select+1,user,3,4+from+mysql.user-- В нашем примере столбец (номер) 2 может быть увиден на уязвимой странице.
Если страница возвращает имя пользователя на месте отображаемого столбца на сайте - это хорошо. Это значит, что у вас есть доступ к таблице “mysql.user” и вы можете читать дальше. Запомните имя пользователя, которое вы увидели!
В нашем примере это условие выполняется (мы имеем доступ к таблице “mysql.user”) и теперь мы можем проверить права доступа к файлам.
В URL вы должны заменить: "user", строкой "group_concat(user,0x3a,file_priv)", для того, чтобы проверить возможность доступа к файлам на (вашем) уязвимом сайте.
Пример:
http://vulnsite.com/index.php?id=-1+union+all+select+1,group_concat(user,0x3a,file_priv),3,4+from+mysql.user--
Теперь на месте отображаемого столбца (т.е. замененного) мы видим список пользователей и права доступа к файлам (в формате: Имя пользователя:Права доступа, ...). Вы должны найти имя пользователя, которое вы видели раньше. Когда найдете его, посмотрите на правую сторону (рядом с именем). Если написано "Y" (Yes/Да), значит у вас есть права доступа к файлам и вы можете читать дальше. В противном случае там будет написано "N" (No/Нет) - у вас нет прав доступа.
В нашем примере у нас (разумеется) есть права доступа – “… наш_пользователь:Y,…”
Перейдем к следующей части.
Синтаксис: load_file('ФАЙЛ')
Например, мы хотим прочитать файл “/etc/passwd”:
http://vulnsite.com/index.php?id=-1+union+all+select+1,load_file('/etc/passwd'),3,4+from+mysql.user--
Содержимое файла "/etc/passwd" будет отображено в столбце 2.
Примечание 1: "../" – означает выход из текущей директории.
Примечание 2: Если появляется ошибка когда вы пытаетесь прочитать какой-нибудь файл – это значит, что включены волшебные кавычки (эта функция добавляет косую черту до и после символов “”). Вы должны преобразовать имя файла (т.е. текст/строку) в шестнадцатеричный или символьный вид и удалить символы "":
Для шестнадцатеричного вида всегда добавляйте “0x” перед шестнадцатеричной строкой (без пробелов). Строка не должна содержать пробелов! Например: (Load File - "/etc/passwd":) load_file(0x2f6574632f706173737764)
Для символьного типа: char(NUMBERS,NUMBERS,NUMBERS...) ; если вы преобразуете строку (т.е. текст) в символьный вид и преобразованный текст содержит пробелы между номерами, вы должны заменить все пробелы запятыми(!) ; например: (Load File - "/etc/passwd":) load_file(char(47,101,116,99,47,112,97,115,115,119,100))
Кстати, это поможет в преобразовании текста в шестнадцатеричный и символьный вид: http://home2.paulschou.net/tools/xlate/
С командой Load File мы разобрались.
Синтаксис: INTO OUTFILE 'ФАЙЛ’
Примечание 1: Эта команда должна быть всегда в конце! Пример: ...+INTO+OUTFILE+'/ФАЙЛ'--
Для записи текста в ваш файл (на уязвимом сайте/сервере) замените один видимый столбец в URL (т.е. номер, который показан на странице) на ваш текст в кавычках, который будет записан в файл…
Рассмотрим наш образец: мы хотим записать текст "testing” в файл “test.txt” (на нашем уязвимом сайте/сервере) в директорию сайта:
http://vulnsite.com/index.php?id=-1+union+all+select+1,"testing",3,4+INTO+OUTFILE+'/home/vulnsite/www/test.txt'--
Примечание 2:
Если у вас два видимых столбца или более (т.е. номера, которые показаны на уязвимой странице), вам нужно заменить эти столбцы (т.е. номера в URL) словом "null"(!). Если вы не произведете замену, эти номера будут записаны вместе с вашим текстом в ваш файл на уязвимом сайте/сервере.
В нашем примере видимыми столбцами являются 2 и 3. Таким образом, мы должны произвести следующую замену:
http://vulnsite.com/index.php?id=-1+union+all+select+1,"testing",null,4+INTO+OUTFILE+'/home/vulnsite/www/test.txt'--
После того как страница загрузится без ошибок, файл будет создан (на нашем уязвимом сайте/сервере), и этот файл будет находиться по адресу: http://vulnsite.com/test.txt
Примечание 3: Если в тексте, записываемого файла вы хотите использовать кнопку Return/Enter, просто преобразуйте текст в шестнадцатеричный или символьный вид...
Примечание 4: Файлы должны создаваться в директории сайта. В противном случае команда Into OutFile не будет работать.
Примечание 5: Если страница где должен располагаться текст, записываемый в файл, пуста (т.е. возникает ошибка) - это значит, что включены волшебные кавычки. Эта функция добавляет косые черты до и после символов "". Вы должны преобразовать текст (т.е. строку) в шестнадцатеричный или символьный вид и удалить символы "". См. объяснение и ссылку в конце 3 части…
Внимание: Не преобразовывайте имя файла в шестнадцатеричный или символьный вид! В противном случае, метод не сработает! Предупреждение действительно только для команды Into OutFile. Если у (вашего) уязвимого сайта включены волшебные кавычки, команда Into OutFile не будет работать.
Мы разобрались с командой Into OutFile.
Не знаю, что еще сказать… Удачи!!!
Это все. Пока!
От классики до авангарда — наука во всех жанрах