Привет, Хабр!


Подводим итоги квеста от MBLT DEV 2018: разбираем задания и дарим подарки — билеты на конференцию, подписки на все продукты JetBrains и сертификаты Skyeng самым удачливым.




Знаем, что вам пришлось поломать голову. Автор ваших мучений — damnerd. Рассказываем, что же он придумал, и как вы должны были решать задания.


Вход в квест


По традиции спрятали его в видео. Даже на обычной скорости просмотра можно было увидеть шифр, в такт с музыкой проскакивающий на одной из сцен видео:




Хотя некоторые ринулись записывать декоративные буквы из другой сцены:




Переписываем шифр и получаем: aHR0 cHM6 Ly9t Ymx0 ZGV2 LnJ1 L3J1 L3F1 aXo=


Увидев на конце знак =, моментально понимаем, что это строка, закодированная в формате base64. Недолго думая, выполняем


echo 'aHR0 cHM6 Ly9t Ymx0 ZGV2 LnJ1 L3J1 L3F1 aXo=' | base64 --decode

(либо гуглим base64 decode online) и получаем линк на вход в квест: https://mbltdev.ru/ru/quiz


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


Задание 1


Нужно было перейти по ссылке и написать, название какой команды мы оставили в подсказке. При переходе мы показали картинку:



Тут всё довольно просто: Source = исходный код. Смотрим, что в нём:



Здесь мы не стали запутывать человека каким-либо обфусцированным кодом или чем-то подобным, а вместо этого на самом видном месте самым очевидным способом (словами коровы) выдали подсказку. Как оказалось, наша попытка привлечь внимание обернулась для некоторых наоборот отвлечением внимания от подсказки. Многие в качестве ответа на вопрос вводили команду cowsay, которая генерирует подобную ASCII-графику. Однако смотреть надо было именно на текст: It’s in the name. Dig it?! Имя команды было непосредственно в самой подсказке: dig. Собственно, имя команды мы и просили (потому что саму команду можно выполнить с одинаковым успехом при разном наборе параметров, а программисты ленивые и система проверки ответов глупая), так что это и было ответом на первый вопрос.


Задание 2


После выполнения команды “dig” нужно было увидеть подсказку, с помощью которой можно перейти к следующему шагу. Мы попросили написать её значение.


Возвращаясь к подсказке из прошлого задания, помимо слова dig, рядом стояло слово name, несущее в себе смысл domain name. Пососедству стоящие name и dig наводят на следующий шаг: необходимость поковырять (или покверить, если угодно) доменные записи для имени, где лежит страница с подсказкой. Конечно, по-умолчанию dig запрашивает A-запись, в которой ничего нет, кроме основной записи с IP-адресом. Надо было догадаться, что запросить необходимо TXT-запись:


> dig +nocmd +noall +answer q1.mbltdev.ru txt
q1.mbltdev.ru.       10108    IN    TXT    "quest@95.163.108.79:10022"

Либо загуглить dig online и воспользоваться простой веб-мордой, не читая маны по дигу:




Непосредственно значение этой текстовой записи и было как ответом на задание, так и подсказкой к следующему действию — зайти по SSH на хост 95.163.108.79 под пользователем quest на порт 10022: ssh quest@95.163.108.79 -p 10022.


Задание 3


Мы загадали ребус о том, что общего у Android и iOS. Попросили вычислить пароль и ввести его.


Многие писали, что это слишком сложно. Но это ребус в квесте, который никто не может пройти! Но вообще всё было в тексте, даже слово Parent.


Пересечение android и apple > OS
Прародитель их ОС > Unix
lowercase(Unix) > unix
sha1(unix) > d13bbbd92b83ddaad994a12bd9d20dfba5fff139


> echo -n "unix" | shasum
d13bbbd92b83ddaad994a12bd9d20dfba5fff139  -

Как обычно, можно было загуглить sha1 online и вычислить сумму, не отходя от кассы.


Задание 4


Всё, что понадобилось для выполнения этого задания, лежало в домашней директории. Мы просили получить следующую подсказку после введения пароля из Задания 3 и написать её значение.


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



В домашней директории лежит всего 4 файла, два из которых не при делах — .profile и .bashrc были почти полностью дефолтными для нового пользователя конфигами. Оставалось два файла с «пустым» названием. Кстати, даже SSH MOTD намекал на это своей фразой /\s/. Это не странный смайлик, а регулярное выражение для пробельного символа. В имени первого из файлов был символ обыкновенного пробела (U+0020: SPACE). Второго — необычный пробел из китайской письменности (U+3000 IDEOGRAPHIC SPACE).


