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

По горячим следам

Леонид «R0id» Стройков

Хакер, номер #109, стр. 054

(stroikov@gameland.ru)

Берем след хакера с целью собственной наживы

В последнее время нередки случаи повторных взломов одних и тех же ресурсов. Это неудивительно: большинство уязвимостей общеизвестно, а их эксплуатация напрямую зависит от прямых рук атакующего. В сложившейся ситуации отлично чувствуют себя те, кто сумел приспособиться к такому порядку вещей, умело находя следы чужой работы. Ведь как приятно получить с десяток веб-шеллов в течение часа, приложив минимум усилий! С другой стороны, всегда интересно наблюдать за работой таких же, как и ты, тихо и незаметно перенимая опыт коллег по цеху. Поверь, зачастую не нужно изобретать велосипед, достаточно лишь грамотно использовать плоды чужого труда. Как это сделать? Сейчас ты все поймешь сам.

Берем след

Итак, представь, что тебе необходимо заполучить достаточно большое количество веб-шеллов. Причем желательно разносерверное расположение каждого из них (то есть один веб-шелл на одном сервере). В таком случае рутать бажного хостера и заливать в пользовательские веб-каталоги хакерские скрипты не имеет смысла. А искать уязвимые сервисы, руководствуясь багтраком, долго и муторно. К тому же ни один из подобных вариантов не способствует быстрому выполнению поставленной задачи. Поэтому мы будем действовать другими методами :).

Для начала обратимся к любимому Гуглу. Если ты наивно полагаешь, что поисковик хакеру не товарищ, то глубоко заблуждаешься. Google не раз выручал меня в трудных ситуациях (читай подшивку «Хакера»), и этот случай не исключение. Как ты помнишь, поисковик позволяет составлять довольно хитрые запросы, используя специальные конструкции (например, filetype, insite, index.of, etc). Мануалов по теме хватает, поэтому я ограничусь лишь краткими комментариями :). Изначально было решено отталкиваться от запроса в Гугле типа:

inurl:r57shell+filetype:php

Для тех, кто не в теме, поясню: ключ inurl позволяет проводить поиск по адресной строке, а параметр filetype определяет указанное нами расширение. Таким образом, после нажатия на <Enter> Google в два счета вывел пару десятков линков, удовлетворяющих моему требованию (скрипт r57shell.php в составе ссылки). Благодаря этому мной был сразу же получен первый r57-шелл:

http://www.kaup-stabau.com/r57shell.php

На сервере крутилась Линуха, MySQL, Apache и PHP версии 4.4.2 с опцией safe_made=ON. Тем не менее это не помешало мне слить базу, заботливо упакованную в zip-архив и размещенную в корне веб-каталога :). С заметно улучшившимся настроением я принялся экспериментировать дальше, а подредактированный запрос к поисковику принял такой вид:

intitle:r57shell+filetype:php

То есть я попросту позволил Гуглу выдавать мне в качестве результата страницы, содержащие в заголовке строку «r57shell» и имеющие расширение php. Объем предоставленных поисковиком линков меня просто потряс. Конечно, около 50% ресурсов не имели никакого отношения к искомому объекту, зато остальные 50%... :) В общем, в течение часа я собрал порядка 20 вполне работоспособных веб-шеллов, к примеру:

http://angelfud.com/e/r57.php

http://milfmuncher.net/dump.php

Но и на этом останавливаться я не собирался :). Посуди сам, ведь r57 не единственный в мире веб-шелл, ведь полно и других, не менее распространенных скриптов, не так ли? Примером тому служит популярный c99shell, который прекрасно находится в Гугле с помощью аналогичных запросов:

c99shell+filetype:php

c99+filetype:php

inurl:c99shell+filetype:php

Старания мои не были напрасны, и список нажитого добра пополнился десятком записей:

http://www.craptv.com/store/test.php

http://www.pcpoliti.com/hilp.php

http://www.minimail.fr/admin/files/c99.php

Надо сказать, что после двух часов активного парсинга веб-шеллами я был обеспечен на месяц вперед :). Прочувствовав суть затеи и радость от сбора урожая, я не поленился пробежаться по другим скриптам, в том числе и по MySQL-клиентам, ASP-шеллам и прочим прелестям из стандартного хакерского набора. Несмотря на то что запросы к поисковику приходилось постоянно редактировать, результат не переставал меня радовать :).

Наигравшись с массовым парсингом, я начал подумывать о точечном поиске ранее залитых веб-шеллов на конкретно взятом ресурсе. Отличия запроса в этом случае были невелики, и в общем виде он выглядел так:

название_шелла+inurl:адрес_ресурса+filetype:расширение_скрипта

Взяв для примера один из турецких госресурсов в доменной зоне .gov.tr, я без особого труда опробовал теорию на практике :). «Счастливцем» оказался сайт, располагавшийся по адресу www.iett.gov.tr. Я перепробовал несколько запросов к Гуглу, и мне таки повезло:

c99shell+insite:www.iett.gov.tr+filetype:php

На сервере лежал c99-шелл, залитый ранее одним из моих знакомых:

http://www.iett.gov.tr/kitap/kitap.php

