Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Уязвимости (https://forum.antichat.xyz/forumdisplay.php?f=74)
-   -   crossdomain.xml (https://forum.antichat.xyz/showthread.php?t=107760)

SleepShadowWeb 24.02.2009 14:29

crossdomain.xml
 
Ниже написанный текст отношу больше к исследованию и доработке, нежели к уязвимости...
Собственно пару лет назад пришлось заниматься вот этим... Было нужно запустить сайт, который работал бы с bwin.com
Писать своё за небольшим знанием ActionScript было глупо и поэтому целью стало запустить "родной" сайт локально.

С первой проблемой, с которой пришлось столкнуться это вот этой:
http://wiki.flash-ripper.com/?title=Безопасность_во_Flash_Player
а именно файл:
crossdomain.xml


находится он в корне по адресу:
https://www.bwin.com/crossdomain.xml

содержимое этого файла:
Код:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy
  SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="adadmin.bwin.com" secure="false"/>
  <allow-access-from domain="*.itsfogo.com" secure="false"/>
  <allow-access-from domain="*.itsfogo.com" secure="true"/>
  <allow-access-from domain="videostream.bwin.com" secure="false"/>
</cross-domain-policy>

видно, что доступ к данным из flash могут получать только те флешки, которые расположены на bwin.com и itsfogo.com
пришлось заняться исправлением этого досадного недорозумения...

для начала небольшой кусочек кода из флешки для примера (подобных участков получения данных от разных скриптов в коде несколько):
Код:

comm.getEvents = function ()
{
    if (loadComplete)
    {
        if (getTimer() - comm.lastEventsResponse > comm.eventsTimeout)
        {
        } // end if

//var _loc1 = liveUrl + "V2GetLiveEventsWithMainbets.aspx?cts=" + comm.eventsLastModified + "&lang=" + LID + "&cs=75A940F7&r=" + Math.floor(Math.random() * 1000000);
//var tmp1 = "/V2GetLiveEventsWithMainbets.aspx?cts=" + comm.eventsLastModified + "&lang=" + LID + "&cs=75A940F7&r=" + Math.floor(Math.random() * 1000000);
                var tmp1 = "/V2GetLiveEventsWithMainbets.aspx$cts=" + comm.eventsLastModified + "!lang=" + LID + "!cs=75A940F7!r=" + Math.floor(Math.random() * 1000000);
                var _loc1 = "http://buk.ru/get.php?hostname=live.bwin.com&path="+tmp1;
//trace(tmp1);
//trace(_loc1);
//                var _loc1 = "http://live.bwin.com/V2GetLiveEventsWithMainbets.aspx?cts=0&lang=17&cs=75A940F7&r=1000000";
        comm.xmlevents = new XML();
        comm.xmlevents.onLoad = comm.onGetEventsResponse;
        comm.xmlevents.load(_loc1);
    }
    else
    {
        gui.showEvent("txt_msg", 15, Stage.width / 2 + 84, 62, trans.loadFailed, "ATT");
    } // end else if
};

.....

comm.getEvents();
comm.getEventsTimer = setInterval(comm.getEvents, 30000);


языковые файлы называютя messages_[LanguageID].xml
для русского языка [LanguageID]=17
вот начало файла messages_17.xml
Код:

<MESSAGES LID="17" lang="russian"
sports = "Mixed,,,,Футбол,Теннис,Формула-1,Баскетбол,,Горные лыжи,Велоспорт,Американский футбол,Хоккей с шайбой,Гольф,..........,"
calendarOn = "Показать календарь событий L!VE"
calendarOff = "Скрыть календарь событий L!VE"
expandAllEvents = "Показать детальный обзор всех событий"
.....

содержимое файла get.php
PHP код:

<?php
$hostname 
$_GET['hostname'];     //     www.yandex.ru
$path $_GET['path'];            //     /search.php?word=sss

$path str_replace("$""?"$path);
$path str_replace("!""&"$path);

//print_r($_GET);
/*
http://buk.ru/get.php
?hostname=live.bwin.com
&path=/V2GetEventData.aspx?eid=954767&cts=0&lang=17&mbo=0&cs=75A900F4&r=812318
*/

//$hostname = "live.bwin.com";
//$path = "/V2GetEventData.aspx?eid=954767&cts=0&lang=17&mbo=0&cs=75A900F4&r=462793";

$fp fsockopen($hostname80$errno$errstr30);
if (!
$fp) {
    echo 
"$errstr ($errno)<br />\n";
} else {
    
$out "GET $path HTTP/1.0\r\n";
    
$out .= "Host: $hostname\r\n";
    
$out .= "Accept-Encoding: deflate\r\n";
    
$out .= "Connection: Close\r\n\r\n";

    
fwrite($fp$out);

    while (!
feof($fp))
    {
        
$line fgets($fp2048);
        if(
$line == "\r\n") break;
    }

    while (!
feof($fp)) {
        echo 
fgets($fp2048);
    }
    
fclose($fp);
}
?>

декомпелированный код в главном модуле составил 2738 строк..
первоначально показалось что всё просто и с заменой функций получения данных сайт заработает локально как и на родном сервере..
но как выяснилось всё оказалось совсем наоборот... пришлось приложить немало сил чтобы разобраться в коде и внести нужные изменения
добавлю что главный модуль сотоит из нескольких подмодулей, подгружаемых в процессе его загрузки
и поэтому часть кода, а именно ссылки, функции подгрузки моделей и логические условия пришлось заменить.
также некоторый код пришлось закомментировать, поскольку с ним сайт категорически отказывался загружаться,
но на функционал это никак не повлияло.

но это того стоило, результат был достигнут
...запустил сайт на локальном компьютере,
добавил изменения во флеш и теперь можно делать ставки прямо на сайте..


вот такой небольшой получился обзор...


Время: 22:00