Master-lame-master Хакер, номер #076, стр. 076-044-1 Тайна внутренностей clickatell.com и взлом системы Солнечным майским днем я по обыкновению купил журнал «Хакер». В этом номере меня ждала интересная статья от Хинта про сервис clickatell.com. Ты наверняка наслышан про этот ресурс и, возможно, даже там зарегистрирован. Однако десяти халявных кредитов хватает лишь на пару-тройку хороших приколов. Быстро потратив этот щедрый презент, мне захотелось взломать несчастную контору и сделать себе анлимитный аккаунт. Как только у меня закончились халявные SMS, я поспешил зарегистрироваться еще раз. Но хитрые американцы предусмотрели этот шаг. Они запретили регистрацию двух аккаунтов на один мобильный номер. Я просек фишку и вбил номер моего отца. Это прокатило, но следующие десять кредитов закончились еще быстрее . Тогда я решил попробовать провести атаку на сервис clickatell.com в надежде на то, что американские админы окажутся не слишком крутыми парнями. Созрела мысль В первую очередь у меня созрела мысль, что на сервисе могут существовать аккаунты вида «login:login» с положительным балансом. Поэтому, набравшись терпения, я начал вбивать рандомные имена и пароли в web-форму сайта. К моему удивлению, за час вбива я подобрал около тридцати аккаунтов, среди которых добрая половина наделялась пятью, а то и десятью нетронутыми кредитами. Мысль о безлимитном доступе не покидала меня ни на секунду. Я понимал, что сбрутать подобный доступ невозможно, и поэтому решил послоняться по сайту в поисках бажных скриптов. Однако сколько я ни изменял параметры сценариев, видимого успеха добиться не удавалось. Тогда я подумал: «Если бага не видно на поверхности, то почему бы не поискать его в глубине?». Другими словами, я надеялся найти какую-нибудь зацепку в комплекте сценариев, доступных после успешного входа в систему. Неспешно залогинившись под подобранным аккаунтом net с паролем net, я посмотрел в левую часть страницы. Там находилась колонка ссылок на скрипты с какими-то непонятными отчетами. Как оказалось позже, это обычная статистика по пользователю, показывающая даты и количество SMS, отосланных в отчетные дни. Я покопался в исходниках страницы и нашел длинный запрос, передающийся методом POST. Быстро изменив метод на GET, я вставил обращение к БД в отдельное адресное окно браузера. Запрос успешно выполнился, и перед моими глазами предстали две уведомительные строки. После этого я дал волю своим шаловливым ручкам и намеренно изменил параметр month, добавив в конец значения апостроф. После обновления я получил весь текст длинного запроса, а затем ошибку обработки SQL-предложения. Это было клево, поскольку теперь я знал о том, что скрипт страдает SQL-инъекцией, и, кроме того, передо мной был сам запрос. Осталось лишь правильно использовать найденный баг. Забавы с SQL Поскольку я не особо знаком с технологией SQL-инжектирования, мне пришлось изрядно попотеть, чтобы добиться видимых результатов взлома. Сперва я вставил в конец запроса фразу «UNION select 1» и, как обычно, получил ругань на несоответствие параметров. Затем я подобрал число выводимых полей, а также некоторые названия параметров. Работа была очень неблагодарной, зато результат взлома был потрясающим – я получил большую часть информации о пользователях портала clickatell.com. Затем я добавил в запрос условие WHERE p.email like ‘%clickatell.com%’ и получил список всех администраторов сервиса. Включая их email’ы и сложнорасшифровываемые пароли . С одной стороны, у меня уже было многое: админский аккаунт на неограниченное количество SMS-сообщений и кривоватый дамп пользовательской базы. Но с другой - мне хотелось большего. Я очень желал попасть внутрь ресурса, посмотреть устройство сервера и скрипты отправки SMS. Поэтому у меня появилась мысль попробовать пологиниться на почтовые ящики администраторов, используя полученные пароли. Сложный путь к сердцу системы В результате ручного подбора выяснилось, что пять mail-аккаунтов работали и пароли совпадали. В почтовом ящике одного из них находилось около сотни писем. Сперва я принял корреспонденцию за спам, однако впоследствии понял, что поторопился. Что-то вынудило меня скачать все сообщения себе на комп, не удаляя их с сервера. И не ошибся! Вместо спама меня ожидала почтовая переписка с сотрудниками компании. И надо сказать, письма были очень интересными - обсуждались коммерческие вопросы компании, будущие нововведения и т.п. Уже после третьего мыла я просек, что на сервисе должна быть какая-нибудь оболочка, где регулярно отмечаются работники. Что-то типа новостной ленты. И действительно, в одном из почтовых сообщений я нашел интересную ссылку на ресурс http://mantis.clickatell.com. По прочтении всех писем мне ничего не оставалось делать, как завернуть ослика на этот адрес. Как я и догадывался, за ссылкой хранилась специальная bugtraq-среда, куда разработчики постили ошибки в работе сервиса. Естественно, что так просто меня в систему не пустили – авторизационный сценарий требовал пароль. Но ведь у меня были все пароли администраторов! Грех не попробовать заветные пары «логин:пароль» в форме этого скрипта. К счастью, аккаунт одного из админов успешно подошел. Но радоваться было пока рано – мантис не представлял собой что-то ценное. Обычные формы со статусом выполненных или незаконченных заданий, которые намекали на то, что среда используется не только для обсуждения ошибок, но и перспектив, планов и т.п. Я уже было хотел покинуть этот ресурс, но в последнюю минуту заметил еще один линк на страницу http://blog.clickatell.com. Проверка IP-адреса этого хоста показала, что он не совпадал с айпишником www.clickatell.com. Этот факт дал повод предположить существование второго сервера. И действительно, ресурс blog.clickatell.com существовал. Он представлял собой еще один набор скриптов, но уже заточенный под технические задания. Там были сообщения о ребутах серверов, шлюзов, а также о внедрении каких-то непонятных технологий. Я даже удивился, что все эти ньюсы может посмотреть любой человек – среда не защищалась паролем. Но, дойдя до конца страницы, я увидел мелкую ссылку «Login», которая предлагала войти в систему.
Думаю, не стоит описывать, как я вошел на этот ресурс – использовался тот же пароль админа, который загадочным образом подошел к мантису. Надо сказать, что по функциональным возможностям мантис просто отдыхает. В блоге было намного больше функций, среди которых я обнаружил полезный скрипт upload-файлов. Сразу же захотелось залить PHP-шелл и выполнить несколько команд. Но я жестоко обломался, так как upload.php заявил, что не хочет принимать файлы с расширением PHP . Конечно, можно было бы замаскировать web-шелл под картинку или doc-файл, но переименовать залитый документ было бы весьма затруднительно. Mantis спасает положение Кроме upload-скрипта, в блоге не было ничего полезного. Новости также не радовали – сплошная рутинная полоса о выполненных заданиях. Я понимал, что расклад не в мою пользу, поэтому решил вернуться на страницы mantis’а и перечитать все его архивы. Признаться, я надеялся найти там какие-нибудь пароли либо новые ссылки . Результат поиска меня, мягко говоря, ошарашил. В одном из постов промелькнула загадочная ссылка на http://blog.clickatell.com/pa. Я зашел туда и увидел... незапароленный PhpMyAdmin! В первую минуту я просто находился в состоянии эйфории – мне казалось, что все базы пользователей хранятся именно на этом серваке. Однако это оказалось не совсем так. В базах находились настройки, сообщения и прочие вещи, относящиеся к blog’у и какому-то web-календарю. Но, несмотря на это, PhpMyAdmin выступил главным звеном цепочки хакерских действий. Просматривая таблицы базы wordpress (она как раз и относилась к blog’у), я нашел очень интересную фичу. Оказывается, все настройки upload-скрипта находятся в таблице wp_options. Нужный параметр, который грех было не поменять, назывался fileupload_allowedtypes. С помощью нехитрого SQL-запроса UPDATE wp_options set option_value=’jpg gif png doc pdf php’ WHERE option_name=’fileupload_allowedtypes’ я слегка модифицировал настройку движка . Теперь скрипт уже не ругался на левое расширение файла и без слов сохранил веб-шелл в каталог /data/apache/wordpress/wp-content (путь, куда сохраняются залитые файлы, я узнал из той же таблицы wp_options). Как ты уже понял, сервер, где располагался blog, меня мало интересовал. Эта машина не являлась главной в сервисе clickatell. Но поискать интересную информацию в каталогах сервера мне очень хотелось. Команда uname –a показала, что компьютер находится под управлением Linux. Уже через пять минут я обнаружил загадочную директорию admin, в которой располагались какие-то сценарии. Исходя из того, что более ценной инфы мне найти не удалось, я сжал всю админку в архив, скопировал в каталог /data/apache/wordpress/wp-content и слил все это дело на свой компьютер. Теперь мне предстояло изучить содержимое загадочного архива. Проникновение в админку При детальном рассмотрении скриптов оказалось, что зона администрирования находится по адресу www.clickatell.com/central/admin. Действительно, при попытке обращения к этой ссылке с меня потребовали логин и пароль. Мне повезло, так как htpasswd также находился в архиве, который я скачал с сервера blog. Быстро скормив этот файл Джонику, я получил один подобранный аккаунт администратора. Надо сказать, что пароль был уникальным и не совпадал с пассвордом в MySQL. Зона администрирования представляла собой несколько скриптов, которые позволяли мониторить статус SMS-шлюзов, смотреть активность, а также выполнять SQL-запросы. Перерыв все сценарии, я не нашел возможности заливать или редактировать файлы, а уж тем более выполнять команду. В принципе, встроенный SQL-клиент позволил бы мне вывести все таблицы на экран, но я боялся, что мой браузер подвиснет из-за переизбытка информации . В связи с этим было решено еще раз просмотреть внутренности всех скриптов в локальном каталоге admin. Я пошел в верном направлении, так как быстро нашел уязвимость в сценарии router_tester.php. Там располагался следующий код: system("/usr/local/clickatell/bin/router_tester -U $user_no $m $feats $p -t $msisdn $c -v 1 -i $iter -L $outlevel /usr/local/clickatell/bin/routerd.conf &> /var/tmp/$fname 2>&1"); Обратившись к этому скрипту через админку, я понял, что PHP-программиста в этой конторе следует немедленно уволить . Переменная $user_no запрашивалась прямо из формы. Таким образом, ничто не мешало мне ввести в форму слово «;id;». И действительно, эта конструкция позволила мне обрести некий web-шелл, но уже на главном сервере. Через полчаса я находился в консоли и бродил по каталогам главного сервера. Мои права были абсолютными, так как администраторы даже не удосужились обновить ядро в системе . Все базы проекта я также бережно забэкапил и сохранил у себя на компьютере. Я много раз рассказывал о том, как осуществлять бэкап из MySQL, поэтому даже не заостряю на этом внимания. Единственная сложность – мне приходилось очень долго искать нужный аккаунт, так как многие таблицы связывались внешним ключом по идентификатору пользователя. Таким образом, чтобы найти анлимитный аккаунт, мне надо было открыть таблицу с балансом, найти там пользователя с минусовыми кредитами, а затем запомнить его номер. Потом уже в другой таблице отыскать идентификатор и определить client-id и пароль юзера (по-видимому, там установлена старая версия MySQL, которая не поддерживает вложенных запросов. – Прим. ред.). Ну а после этого - залогиниться под анлимитчиком и отослать сотню-другую SMS-сообщений . Тяжкие последствия К сожалению, администраторы заметили мое пребывание на их серверах. Все мои айпишники прокси-серверов попали в бан-лист, админские пароли немедленно поменялись. К тому же, теперь сисадмы заставляют бедных пользователей менять их пароли на более сложные. Кроме этого, пассворды заносятся в базу уже в виде MD5-хэша, расшифровать который довольно проблематично. Но, как известно, админ никогда не закрывает все баги . На данный момент ресурс до сих пор страдает SQL-инжекцией, а пароли на blog и mantis остались неизменными. Но даже эти незакрытые бреши уже не позволяют сливать новые дампы пользовательских таблиц и пользоваться анлимитными аккаунтами. Впрочем, быть может, кто-нибудь из читателей отыщет новые уязвимости, которые не удалось найти мне .
Автоматизированная рассылка Оказывается, слать SMS можно не только из web-среды и глючного MessengerPRO. Система имеет свой API, который реализуется на базе протокола HTTP. Чтобы облегчить работу по рассылке сообщений, я в свое время сделал HTML-форму, которая обращалась к скрипту clickatell’а и отсылала нужный текст. Для заинтересованных лиц привожу ее нехитрый код. <form method="POST" action="http://api.clickatell.com/http/sendmsg"> <input type=hidden name=api_id value=ID> <input type=hidden name=user value=USERNAME> <input type=hidden name=password value=PASSWORD> <input type=hidden name=deliv_ack value=1> <input type=text name=from value="NAME"> <textarea rows="10" name="text" cols="70"></textarea> <input type=submit value=Send class=form> <input type=reset value=Clear class=form> </form> Следует заметить, что значения ID, USERNAME и PASSWORD берутся из пользовательской базы. Либо легальным путем со страницы персональных настроек . Что помогло мне при взломе? 1. Я убил больше часа на подбор названий таблиц и заголовков, чтобы вызвать SQL-injection на главном сервере clickatell.com. Только благодаря этому мне удалось отобразить пароли администратора. 2. Вернувшись на Mantis, я обнаружил ссылку на незапароленный PhpMyAdmin. Поэтому бдительный анализ архивов переписки разработчиков идет хакерам только на пользу. 3. Архив скриптов, найденный на совершенно левом сервере, решил проблему доступа к административной зоне clickatell.com, а также помог мне найти брешь в PHP-коде Боковые выносы INFO Оказывается, у clickatell.com есть несколько проектов. И все они в определенной степени относятся к протоколам сотовой связи . Warning Не стоит забывать, что все проделки негодяйского хакера противозаконны, поэтому эта статья дана лишь для ознакомления и организации правильной защиты с твоей стороны. За применение материала в незаконных целях автор и редакция ответственности не несут. CD Из-за того что админы быстро заткнули половину брешей, сделать полноценный видеоролик уже невозможно. Поэтому на диске ты найдешь только форму для отсылки SMS-сообщений, а также свежую версию программы MessengerPro.
ну да я это читал...да и вобще щас чето кликател отказывается работать!не регит новые юзера!вот клево было б если анлимит аккаунт...