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

Атака на хостинг

_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(), создаем примитивный цикл, и вот мы уже можем шариться по файловой системе с рутовыми правами. А значит, сервер взят, бастионы защиты рухнули, админ идет нервно курить в коридор, помахивая по пути белым флагом.

Назад на стр. 072-078-2  Содержание  Вперед на стр. 072-078-4