Посмеялись и хватит: беспрецедентная атака на цитатник рунетаАвтор: Абырвалг Хакер, номер #115, стр. 115-056-1 На улице шел проливной дождь. Было грустно, и я решил почитать баш. За чтением мне пришла в голову безумная идея попасть в админку цитатника рунета и пощупать его изнутри. Самое главное – где-то спустя полдня археологических изысканий мне это удалось! От идеи к действиямРасскажу подробнее о наивнейших ошибках людей, отвечающих за софт на серверах русского башорга. Итак, погнали! Первым делом я немного пощупал скрипты самого башорга. Единственным интересным открытием был фришный php-скрипт Openads 2.0.11-pr1 (phpadsnew.com), расположенный по адресу http://lol.bash.org.ru/b/admin/index.php. Скрипт отвечает за текстовую рекламу, расположенную между цитатами на всех страницах баша. Посерфив пару-тройки секурити-порталов, я не нашел ни одного паблик сплойта под эту версию. Немного покопав движок на предмет багов, я решил оставить его на потом, и продолжил свои поиски. Следующим шагом был сервис www.seologs.com/ip-domains.html, который показал мне все виртуальные домены, расположенные на IP-адресе баша (89.111.182.137). Это были: http://animau.ru Как видишь, улов не особо густой. Единственным доступным из этих адресов, не считая самого баша, был сайт tanibata.ru, посвященный фестивалю японской анимации (чертовы анимешники :)). За него я и взялся. Ня!Вскользь просмотрев исходник главной страницы подопытного сайта, я увидел там строку:
и очень обрадовался, что там установлен «самый безопасный движок по версии журнала PC Magazine» e107 :). Следующим шагом было определение версии движка. Насколько я знал, сделать это можно, по меньшей мере, двумя способами. Первый – пройти по адресу http://tanibata.ru/e107_docs/README_UPGRADE.html. Второй – пройти по адресу http://tanibata.ru/e107_admin/admin.php. Ни один из способов не прокатил. Тогда я взял за основу дату первой публикации новости на сайте (Sunday 27 May 2007) и чисто теоретически предположил, что версия движка лежит в пределах от 0.7.6 до 0.7.8 (причем, последняя на момент написания статьи – 0.7.11). Теперь необходимо было немного «посерчить» на http://milw0rm.com на предмет паблик эксплойтов под e107, чем я немедленно и занялся. Под искомые версии движка существовали следующие сплойты: e107 <= 0.7.8 (photograph) Arbitrary File Upload Vulnerability Второй я отбросил сразу, так как он требовал права админа. Прочитав же описание к первому, я вынужден был отбросить и его, так как это была ложная уязвимость, которая предоставляла лишь загруженный php-код в теле фотографии (и ничего более). Отложив на время e107, я принялся серфить дальше мой подопытный ресурс. Единственной зацепой был форум IP.Board, расположенный по адресу http://tanibata.ru/forum/. Открыв исходник страницы, я крайне расстроился, ибо версия IPB 2.2.0 была на тот момент абсолютно непробиваемой. Ничего не оставалось, как самому копать исходники либо IPB, либо e107. Я выбрал e107. И не ошибся! Индиана Джонс и e107Слив на свой ноутбук cms e107 0.7.8 и благополучно установив, я стал ковырять скрипты. Через несколько часов я получил результат в виде скрипта contact.php и следующей строчки кода в нем:
Как видно, переменная $_POST['contact_person'] подставляется в SQL-запрос абсолютно нефильтрованной! Трудность заключалась в дальнейших строках кода:
Сложностей было даже две. Первая: e107 никогда, ни при каких обстоятельствах не выведет сообщения об ошибке в SQL-запросе. Вторая: при верно составленной SQL-квере мыло, которое ты отсылаешь в форме контакта с администрацией, уйдет на e-mail, который ты укажешь сам; иначе – на мыло админа. Эксплойт для blind sql-injection был, в принципе, возможен, но, как обычно, писать его было лениво. Немного подумав, я вспомнил об одной особенности заголовка «To:» при отправке мыла. Итак, в этом поле можно указать мыло получателя в формате «Имя фамилия billy@microsoft.com», и e-mail успешно уйдет адресату! На основе этой информации я придумал простенький эксплойт под эту багу:
Но так как на сервере был включен magic_quotes_gpc, то этот вариант сплойта не прокатил. Нужно было модифицировать все символы, находящиеся в кавычках, в char. Для этого я написал простенький скрипт:
В результате получилось что-то вроде этого в поле «contact_person»:
После успешного сабмита я увидел мессагу от e107: «Your message was succesfully sent!», а также новое мыло в своем ящике, где в поле «To:» были хеш и логин админа tanibata.ru:
Для успешного входа в админку портала мне жизненно необходимо было расшифровать полученный хеш, так как копаться в исходных кодах e107, отвечающих за авторизацию пользователей, опять не позволяла та же лень. Я полез на всеми любимый сервис по расшифровке md5-хешей plain-text.info, который, к глубочайшему сожалению, не смог мне ничем помочь. Не отчаиваясь, я просмотрел список всех юзеров танибаты с помощью http://tanibata.ru/e107_plugins/forum/forum_stats.php. Приветливый скрипт подсказал мне, что на портале есть и второй админ с ником Selena и ID=2, к которому я и применил свой мегасплойт. Новый хеш e10adc3949ba59abbe56e057f20f883e plain-text.info расшифровал уже с большей охотой, в результате чего я и оказался в админке http://tanibata.ru/e107_admin/admin.php с данными Selena:123456 :). Кавай!Далее было бы логично залить шелл. Чем я тут же и занялся! Потыкав немного по различным пунктам админки и убедившись, что любой аплоад файла с расширениями .php, .phtml режется на корню, я случайно наткнулся на интересную форму того же аплода в управлении плагинами. Эта форма поддерживает загрузку новых плагинов, запакованных в zip или tar.gz. Следуя этой логике, я запаковал свой шелл в zip и успешно загрузил его, в результате чего получил доступ к серваку по адресу http://tanibata.ru/e107_plugins/404.php?stulcheg :). Немного пошастав по серваку, я нашел сам башорг в /export/hosts/bash.org.ru/documents, где в дальнейшем и остался для изучения всей подноготной баша. Глубже!Первым каталогом, заинтересовавшим мое внимание, был admstat. Перейдя по адресу http://bash.org.ru/admstat, я увидел незащищенную паролем статистику зааппрувленных и перелопаченных модераторами баша цитат! Как стало видно из статистики, наиболее активным модером является ujin :). Следующим каталогом для изучения стал app42. По этому адресу находится админга русского башорга. Но чтобы попасть в нее, нужно было изучить механизм авторизации в app42/index.php. Меня заинтриговал следующий код: i Отсюда следовало:
Необходимо было найти доступы к базе данных. Над ней предстояло немного поизвращаться, дабы не расшифровывать mysql5-хеши модеров. Я залил менеджер БД RST Mysql в ту же папку, где у меня лежал шелл, и успешно проник в базу башорга с помощью урл http://tanibata.ru/e107_plugins/sql.php. Данные для доступа к БД лежали в корне башорга в файле _config.inc.php:
Зайдя в bashorg_refactored в таблицу moderators, я увидел все данные модеров баша в формате id, логин, имя, пароль и последний заход в админку. Далее я успешно провел запрос к БД, позволивший мне зайти в админку под своим паролем:
После логина в админку с данными administrator:lopa я изменил обратно пароль ДаркРайдера:
А также подставил значение *08CDE192357B3CAB08B29E1636F78F0116452E79 в кукис kopanda с помощью своей любимой Оперы (Инструменты -> Дополнительно -> Cookies). На этом, собственно, моя цель и была достигнута. Во имя добраЯ не стал наносить никакого вреда своему любимому ресурсу, а лишь немного походил по админке и посмотрел на bash.org.ru изнутри. Все-таки работа модераторов такого сайта огромна. И тебе хочу дать совет на будущее: никогда не разрушай то, что приносит радость и веселье людям. А через несколько дней все баги были закрыты без моего вмешательства, за что честь, хвала и ящик пива админам! DANGERВся описанная информация предоставляется исключительно к ознакомлению и размышлению. Никакая часть данного материала не может быть использована во вред, в обратном случае, ни автор, ни редакция не несут какой-либо ответственности за возможный ущерб, причиненный материалами статьи. |