Digimortal
15.09.2006, 12:49
Баги на Почте.ру
[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.
[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.