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

Clickatell возвращается

Master-lame-master

Хакер, номер #081, стр. 081-050-2


if (isset($sms_smsc) && $sms_smsc != "") $cmd .= " -a$sms_smsc";

if (isset($gprs_access) && $gprs_access != "") $cmd .= " -G$gprs_access";

$ota_ret = exec($cmd);

?>

Даже непосвященный в PHP человек скажет, что код содержит большой изъян. Действительно, внешняя переменная $cmd вполне может содержать специальные символы, с помощью которых можно легко произвести атаку. Мне оставалось лишь найти этот сценарий в public-зоне онлайн-системы Clickatell. Зная название скрипта и примерную структуру компании, я быстро решил проблему. Подставив в поток нестандартное значение переменной $ota_type, я получил то, что и ожидал - результат выполнения команды uname -a.

[устраиваем притон на сервере]

Далее все протекало по стандартному сценарию: я залил connback-шелл и зацепился на порт 4444. В консоли не было никого кроме меня, у американцев уже закончился рабочий день. Но взломать WWW-сервер было непросто - на машине стояло крепкое ядрышко из семейства 2.4, а также вертелась парочка незатейливых IDS. Чтобы порутать такой сервер, нужно было приложить немало усилий, что я и намеревался сделать.

Несмотря на всякие сложности, я горел желанием получить рута на этой операционке. Для этого, как обычно, я начал просматривать все каталоги на предмет нестандартных файлов, но большинство из них не читались с моими привилегиями. Но через полчаса удача мне улыбнулась: бороздя просторы папки /etc, я заметил, что конфиг crontab.hourly, weekly, daily и monthly вполне доступны для чтения! Это было немного странно, так как почти во всех системах, с которыми я имел дело, данные файлы не читались под правами nobody. Возможно, администратор просто перенес эти документы с другой машины, поэтому права на них выглядели нестандартно. Просмотрев все конфиги кронтаба, я получил массу дополнительной информации, которая помогла мне добиться успеха. Как оказалось, каждую неделю в воскресение, происходил бэкап всех данных на внешний носитель. После некоторой проверки оказалось, что дополнительный диск моунтится в точку /usr/local/clickatell/data, а все бэкапы содержатся в папке /backup. Зайдя в каталог data, я попытался прочитать директорию /backup, однако этого сделать не удалось - с папки был удален атрибут «выполнения». Но, зная премудрости системы Unix, мне удалось без труда вытащить нужный архив. Дело в том, что в файле crontab.weekly явным образом указывалось имя архива (home,etc,www-[date].tar.gz), поэтому обращение к архиву с запросом копирования в другой каталог увенчалось успехом.

Далее я приступил к распаковке архивов. Начал с home.tar.gz. Внутри находилось несколько домашних каталогов, но зайти в них мне не удалось - атрибуты, которые налагались на файлы, автоматически применились к распакованным данным. В голову пришла резонная идея: закинуть все бэкапы на WWW, а затем сливать их со сторонней машины. Но при попытке скопировать увесистый архив, система выругалась на превышение доступного дискового пространства. Чтобы не утруждать себя в пересоздании архива, я занялся небольшим по размеру архивом www.tar.gz, где, по-видимому, располагались web-сценарии, шаблоны и прочая ерунда. Сперва я подумал, что этот архив аналогичен тому, который я слил полгода назад, однако ошибался. Внутри располагалось порядка десяти папок с различными конфигами, скриптами и картинками. И тут мне пришла в голову хорошая мысль - проверить php-инклуды на предмет паролей и другой конфиденциальной информации. Проверка показала, что в двух конфигах располагалась приватная инфа для подключения к БД. Причем, коннект происходил, как это обычно бывает, под рутовой учетной записью. Осталось проверить совпадает ли рутовый пароль для MySQL с системным. Для этого, по традиции я использовал утилиту ttyX (принцип ее работы я уже описывал в одном из «этюдов»). Запустив демон, я приконнектился клиентом, и получил эмулятор псевдотерминала. Затем осуществил суид на суперпользователя и... был наделен всеми возможными правами :). Признаться, я не ожидал, что администратор установит один и тот же пароль на разные сервисы, хотя данное явление очень распространено среди всех админов.

Назад на стр. 081-050-1  Содержание  Вперед на стр. 081-050-3