19.09.2011

MySQL инъекция. Простое руководство по Load File и Into OutFile

image

Простое руководство по Load File и Into OutFile. Если вы знакомы с основами MySQL инъекции, вы можете приступить к чтению этого руководства.

Автор: MikiSoft

Часть 1 – Введение

Если вы знакомы с основами MySQL инъекции, вы можете приступить к чтению этого руководства…

Хорошо, давайте посмотрим, что такое Load File и Into OutFile.

-- Что такое Load File и Into OutFile?

Это команды (используются в MySQL инъекциях).

Load File: Читает содержимое файла и возвращает его в виде строки.

Into OutFile: Записывает выбранные строки в файл. Файл создается на сервере. Таким образом, у вас должны быть права доступа для использования этих команд. Создаваемый файл не должен существовать. Таким образом, помимо прочего, предотвращается уничтожение таблиц и файлов (таких как "/etc/passwd”). (… Источник: MySQL.com)

Итак, начнем!

Часть 2 – Доступ к таблице “mysql.user” и к правам файлов

Если вы используете метод MySQL инъекции (для взлома сайтов), перед тем как вы найдете нужную таблицу (и столбцы), проверьте наличие доступа к таблице "mysql.user".

Вы должны заменить один видимый столбец (т.е. номер, показанный на странице) в 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,…”

Перейдем к следующей части.

Часть 3 – Используем команду Load File

Команда Load File полезна, когда вы хотите прочитать некоторые (конфигурационные) файлы, например "/etc/passwd", "/etc/shadow", и т.д.

Синтаксис: 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 мы разобрались.

Часть 4 – Используем команду Into OutFile

Команда Into OutFile полезна когда вы хотите создать некоторый файл (на вашем уязвимом сайте/сервере). Например, вы хотите создать (простой PHP) файл, который будет подвержен уязвимости подключения файла с удаленного сервера (Remote File Inclusion), и использовать эту уязвимость.

Синтаксис: 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.

Часть 5 – Заключение

На этом мы закончили с командами, используемыми для MySQL инъекций (разумеется с доступом к таблице "mysql.user")...

Не знаю, что еще сказать… Удачи!!!

Это все. Пока!

comments powered by Disqus