У пользователей iTerm2 на Mac OS была дополнительная трудность: этот эмулятор не хотел копировать необычный пробел. Обычный Terminal без труда копировал символ, и можно было просто выполнять над ним команды простым ?C-?V. Но для пользователей кривых эмуляторов, а также любителей извращений, были и другие методы, например, сделать ls -li, чтобы узнать inode number файла, и дальше выполнять команды с помощью find:


find . -inum 660402 | xargs cat

Кстати, эта команда просто выплёвывает в терминал много пустых строк. Тут знающие люди сразу могли догадаться, что это листинг программы на языке Whitespace, загуглить whitespace interpreter online и получить следующую подсказку. Незнающие люди могли просто догадаться, что надо как-то совместить два файла, которые есть у них в распоряжении. Дополнительной подсказкой было, что один из этих файлов имеет флаг на исполнение (+x) и перловый шебенг. Так или иначе, выполнение программы выдавало ответ: http://q1.mbltdev.ru/q.webp


Задание 5


В четвёртом задании мы спрятали ссылку http://q1.mbltdev.ru/q.webp. В пятом нужно было перейти по ней и ответить на вопрос.


Финальное задание было простым для разрядки обстановки. По данному URL’у была картинка в формате tiff, сохранённая с разрешением webp. Некоторые умные графические просмотрщики открывали её без вопросов. Некоторые не открывали. Но достаточно было спросить того, кто знает:


> file q.webp
q.webp: TIFF image data
> mv q.{webp,tiff}

В самой же картинке был простой вопрос:




Ответ: 0. MBLT DEV всегда проходит в Москве. В этом году встречаемся 28 сентября.


Кстати, говорят, некоторые находили картинку обходным путём. Это было возможно, если пошариться по серверу из 4-го задания, потому что и страничка из первого задания, и картинка из последнего, и задания 3 и 4 хостились на одной машине (не забывайте про лень разработчиков). Если вкратце:


quest@questmblt2018:~$ grep root /etc/nginx/sites-enabled/quest
    root /var/www/html;
quest@questmblt2018:~$ ls /var/www/html/
index.html  index.nginx-debian.html  q.webp

Post Mortem


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




Был какой-то умелец, который закачал на сервер 15 ГБ данных, исчерпав место на диске. Конечно же нашлись и скрипт-киддисы, запускавшие форк-бомбы, ломающие логин для других пользователей. Ну и не обошлось без «спам»-ботов, пытавшихся, зная правильные ответы, застолбить себе побольше шансов в финальной лотерее.


Приносим свои извинения тем, кому помешали недобросовестные участники.


Подарки и победители


3070 человек попытались пройти квест. Мы получили 666 ответов, почистили читеров, в итоге с квестом успешно справились 297 человек. Среди них мы и разыграли основные подарки.


Каждому участнику присвоили порядковый номер и с помощью генератора случайных чисел разыграли призы. Записали видео с выбором победителей. Имейлы скрыты из соображений приватности.


Билеты на конференцию мобильных разработчиков MBLT DEV 2018



Билеты получают Владислав Козлов, Дмитрий и Игорь.


Годовые подписки на любой продукт JetBrains



Подписки получают Павел Парфёнов, Вадим Скрипник и Андрей.


4 бесплатных занятия английским в онлайн-школе Skyeng



Сертификаты получают Сергей и Валентин.


2 бесплатных занятия английским в онлайн-школе Skyeng



Сертификаты получают Алексей и Евгений.


Остальным участникам квеста мы тоже отправили небольшие подарки. Проверяйте почты!


Встречаемся на MBLT DEV 2018


Конференция пройдёт 28 сентября в Москве. Участников ждут полезные доклады от разработчиков из Netflix, Uber, Revolut, Badoo и других компаний, нетворкинг и фан. Мы приготовили ещё несколько квестов с крутыми призами. Билеты доступны на сайте MBLT DEV.

