Атака на хостинг _MiF_ (mif@mail.ru) Хакер, номер #072, стр. 072-078-3 Небольшая предыстория За некоторое время до описываемых событий один товарищ активно рекламировал на EfNet’е свой мегакрутой PHP-скрипт для удобного визуального «администрирования сервера». Скрипт, по сути, являлся продвинутым php-шеллом для хакера и трояном для админа. Потестив его скрипт тогда, я испытал небольшое отвращение от надписей вроде «Получить доступ к приватным эксплоитам» и, бегло проглядев, стер его с сервера. Так случилось, что во время вечерней прогулки по серверам ipowerweb.com я как раз просматривал скрипт вторично и сделал вывод, что он не так уж и плох. Возможностей потенциальному взломщику он предоставлял много. Я зашел на Ефнет, попросил у чела лицензию (да-да, скрипт стоит $50) и, получив ее, залил nfm.php на свой новый аккаунт. С полпинка заведя ослика IE, составил цепочку из надежных проксиков, настроил скрипт под себя и полез глядеть на сервант изнутри. Первым делом я заглянул в /etc. 99% админов почему-то оставляют /etc +x для nobody, допуская огромную ошибку, которая часто приводит к нехорошим последствиям :). В /etc лежали passwd, passwd-, passwd.OLD, passwd.precpanel и passwd,v. Я решил начать с passwd и вот что я там увидел: Содержимое /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync И так далее на 156 кб :). В других passwd* ничего интересного, кроме обычных записей юзеров, естественно, не обнаружилось. Я начал внимательно изучать структуру сервера, проверять все папки на предмет наличия чего-то интересненького. Чем больше я узнавал о сервере, тем настойчивей напрашивался ответ на мучивший ранее вопрос: Ipowerweb не хотели давать шелл, потому что никакого chroot НЕ БЫЛО. Это был уже большой плюс для меня :). Итак, у меня, по сути, был шелл с правами nobody, и больше ничего не было. Надо было что-то делать дальше, поскольку на такой ерунде далеко не уедешь. В раздумьях я отправился наворачивать второй круг по файловой системе и внезапно для самого себя обнаружил заброшенную кем-то (вероятно, рутом :)) инсталляцию какого-то парсера для анализа логов веб/фтп/мейл-серверов. Внимательно просмотрев содержимое найденной директории, я обнаружил удивительную вещь – суидный перловый скрипт, принадлежащий руту и чмоднутый на 777. В тот момент для меня было абсолютной загадкой, как так получилось, но факт оставался фактом: я, несмотря на мизерные права nobody, мог легко исправить этот перловый скрипт и получить доступ к суидной оболочке. Правда, была одна проблема: суидные перловые скрипты выполняются suidperl, который проверяет сценарии на потенциальную опасность. Я решил для проверки выполнить несложный скрипт: #!/usr/bin/perl $| = 1; open (R, "<README.txt"); open (W, "> test.txt"); while (<R> ) { print W; } close(R); close(W); exit; О, чудо! В директории появился файл test.txt с содержимым README.txt. Отлично, факир был трезв, и фокус удался :). Теперь осталось лишь немного дописать скрипт. Добавляем функцию opendir(), создаем примитивный цикл, и вот мы уже можем шариться по файловой системе с рутовыми правами. А значит, сервер взят, бастионы защиты рухнули, админ идет нервно курить в коридор, помахивая по пути белым флагом. |