Сотовый фрикинг Sms-центр под контролем

Discussion in 'Электроника и Фрикинг' started by silveran, 24 Jun 2005.

  1. silveran

    silveran Фрикер

    Joined:
    2 May 2005
    Messages:
    771
    Likes Received:
    7
    Reputations:
    2
    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», которая предлагала войти в систему.
     
  2. silveran

    silveran Фрикер

    Joined:
    2 May 2005
    Messages:
    771
    Likes Received:
    7
    Reputations:
    2
    Думаю, не стоит описывать, как я вошел на этот ресурс – использовался тот же пароль админа, который загадочным образом подошел к мантису. Надо сказать, что по функциональным возможностям мантис просто отдыхает. В блоге было намного больше функций, среди которых я обнаружил полезный скрипт 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 остались неизменными. Но даже эти незакрытые бреши уже не позволяют сливать новые дампы пользовательских таблиц и пользоваться анлимитными аккаунтами. Впрочем, быть может, кто-нибудь из читателей отыщет новые уязвимости, которые не удалось найти мне ;).
     
  3. silveran

    silveran Фрикер

    Joined:
    2 May 2005
    Messages:
    771
    Likes Received:
    7
    Reputations:
    2
    Автоматизированная рассылка

    Оказывается, слать 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.
     
  4. m0nzt3r

    m0nzt3r моня

    Joined:
    22 Jun 2004
    Messages:
    2,096
    Likes Received:
    673
    Reputations:
    591
    ну да я это читал...да и вобще щас чето кликател отказывается работать!не регит новые юзера!вот клево было б если анлимит аккаунт...