Уязвимость сайта qip.ru

    Ну, думаю прошло достаточное количество времени, и можно об этом написать.
    И дабы избежать случившегося после опубликования статьи о Рамблере, и не уйти в бан, я выждал, отписал администрации, уязвимость закрыли. Так что, пишу я с совершенно чистой душой.

    Новая дырявая плюшка



    Значит, сделали ребята из qip.ru у себя на сайте выбор города, в котором ты живешь. Дату и время опытов, я оставлю при себе, иначе будет не хорошо, но скажу что не так давно.
    новый сервис
    После выбора города, ты получаешь сведения о погоде в своем городе, то есть, достаточно удобная плюшечка. Ну и как все, я решил воспользоваться, и воспользовался. И выяснилось, что сервис очень даже интересный, для некоторых.

    Осмотр


    Потыкав эту менюшку мышкой, был выбран город, и отслежены заголовки отправляемые на сервер. POST данные, выглядят примерно так:

    code=RU_14_41145_24959

    Немного осмотревшись, пробуем передать скрипту различного рода параметры, изменяя их как можем. И вуаля, в последнем параметре нас ждет сюрприз.Передаем что-то вроде:

    code=RU_14_41145_24959abrabr!1

    и видим красоту:
    image
    Опа, lfi, локальный файловый инклуд. Просто прелестно! Ну вот и все, опытным путем злоумышленник подбирает кол-во подъемов относительно корневой директории, и получает возможность просматривать различные системные файлы, в том числе, файлы конфигурации сервера. А если заинклдуить логи апача, предварительно снабдив их «ядовитым кодом» в поле User-Agent, то это вообще будет полноценный шелл. Ну мы то с вам добрые ребята, так что мы этим заниматься не стали.

    Good-boys


    Отписали администрации, переговорили с ихним ведущим программистом по аське, и нашли взаимопонимание. Благо программист у них парень хороший, и поговорили мы хорошо. Я объяснил что где, он закрыл. Правда закрыл не с первого раза, сначала они сделали замену "/" в переменной, то есть, была возможность юзать "\", и вот только через недельку после первого фэила, они залатали ее совсем. Вот и все, а мораль сего поста такова: фильтруй post, не используй Explode, ибо затеряешься среди массивов, и не отфильтруешь нужный, как это случилось с qip.ru.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 44

      +21
      Часто за всем не уследишь :) А вы — молодец! Так и нужно реагировать на подобные вещи!
        +2
        за POSTом надо следить в первую очередь независимо от того какой сложности скрипт ты пишешь.
      • UFO just landed and posted this here
          +4
          Уже не первый раз, однако.

          Эх, QIP, эх, РБК.
          +31
          настоящий Хакер, взлом ради спортивного интереса + помощь админам!
          • UFO just landed and posted this here
              0
              Вот тут есть произношение.
              www.google.ru/dictionary?source=translation&hl=ru&q=hacker&langpair=en|ru
              • UFO just landed and posted this here
                • UFO just landed and posted this here
                  • UFO just landed and posted this here
                • UFO just landed and posted this here
                    –1
                    Да, потому что hash звучит как хэш, а hacker как хакер.
                    При чём там буква э?
                    Вы hewlett packard тоже читаете как пэкард? :)
                    • UFO just landed and posted this here
              +2
              Надеюсь что действительно только Вы один до этого додумались, другие то могли и сплоиты повесить на квип.ру, а еще другие заразить скачиваемые аськи своими троянами, да или просто угнать пароли, мы то знаем что сервис webim.qip.ru сохраняет все переписки наши, пароли и так далее и жестко навязывают конечному пользователю свой jabber аккаунт у них, без которого не запуститься qip если не иметь сноровку.
              • UFO just landed and posted this here
                  +2
                  В этот раз да, видимо обошлось.
                    0
                    Не первый раз qip.ru нагибают, опыт уже есть.
                    +13
                    жестко навязывают конечному пользователю свой jabber аккаунт

                    Молодцы же!
                      +7
                      *холивар начинается здесь*
                        +13
                        </thread>
                      +1
                      > Вы один до этого додумались, другие то могли и сплоиты повесить на квип.ру, а еще другие заразить скачиваемые аськи своими троянами

                      Уже не модно :) Старые сборки qip 2005 были заражены Induc'ом.
                        +1
                        жестко навязывают конечному пользователю свой jabber аккаунт у них, без которого не запуститься qip

                        qip 2010 вам в помощь
                          +2
                          infium.exe" /isolated
                          +11
                          говори «их», не «ихний»
                            +3
                            Любой программист должен заучить мантру: «Не доверяй данным»
                              +2
                              Есть ещё одна, реже используемая: «Они ни в коем случае не должны напрямую участвовать в инклудах.»
                              Можно использовать if, case, etc…
                              Например:
                              $city = trim($_POST['data']);
                              if (!empty($city)) {
                                switch($city) {
                                 case '1':
                                 case '2':
                                 case '3':
                                   $this->showBlock($city);
                                   break;
                                 default:
                                   $this->showError(404);
                                   break;
                                }
                              }


                              Или так (упрощённый вариант):
                              $city = trim($_POST['data']);
                              if (!empty($city) and is_numeric($city)) {
                                $this->showBlock($city);
                              }else{
                                $this->showError(404);
                              }


                              … и ещё полторы тысячи способов фильтрации данных, применяемых по обстоятельствам.

                              Но никогда не должно быть чего-то подобного: include($_POST['data']);
                              • UFO just landed and posted this here
                                  +1
                                  за шестизнак)
                              +2
                              Всем спасибо за комментарии, было приятно.
                                +1
                                «Проверяйте всё, что вводит пользователь. По умолчанию он злоумышленник» (с) habrahabr.ru/blogs/php/12067/
                                  0
                                  Им не привыкать
                                    +1
                                    Какой вы злой =)
                                    +3
                                    Сколько здесь античатовцев…
                                    • UFO just landed and posted this here
                                        +2
                                        Мораль проще, не include'ь и не require'ь файлы с именами из параметров запроса оО
                                          +1
                                          после того, как эти умники стали хранить пароли пользователей у себя — отказался от квипа в пользу Миранды.
                                          меньше глюков, больше толку.
                                            0
                                            Я считаю, они должны вам денег. Могли пострадать, если бы вы не сообщили о дыре.
                                            • UFO just landed and posted this here
                                              –1
                                              Ну, раз столько пафоса про простую дырку, значит денег вам не дали :)
                                                –1
                                                >>> Правда закрыл не с первого раза, сначала они сделали замену "/" в переменной, то есть, была возможность юзать "\"…

                                                Ужас, он хотя бы информатику в школе учил интересно?
                                                  0
                                                  «А если заинклдуить логи апача, предварительно снабдив их «ядовитым кодом» в поле User-Agent»

                                                  Уже давно есть много различных методов.
                                                  /proc/self/environ
                                                  Вообще, Xakep.ru
                                                    0
                                                    /proc/self/environ к примеру был, реально много различных методов:)

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