Взлом RIN.RU

Master-lame-master

Хакер, номер #072, стр. 072-052-1

Истории взлома со счастливым концом

Однажды мне захотелось проверить на прочность какой-нибудь крупный интернет-ресурс. Колеблясь с выбором жертвы, я посоветовался со своим виртуальным корефаном. Тот незамедлительно подсказал поковырять раскрученный портал www.rin.ru. Через каких-то три часа я доложил приятелю, что сумел поднять максимальные права на главном сервере Российской информационной сети. Такого увлекательного взлома у меня еще не было!

Сначала укольчик!

Уже через две минуты после посещения стартовой страницы знаменитого RIN’а я нашел первый баг. Точнее, не баг, а некоторую недоработку программистов. Самый верхний раздел в главном меню назывался «Желтые страницы». Ткнув в него мышкой, я выбрал «Армянские сайты» (сам не знаю, почему :)). Тут же нарисовался вывод скрипта index.cgi с параметром z=AM. Недолго думая, я добавил в значение опции апостроф, обновил страницу и сразу же получил сообщение об ошибке в SQL-запросе. Помимо описания бага, я узнал путь к WWW-каталогу, что дало мне представление о системе. Это был Linux, возможно, с дефолтной установкой web-сервера. Не изменяя бажного запроса, я прибавил к значению параметра z общеизвестную строчку UNION select 1/*. Ошибка преобразилась: теперь сценарий ругался на несоответствие параметров. Все признаки указывали на возможность SQL-инъекции, я даже подумывал, что это единственный путь к сердцу сервера, но внезапно мое мнение изменилось.

Читаем пароли

Поковырявшись десять минут с запросами, я забил на sql-injection. «В конце концов, – подумал я, – если уж на сайте есть такой тупой баг, наверняка есть и что-то посерьезнее».

И я снова отправился на главную страницу портала. После исследования десятка разделов главного меню обнаружилось, что девять из них бессильны перед SQL-инжекцией. Десятый ресурс, который помог мне добиться более весомых результатов, именовался библиотекой RIN. В html-коде главной страницы я выцепил линк на бажный скрипт, позволяющий читать системные файлы. Он назывался docs.pl и принимал параметр open, который в идеале открывал какой-то текстовый файл. Но у хакеров немного другое представление об идеале, поэтому мне сразу же пришла мысль подставить в качестве значения этой переменной строку http://../../../../etc/passwd. Немного подумав, сценарий вывел все учетные записи на сервере rin.ru. Этот вывод был первым звеном длинной цепочки деструктивных действий.

Я решил, что, помимо чтения файлов, скрипт умеет смотреть директории, но, увы, ошибся - load.pl наотрез отказался читать системные каталоги. Многие хакеры, оказавшись в моей ситуации, тупо начали бы подбирать пароль к одному из локальных сервисов – ведь в руках уже был полный список системных пользователей. На самом деле тот же FTP позволял подключаться к RIN’у из любой точки Сети, но для меня брутфорс - это самый последний метод, я применяю грубую силу только тогда, когда все остальные способы не дали результатов.

Надо было что-то придумать, чтобы двигаться дальше. Интуиция подсказывала мне, что админ при установке не стал лукаво мудрствовать и оставил всю структуру системных каталогов дефолтной. Что-то внутри подталкивало меня к изучению содержимого сервера. Я не стал сопротивляться интуиции и попробовал прочесть при помощи бажного скрипта файл http://etc/httpd/../shells. Возможно, тебе покажется это странным - зачем, зайдя в директорию httpd, подниматься на уровень выше? Дело как раз в том, что я не был уверен вообще в наличии этой директории и прямо это проверить не мог. По сути, если список возможных интерпретаторов из файла /etc/shells будет выведен на экран, это означает, что каталог /etc/httpd существует. И я не ошибся, он действительно существовал! Следующий запрос показал, что на сервере есть вполне читабельный httpd.conf. При его изучении я узнал, что сценарий docs.pl умеет разбивать вывод на отдельные участки (он представил httpd.conf на пяти страницах). Временно забив на конфиг, я вернулся на http://lib.rin.ru и стал внимательно изучать скрипты. Вскоре был найден еще один глючный сценарий. Он назывался load.pl и находился в том же каталоге, что и docs.pl. Единственный плюс сценария был в том, что он умел сохранять файл на диске. Однако подлый скрипт также отказывался просматривать каталоги и имел более извращенный синтаксис - чтобы увидеть системный файл, необходимо было составить запрос вида http://../path/to/file%00.txt.

Содержание  Вперед на стр. 072-052-2
ttfb: 3.3919811248779 ms