Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #76, АПРЕЛЬ 2005 г.

SMS-центр под контролем

Master-lame-master

Хакер, номер #076, стр. 076-044-4


Зона администрирования представляла собой несколько скриптов, которые позволяли мониторить статус 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 остались неизменными. Но даже эти незакрытые бреши уже не позволяют сливать новые дампы пользовательских таблиц и пользоваться анлимитными аккаунтами. Впрочем, быть может, кто-нибудь из читателей отыщет новые уязвимости, которые не удалось найти мне ;).

Назад на стр. 076-044-3  Содержание  Вперед на стр. 076-044-5