Баги на Почте.ру
[intro]
Всем привет, вот написал небольшую статейку об обнаруженных мною уязвимостях на Почте.ру.
Большинство описанных здесь багов были найдены мною еще несколько месяцев назад, и в службу поддержки этого почтового сервиса я отправлял сообщение об обнаруженных уязвимостях и рекомендациями по их устранению. Некоторое время на главной странице сайта провисело сообщение администрации к пользователям с извенениями о возможных неполадках в работе сервиса. Недавно сообщение это убрали, НО ВСЕ БАГИ ТАК ДО СИХ ПОР И ОСТАЛИСЬ.
Непорядок. А ведь Почта.ру достаточно серьезная почтовая система (ее домены: pochta.ru, fromru.com, front.ru, hotbox.ru, krovatka.net, land,ru, mail15.com, mail333.com, pisem.net, pochtamt.ru, pop3.ru, rbcmail.ru, smtp.ru).
[Итак приступим]
Сразу перечислю ряд уязвимых мест, которые присутствуют в данной системе:
1) возможность захода в систему одновременно с разных ip-аресов;
2) хранение ответа на секретный вопрос в открытом виде без необходимости ввода пароля для его просмотра;
3) и, собственно, отсутствие какой либо фильтрации на входящие данные в ключевых скриптах системы, что дает возможность использовать уязвимости типа passive-xss и sql-inj.
Использование взломщиком этих трех уязвимостей системы может привести к следующим последствиям:
1) угон почтового ящика ;
2) угон случайных почтовых ящиков;
3) дефейс, ведь Почта.ру - это еще и бесплатный хостинг;
4) массдефейсы;
5) атаки типа DoS на БД;
6) несанкционированное получение определенной иформации, например, чтение циркулирующих в системе писем или вытаскивание инфрмации из БД адресной книги;
7) теоретичеки существует возможность более серьезного проникновения на сервер, но я не ставил перед собой такой цели, поэтому ничего об этом сказать не могу.
[xss]
Пассивная xss присутствует в скрипте mailbox.php в параметре mailb. Сначала мне показалось, что эту уязвимость использовать для угона cookie нельзя, так как скрипту передается еще уникальный идентификатор сессии (параметр id), который создается при авторизации в системе. Но потом я нашел аж два способа (способы эти, надо сказать, несколько оригинальные

) обойти это. Один с помощью sql-inj, другой - связан с отсутствием проверки на заход в систему с разных ip.
Надо сказать, что способ угона ящиков через пассивную xss не очень эффективен: во-первых, по умолчанию авторизация через кукисы отключена, а во-вторых большинство пользователей веб-интерфейс не использует, в-третьих, - она ведь пассивка

. Со дня на день выйдет журнал ][, где подробно будут описаны мои опыты по угону ящиков на Почте.ру (там будет и видео).
[sql-inj в mailbox.php]
Скуль-иньекции, присутствующие на сайте гораздо круче чем пассивная xss. Вчера вот обнаружил такую тему: http://forum.antichat.ru/thread19714-pochta.ru.html :
Сообщение от Zitt
Короче решил я проверить свою почту ввожу лог\пасс вхожу в свой ящик там есть папки Входящие, Исходящие и др. так вот жамкаю на входящие и меня кидает не на мои письма а на совершенно ДРУГОЕ мыло. (через минуту уже все было как надо) я решил проверить написал на ето мыло письмо и оно пришло
Вобщем в итоге я кактто получил доступ к ящику есесно пасса я не знал еще через 7 минут доступа уже не было.
Вот такая интересная истоория!!
Отпишитесь кто чё думает по етому поводу!!!
Zitt, я знаю в чем дело

. Все дело в очень веселой sql-injection уязвимости на этом сайте. Уязвимым оказался сам параметр id - идентификатор сессии. Почему веселой? Просто, если к идентификатору сессии добавить 'or'1 , то оказываешься в чужом ящике и все остальные (ну, я не совсем уверен, что все) юзеры Почты на сервере, для которых в БД лежит id сессии (проще говоря, те кто сидят в этот момент на сайте Почты через браузер), окажутся в этом же ящике. Но это становится уже не совсем чей-то конкретно ящик - там в придачу часто оказывается куча писем, из самого ящика + те что недавно были отправлены/приняты и еще хрен поймешь какие. Все нафиг перемешивается. Это все срабатывает не очень стабильно и очень глючно. Например писем может и не быть. А могут быть, но читаться не будут. Зато можно проделывать с этим ящиком все что угодно: писать с него письма, посмотреть и изменить настройки и т.д. (вероятно, что эти изменения отразятся и на других ящиках, а может и нет - не проверял особо).
В общем, просто перейдя по ссылке
Код:
http://www.pochta.ru/mailbox.php?id=N'or'1
можно посеять маленький хаос в этой почтовой системе

.
[sql-inj в contact.php]
Идем дальше. Адресная книга. Когда мы просматриваем какую нибудь запись в ней, то урл выглядит следующим образом:
Код:
http://www.pochta.ru/adb/contact.php?id=[id_сессии]&uid=[id_записи]
Параметр uid - номер записи контакта в БД. Пробуем кавычку, получаем ответ сервера:
Код:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'lalala@front.ru'' at line 1
Если добавить к нему 'or' , то становится возможным изменять этот параметр просмотрев по-отдельности все записи, что имеются в БД. Неплохой источник для создания нехилого спам-листа (параметр uid изменяется от 1 до более чем 50 миллионов, так что мейлов насобирать можно немерено). Я нацарапал (чисто из интересу

) простенький скрипт, с помощью которого можно доставать эти мыльники и насобирал за пару дней небольшой спам-листик, но после решил, что для шеллов можно найти и лучшее применение

.
Пробуем использовать union в этом параметре:
Код:
http://www.pochta.ru/adb/contact.php?id=[id_сессии]&uid=[id_записи]'or''+union+select+null/*
В ответ получаем:
Код:
The used SELECT statements have a different number of columns
Я пробовал подобрать количество столбцов, но у меня или не получалось или даже приводило к этакому DoS - при восьми нуллах БД пару раз висла и раздел сайта "Контакты" вообще переставал работать (один раз на несколько часов). После этого я решил прекратить подобные попытки скуль-инъекций. Ну вот в общем-то и все... а, нет, еще не все: я упоминал про возможность массдефейсов.
[massdeface]
Еще когда я писал статью об угоне ящиков меня посещала идея о возможности массдефейсов на сайтах, хостящихся на этом почто-хостинге. Реализовать их можно используя sql-inj в параметре id. Для этого можно написать бота, который будет через определенные промежутки времени заходить на сайт по ссылке
Код:
http://www.pochta.ru/hosting/[id_сессии]'or'1/edit/file/?dir=/&file=index.html
, писать че-нибудь тама и сохранять это. Даже на тех аккаунтах, у которых нету сайта, он появится - сразу с дефейсом

.
И еще кое что: можно ведь совмещать xss и sql-inj. Интересно наблюдать как из одной ПАССИВНОЙ xss на снифер приходит штук по 50 записей...
P.S. За все время моих исследований ни один чел не лишился своего мыла, ни один сайт не был задефейсен, и вообще никто не пострадал (про то что "Контакты" не работали - так это я наврал, небыло такого, хе-хе

). Так что и вы, читающие это, не тупите, ок?
P.P.S. Если у тебя ящик на почте и ты предпочитаешь веб-интерфейс Bat'у, то рекомендую пользоваться старым интерфейсом Почты на http://old.pochta.ru.