Комментарии (35)


  1. pewpew
    06.09.2018 15:32

    Поздравляю счастливчиков!
    Спасибо за квест.
    Четвёртый вопрос был и вправду неплохим.
    К сожалению сложность вопросов весьма сильно разбросана. Пятый оказался на пару минут. А третий… Вопрос спорный. Но ок, прошёл и его.
    Жаль, ничего не выйграл.
    К слову, ничего в почту не пришло. Наверное, я в числе читеров. Решал всё сам, но ок, читер, так читер.


    1. vchslv13
      06.09.2018 15:49

      И мне ничего не пришло. Странно у них отсев читеров работает как-то. Ну да и ладно, квест весёлый был :)


    1. San_tit
      06.09.2018 16:00

      Такая же фигня :-(
      А вообще странно: не ахти какие ценные подарки, а "читеров" больше половины.


      1. pewpew
        06.09.2018 16:04
        -1

        Таки-пришло. Но посчитали, что я не прошёл квест. Хотя да, таки-прошёл.
        Начал дома, недопрошёл.
        Потом прошёл на работе.
        Да пофиг. Я не за призами квест проходил.


        1. pewpew
          06.09.2018 16:12
          -1

          Пока писал, в почту упало второе письмо. Видимо от удачной сессии браузера.
          Там указано, что я прошёл. Приз тот же, но чуть больше.

          Поздравляем, ты прошёл квест от MBLT DEV!

          Мы знаем, было непросто. Сегодня мы подвели итоги квеста: более 3000 участников, из которых только 297 решили все 5 заданий. Читай подробный отчёт в хабрапосте.

          Получается, учёт вёлся не по e-mail, а по сессиям.


  1. suharik
    06.09.2018 15:41

    А какая связь, если не секрет, между Android, iOS и sha1?


    1. katiem Автор
      06.09.2018 15:49

      На почту ещё придёт, письма в очереди на отправку. Если через 30 минут так ничего и не придёт, напишите мне, будем разбираться.


      1. pewpew
        06.09.2018 15:52
        -1

        Пришло. Да, видимо почтовые олени Санты бегут неторопливой рысцой.
        Спасибо за подарок! Мне он не пригодился, но всё равно спасибо.


      1. suharik
        06.09.2018 17:15

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


        1. dali
          06.09.2018 17:38

          en.wikipedia.org/wiki/IOS OS family Unix-like, based on Darwin (BSD), macOS
          https://en.wikipedia.org/wiki/Android_(operating_system) OS family Unix-like

          немного притянуто, но все-таки unix


          1. suharik
            06.09.2018 17:57

            Ок, понял. Надо было догадаться, что лучше искать в en.wiki. А при чем тут sha-1?


            1. dali
              06.09.2018 18:00

              когда в консоли подключаешься по ssh

              ssh quest@95.163.108.79 -p 10022
              там была подсказка, что надо было сделать lowercase а потом sha1


              1. suharik
                06.09.2018 20:38

                Спасибо, понял. Жаль, что без подсказки связи между этими словами не видать вообще. То есть, недостаточно было просто найти ответ.


  1. dali
    06.09.2018 15:53

    в задании 2 выполнял dig к mbltdev.ru, потом дошло, что надо к q1.mbltdev.ru
    в 3 сначала думал что общее у android и ios буквы io, пытался от какой-то их комбинации взять sha1 и получить пароль, потом уже подумал про parent
    ну а в 4 чего только не делал, пока не додумался что можно попробовать перловый скрипт применить к пустому файлу. причем так и делал, брал inode number и вызывал скрипт с файнд по inode

    и в почту мне тоже ничего не пришло, хотя я точно не читер :) а все, увидел про очередь)


  1. iamoverit
    06.09.2018 15:56

    А где список тех кого посчитали честными победителями? меня кажется в этом списке нет и письмо на почту пришло будто я не справился с квестом хотя я его прошел.


  1. zvirusz
    06.09.2018 16:14

    > Так или иначе, выполнение программы выдавало ответ

    А расскажите как по-кошерному нужно было это запустить? Интересуют варианты помимо `./*` :)


    1. dali
      06.09.2018 17:50
      +1

      хз, как по кошерному. я сначала

      ls -il
      нашел inode number «пустого» файла, затем запустил как-то так
      find . -inum INODE_NUMBER -exec \.' ' {}


      1. ArtiomCX75
        06.09.2018 18:10
        +1

        А я воспользовался идеей из этой статьи.
        Выполнил команду:
        select i in *; do perl ./' ' $i; done
        — получил список файлов
        — напечатал номер нужного мне
        — enter
        — …
        — profit


        1. dali
          06.09.2018 18:13

          высший пилотаж)


        1. begin_end
          06.09.2018 20:13

          Я не быстро, но после многих разных попыток изучения файлов доступными способами нашел такое решение:
          ./' ' *
          (предполагая, что во втором имени некий не-пробел, и это таки сработало)


        1. AdmAlexus
          06.09.2018 20:21

          perl ./*
          Слабоумие и Отвага)))


    1. michael_vostrikov
      07.09.2018 06:11

      Можно так:


      ls -a
      ls -1 | xxd -p
      cat ./\ 
      find $'./\xe3'* -exec bash -c "cat {} | perl ./\ " \;

      Но я по-другому делал, а консольное решение потом для интереса поискал.


      Открыл SSH, нашел файл с пробелом, пропуск в выводе ls не заметил. Запускаю, ничего не происходит. Подключился через WinSCP, там видно еще один файл с кракозябрами в имени. Думаю, то ли так надо, то ли мусор какой-то, внутри пробелы. Скачал на всякий случай.
      Изучил код, это какой-то интерпретатор. Еще поизучал, он оказывается принимает пробелы. Запустил файл, скопировал пробелы из другого, вставил в терминал, нажал Ctrl+D.


    1. Razor2k
      07.09.2018 10:35

      quest@questmblt2018:~$ ls -1 | od -cb
      0000000      \n 343 200 200  \n
              040 012 343 200 200 012
      0000006
      quest@questmblt2018:~$ ./' ' < `printf "\343\200\200"`
      http://q1.mbltdev.ru/q.webp
      


  1. BugM
    06.09.2018 16:31

    Проблемы вызвало только третье задание.

    Пересечение Андроид и Эппл -> телефон, сотовый, связь, корпус, процессор, тачскрин, экран, кирпич, далее у меня были совсем странные идеи типа Америка со всеми вариантами написания и даже планета Земля и всякие роботизированные яблоки. Гугл по запросам яблоко робот выдает неплохие картинки.

    Родитель от предыдущих вариантов -> Ну тут фантазия разгулялась. От Белла до кремния. Количество вариантов было ну очень большое. И пробовать все надо на 2 языках. Ну кто его знает на каком языке вы ответ посчитаете верным.


    1. michael_vostrikov
      07.09.2018 06:01

      У меня было вот так (git bash):


      и я сначала пробовал побитовое И и ИЛИ четырехбайтовых строк. Потом помедитировал на вопрос, сообразил про Unix, и уже потом догадался, что это наверно Unicode-символы)


      1. BugM
        07.09.2018 13:37

        Мне повезло. Мой клиент эмодзи сразу увидел. С вашим ужасом вообще непонятно что делать.


        1. dali
          07.09.2018 13:48

          я эти комбинации нагуглил) ну яблоко и робот. и так было понятно из задания про Андроид и иОС


    1. Razor2k
      07.09.2018 12:52

      А я сначала по символам робота и яблока стал искать робот Apple и наткнулся на относительно свежую новость от 19 апреля 2018г:

      В преддверии Дня Земли компания Apple представила нового робота по имени Daisy. Он разбирает на части смартфоны iPhone, чтобы извлекать из них ценные материалы для повторного использования.
      Предыдущего робота, предназначавшегося для разборки iPhone, звали Liam, он был представлен Apple в 2016 году.

      но sha1(liam) не подходил ко входу в терминал.


  1. Valkinaz
    06.09.2018 16:41

    Привет, спасибо за квест, письмо пришло :) Удивлен, что справилось так мало участников, и немного поднял свое чсв :D
    Убил 4 часа, впервые узнал что такое dig, да и вообще с unix не сильно-то и знаком.


  1. CoreTeamTech
    06.09.2018 16:56

    Поздравляю тех мобильных разработчиков, кто удачно прошел квест. Я не смог. Про команду DIG не знал, каюсь, так как редко сталкиваюсь с необходимостью делать то, что эта команда делает. По поводу 3го вопроса, никогда бы не смог его пройти. Разрабатывал еще под первые iPhone, и тогда, и сейчас iOS не был UNIXом, впрочем, равно как и Android.


  1. AdmAlexus
    06.09.2018 17:14

    katiem, а давайте попросим штатного дизайнера и нарисуем электронные сертификаты для те кто прошел?
    Так сказать для повышения ЧСВ (и дырку на обоях закрыть).


    1. katiem Автор
      06.09.2018 18:07
      +1

      Напишите мне в личку, я сделаю вам сертификат)


  1. kurono267
    06.09.2018 18:12
    +1

    Юху, я все таки выиграл, появился лишний повод подтянуть английский) Правда успел расстроиться по поводу отсутствия письма, но оказалось гугл закинул письмо в спам(


  1. Ku6ep
    06.09.2018 19:14

    Блин! Я вводил в ответ на четвертый вопрос, ответ на 5-й! И не мог понять, какого черта я не перехожу на следующий вопрос! Ппц. Я просто не смог подумать, что ответом может быть линк на файл! Поскольку посчитал что запустить интерепретатор whitspace это совсем просто, хоть и пришлось мучаться через inode и find
    Эх, ну ладно, получается квест я прошел, технически, все ответы нашел, просто вводил не тот ответ в 4-м задании :)
    Спасибо!


  1. venom280
    07.09.2018 02:17

    Использовал iTerm2 и на четвертом вопросе и правда столкнулся с проблемой в имени второго файла. Сделал через find . -exec, среди простыни мусора нашлась одна строка с ссылкой.