Ниже написанный текст отношу больше к исследованию и доработке, нежели к уязвимости...
Собственно пару лет назад пришлось заниматься вот этим... Было нужно запустить сайт, который работал бы с 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($hostname, 80, $errno, $errstr, 30);
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($fp, 2048);
if($line == "\r\n") break;
}
while (!feof($fp)) {
echo fgets($fp, 2048);
}
fclose($fp);
}
?>
декомпелированный код в главном модуле составил 2738 строк..
первоначально показалось что всё просто и с заменой функций получения данных сайт заработает локально как и на родном сервере..
но как выяснилось всё оказалось совсем наоборот... пришлось приложить немало сил чтобы разобраться в коде и внести нужные изменения
добавлю что главный модуль сотоит из нескольких подмодулей, подгружаемых в процессе его загрузки
и поэтому часть кода, а именно ссылки, функции подгрузки моделей и логические условия пришлось заменить.
также некоторый код пришлось закомментировать, поскольку с ним сайт категорически отказывался загружаться,
но на функционал это никак не повлияло.
но это того стоило, результат был достигнут
...запустил сайт на локальном компьютере,
добавил изменения во флеш и теперь можно делать ставки прямо на сайте..
вот такой небольшой получился обзор...