То, что было с госресурсом дальше, - это тема для отдельной статьи, которую я, быть может, когда-нибудь напишу :). Но, как ты понимаешь, шеллы - далеко не самоцель, да и работать через веб-интерфейс не всегда удобно. Думаю, ты уже догадался, о чем я :). Если в Сети полно хорошо (и не очень :)) спрятанных веб-шеллов, то бэкдоров, висящих на стандартных портах, еще больше. А о функции bind из тех же r57, c99 и им подобных и говорить не стоит. Как правило, многие из атакующих предпочитают не париться и открывают дефолтный порт под номером 11457 (без логина/пароля :)). Признаться, порой мне тоже лень изменять значения порта в сорце бинд-шелла (его исходник ищи на нашем DVD).

Как видишь, простенький бинд-шелл с дефолтными параметрами имеет все шансы спасти мир :). Кроме того, ничто не мешает сканировать диапазон IP-адресов на наличие открытого искомого порта. А учитывая то, что создать собственную базу по стандартным портам распространенных бэкдоров не столь сложно, появляется возможность разжиться халявным доступом куда угодно.

Собираем улики

Но кроме банального парсинга Гугла и скана широкого диапазона IP'шников есть и более интересные вещи. Тебе никогда не хотелось понаблюдать за чьей-либо активностью на хакнутом сервере? А поиметь парочку приватных сплоитов совершенно бесплатно? :) Спешу тебя заверить, что и первое, и второе вполне возможно. Для этого не нужно быть экстрасенсом и обладать телепатическими способностями, вовсе нет. Достаточно проявить капельку внимания к взломанным объектам, приправив ее соответствующими знаниями :). Ведь если что-то смог сделать ты, то неисключено, что то же самое сможет сделать кто-нибудь другой (и наоборот). Мне не раз доводилось находить на ломанном сервере чужие скрипты/бэкдоры/сплоиты/etc. Где именно искать все это добро? Вопрос, скорее, риторический, но несколько советов я дам:

1. Первым делом всегда осматривай каталог /tmp на никсовых серваках. В процессе взлома им редко кто пренебрегает, поэтому найти там следы жизни представляется очень вероятным.

2. Проводи глубокий анализ .bash_history всех пользователей, на доступ к каталогам которых хватает прав. Этот дружелюбный для хакера файл хранит в себе лог консольных команд, выполненных юзером, там запросто можно подцепить пасс к чужому акку (от SSH или БД). Например, на одном из серверов в .bash_history я нашел довольно любопытную запись:

chmod 777 ./sf/bouncer

./sf/bouncer

./sf/bouncer --socks5 --port 24465 --s_user sproot --s_password n0d00t --daemon

Вот так я заполучил аккаунт к соксу, запущенному в качестве демона кем-то до меня:

логин: sproot

пароль: n0d00t

порт: 24465

3. Просматривай (хотя бы бегло) passwd-файл, так как некоторые любят добавлять в систему своего пользователя с рутовыми правами (и пустым паролем). То же самое, кстати, относится и к СУБД, в частности к MySQL. Нередки случаи, когда, поимев рута в БД, атакующий добавляет своего юзера в таблицу mysql.user. Мне несколько раз попадались подобные базы и, думаю, еще будут попадаться.

4. Используй консольный поиск с дополнительными параметрами. Поверь, при умелом обращении с утилой find ты быстро найдешь то, что иначе искал бы часами. В качестве примера приведу запрос на поиск всех .bash_history-файлов на сервере:

find / -type f -name .bash_history

Или попробуем определить все диры с чмодом 777:

find / -type d -perm 0777

По найденным каталогам советую хорошенько пошарить, так как вполне возможно, что в них лежат не только пользовательские доки :).

5. Не забывай о логах, будь то логи Апача, Сендмейла или какого-либо FTP-сервера. В логах всегда можно обнаружить много интересного (начиная с признаков вторжения и заканчивая чужими IP-адресами).

Уловок на самом деле великое множество, так что тренируй свою фантазию и не забывай об уголовной ответственности, которая может наступить вследствие неправомерного доступа к чему-либо :). С другой стороны, если ты в свободное от хака время подрабатываешь админом, то не пренебреги возможностью прочесать свой сервер вдоль и поперек. В моей памяти еще свежа история с руткитом, который провисел на сервере одной из крупнейших забугорных телекоммуникационных компаний более года :).

Заметаем следы

Наверняка, по ходу прочтения статьи ты озадачился как минимум одним вопросом: «Как скрыть собственную активность при взломе?» Сразу скажу, что универсального рецепта здесь нет. Если говорить о заливаемом в веб-каталоги «контенте» (веб-шеллы, мускул-клиенты), то по крайне мерее необходимо юзать примитивную PHP-авторизацию и удалять из скриптов заголовки, хранящиеся между тэгами <title> и </title>. А если речь идет о бинд-шеллах, то как минимум не забывай менять дефолтный порт :). Да и вообще, похакал - убери за собой, зачем оставлять следы, которые могут выдать тебя? Безопасности много не бывает, береги себя.

Danger

Внимание! Информация представлена исключительно с целью ознакомления! Ни автор, ни редакция за твои действия ответственности не несут!

Info

Анализируй хранящийся на сервере контент, особое внимание уделяй каталогам с чмодом 777 и файлам .bash_history.

Похакал - убери за собой :). Не оставляй на взломанном сервере лишних следов.

Содержание
ttfb: 4.8408508300781 ms