Task # Task #9

Discussion in 'Задания/Квесты/CTF/Конкурсы' started by Baskin-Robbins, 9 Feb 2020.

  1. undefo

    undefo New Member

    Joined:
    4 Sep 2019
    Messages:
    2
    Likes Received:
    3
    Reputations:
    11
    Было интересно, спасибо
     
    Baskin-Robbins likes this.
    1. leksadin

      leksadin Level 8

      Joined:
      19 Jan 2016
      Messages:
      128
      Likes Received:
      60
      Reputations:
      12
      Хороший таск, ничего сложного.

      После хинтов остаётся буквально один шаг до флага.
       
      4Fun, undefo and Baskin-Robbins like this.
      1. Baskin-Robbins

        Baskin-Robbins Reservists Of Antichat

        Joined:
        15 Sep 2018
        Messages:
        239
        Likes Received:
        809
        Reputations:
        212
        С момента запуска задания прошло две недели, а значит пора подводить итоги.

        Взглянем еще раз на задание.

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

        Повтыкав немного, понимаем что у нас читалка файлов. В целом задача таска и встречающая
        нас надпись "Read Me bro!" подтверждает наше предположение. Далее самое интересное - фильтр.

        Подробно изучив систему фильтрации нашего инпута, приходим к выводам о блокировки
        большинства врапперов и абсолютных путей. Подняться выше с помощью '..' мы также не можем.
        И фильтрация php файлов нам на десерт, прочитать index.php просто так не удастся.
        Трюки с кодировками также не принесут никаких результатов. Но все же фильтруется не все...

        Наш фильтр пропускает ogg:// rar:// ssh2:// compress.bzip2://.
        file:// и data:// фильтруются не полностью, в первом случае предупреждение получаем
        на попытку использования file:///, во втором пропускается data: и data:/.

        Можно было попробовать повтыкать во все и убедиться что первые четыре никаким образом
        нам не помогут. Эти обертки не включены по умолчанию и комментарий к первому хинту
        подтверждает, здесь их не использовать.
        Остается два варианта на выбор - data и file. И тут было важно не пойти по ложному пути.
        Обертка file используется исключительно с абсолютными путями, т.е. использование
        таких форматов невозможно - file://index.php file://./index.php. Казалось бы ничего
        нельзя придумать, ну нельзя ее использовать в таком формате на UNIX-подобных машинах.

        И это могло подтолкнуть поглубже покопаться в обертке data, освежить старые знания.
        Но это как раз и есть ложный путь. В нашем случае этот враппер ничем не сможет помочь,
        чтение будет происходить не из переданного файла, а содержимого самого враппера.

        И казалось бы вариантов нет, фильтр не обойти. Но у нас остался открытым вопрос -
        почему же с враппером file нельзя использовать относительные пути?

        И вот тут то и кроется правильный ответ. В том как мы можем использовать данный
        враппер в формате file:// на UNIX-подобных ОС. По этому поводу есть старый репорт 2004 года
        https://bugs.php.net/bug.php?id=28820, в котором нам однозначно говорится о невозможности
        использования относительных путей. И причина по которой это сделано наталкивает нас
        на правильное решение.

        The reason relative paths are not supported with the file:// wrapper comes down to
        a compromise in how UNC paths are dealt with (and more specifically how / are fuzzily
        interpreted as \ for windows installations).

        For Example:

        file://foo/bar

        Could be interpreted as a relative URI: foo/bar from the current working directory,
        OR it could be interpreted as a UNC: \\foo\bar (share `bar` on computer `foo`).

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

        https://tools.ietf.org/html/rfc8089
        https://ru.wikipedia.org/wiki/File_(схема_URI)

        В итоге правильным решением было использование обертки file в таком формате:
        file://<host>/<absolute path>
        index.php?name=file://localhost/var/www/flag.txt
        =====

        Всем спасибо.
        Пользуясь случаем, поздравляю с Днем защитника Отечества!
        Таск закрыт.
         
        #23 Baskin-Robbins, 23 Feb 2020
        Last edited: 23 Feb 2020
        1. crlf

          crlf Green member

          Joined:
          18 Mar 2016
          Messages:
          684
          Likes Received:
          1,519
          Reputations:
          460
          И листая сорцы PHP! :)
           
          4Fun, erwerr2321, dooble and 2 others like this.
          1. RedHazard

            RedHazard Banned

            Joined:
            17 Apr 2011
            Messages:
            70
            Likes Received:
            14
            Reputations:
            8
            а как прочитать исход index.php ?
             
            1. Baskin-Robbins

              Baskin-Robbins Reservists Of Antichat

              Joined:
              15 Sep 2018
              Messages:
              239
              Likes Received:
              809
              Reputations:
              212
              так же как и флаг)
              index.php?name=file://localhost/var/www/html/index.php
               
              #26 Baskin-Robbins, 23 Feb 2020
              Last edited: 23 Feb 2020
              seostock and RedHazard like this.
              1. RedHazard

                RedHazard Banned

                Joined:
                17 Apr 2011
                Messages:
                70
                Likes Received:
                14
                Reputations:
                8
                Перелопатил куча инфы, ТОННЫ инфы однотипной копипаст.
                до localhost так и не допёр.
                 
                fandor9, dooble and Baskin-Robbins like this.
                1. fandor9

                  fandor9 Reservists Of Antichat

                  Joined:
                  16 Nov 2018
                  Messages:
                  630
                  Likes Received:
                  1,050
                  Reputations:
                  47
                  +1
                  а я пытался через data: враппер выпилить флаг)
                   
                  dooble and Baskin-Robbins like this.
                  1. eminlayer7788

                    eminlayer7788 Member

                    Joined:
                    31 Jul 2015
                    Messages:
                    207
                    Likes Received:
                    81
                    Reputations:
                    8
                    Converting LFI into RCE by chaining PHP encoding filters

                    https://www.synacktiv.com/publications/php-filters-chain-what-is-it-and-how-to-use-it.html