Как Пройти Кибертесты На «Кпп» Часть 2

Всем привет, я Никита Куртин, куратор Израильской высшей школы информационных технологий и безопасности.

ХакерУ .

И продолжаю рассказывать о кибертестах от ведущей израильской компании по информационной безопасности Checkpoint. В предыдущем почта Я описал, как я прошел четыре теста, и в этом хочу рассказать о следующих трех, которые мне удалось пройти.

Для тех, кто пропустил первый пост, расскажу этим летом Контрольно-пропускной пункт , опубликовал серию кибертестов.

Официально конкурс завершился к концу сентября 2018 года.

Задания были разделены на шесть категорий: • Логика • Интернет • Программирование • Сеть • Реверс • Сюрприз Две задачи по каждому направлению.

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

Однако из-за плотного графика я мог позволить себе взять на себя только 8 задач из 12 (из четырех разных категорий).

И мне удалось решить 7 из них.

Так: Задача: «Головоломка».

Описание: Наконец-то мы нашли вас! Нам нужно сложить этот пазл, и как сказано в пророчестве, только вы способны на это.

Загадка довольно необычная.

Он состоит из доски с 10 столбцами и 10 строками.

Итого – 100 частей.

И каждый из них несет в себе загадку! Части состоят из четырех долей: верхней, нижней, правой и левой.

Каждый удар — это число.

Например:

Как пройти кибертесты на «КПП» часть 2

Сверху – 12, справа – 3, снизу – 4 и слева – 5. Чтобы головоломка была собрана, все части необходимо расположить на доске таким образом, чтобы каждая часть примыкала к равной части.

Кроме того, доля, которая ни к чему не примыкает, но является частью границы доски, должна иметь значение 0. Другие акции не могут иметь нулевое значение.

Вот реальный пример, состоящий из 4 частей:

Как пройти кибертесты на «КПП» часть 2

В верхней части доски все доли, образующие границу, равны нулю.

Давайте посмотрим на верхнюю левую часть.

Его правая доля равна 9, а соседняя доля (левая доля верхней правой части) также равна 9. К сожалению, все наши данные перетасованы.

Они предоставляются в следующем формате: Идентификатор куба [доли]; идентификатор куба, [доли];… идентификатор куба, [доли] Где id куба — это числа от 0 до 99, а доли состоят из чисел, расположенных в порядке: верх, правый, нижний, левый.

Например, посмотрите на следующую перетасованную доску:

Как пройти кибертесты на «КПП» часть 2

Вот как выглядит строка, описывающая эту плату:

Как пройти кибертесты на «КПП» часть 2

Нам нужно, чтобы вы завершили головоломку! Напишите нам строку, которая выглядит именно так: Идентификатор куба, сколько раз его нужно повернуть по часовой стрелке; id куба, сколько раз его нужно повернуть по часовой стрелке;.

id куба, сколько раз его нужно повернуть по часовой стрелке Строка с решением для этой платы будет выглядеть так:

Как пройти кибертесты на «КПП» часть 2

Приведенная выше строка соответствует следующей (решенной) головоломке:

Как пройти кибертесты на «КПП» часть 2

Давайте посмотрим на верхнюю левую часть.

В строке ему соответствует обозначение «2,2».

Как нам взять на вход кубик номер 2:

Как пройти кибертесты на «КПП» часть 2

Но мы поворачиваем его по часовой стрелке дважды и получаем [0,19,5,0].

Теперь давайте посмотрим на верхнюю среднюю часть.

В строке ему соответствует обозначение «1,0».

Итак, берем из входных данных куб номер 1:

Как пройти кибертесты на «КПП» часть 2

И не крутим его вообще (да, крутим 0 раз) - значит он уже в правильном положении.

Понятно? А теперь помогите нам собрать пазл! Это выглядит так:

Как пройти кибертесты на «КПП» часть 2

Удачи! Теоретически эту проблему можно решить разными способами.

Найдите свой и поделитесь им.

Я обдумывал несколько вариантов и в итоге пришел к следующим выводам: Первый.

В любой момент времени мне нужно определить только один куб.

Для каждого куба я всегда буду точно знать две стороны: верхнюю и левую.

Вначале это 0 и 0. У следующего кубика вверху также будет 0, а слева будет число, соответствующее номеру правой части предыдущего кубика.

Второй.

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

Третий.

Для работы с разными кубиками мне всегда нужно помнить их начальное положение (id), количество поворотов от начальной точки и, видимо, номера сторон (верхняя, правая, нижняя, левая).

Четвертое.

Исходный ввод представляет собой строку.

И выходные данные — это тоже строка (а не текущие позиции).

На основании всего этого я разработал для себя следующую стратегию: Двигайтесь линейно — слева направо, пока не дойдете до правого угла.

Далее идите вниз по линии и начните слева от нижнего номера куба, который расположен выше.

Соответствие необходимо проверять после каждого вращения.

Итак, если уже сделано 4 вращения и для данного кубика еще нет ни одного совпадения, я берусь за следующее.

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

Чтобы отслеживать все манипуляции с исходными данными, я выбрал метод объектно-ориентированного программирования, в котором куб — это объект, имеющий идентификатор, количество поворотов и четыре стороны: верхнюю, правую, нижнюю и левую.

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

Но когда я проверял окончательное количество вращений, я использовал модуль (остаток от деления) на 4. Например, если нужен один поворот (от [1,2,3,4] до [4,1,2,3]), но сначала по ошибке были выполнены три поворота (на данный момент [2,3,4,1]) , в следующий раз вам понадобится 2 (от текущего [2,3,4,1] до необходимого [4,1,2,3]).

3 плюс 2 равно 5. И 5% 4 = 1, это то, что вам нужно.

Мне всегда нужно отслеживать используемые кубы и предотвращать повторные проверки.

Для этого я использую таблицу идентификаторов куба.

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

Я выбрал следующие структуры данных: HashMap — для связи идентификатора (начальной позиции) и куба, построенного из входной строки.

Стек – для проверки идентификаторов связанных кубов.

Массив – для временной проверки результата.

Код объекта куба:

Как пройти кибертесты на «КПП» часть 2

Функции манипулирования стрингами:

Как пройти кибертесты на «КПП» часть 2

Логика поиска совпадающих кубиков:

Как пройти кибертесты на «КПП» часть 2

Результат:

Как пройти кибертесты на «КПП» часть 2

Задача: «Пинг-понг».

Описание: Могу поспорить, ты недостаточно быстр, чтобы победить меня.

Вот где я: нк 35.157.111.68 10158 Выполнив эту команду, вы получите:

Как пройти кибертесты на «КПП» часть 2

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

Однако после получения первых данных создается впечатление, что он попадает в Timeout, а затем и вовсе выключается.

Когда данные закончатся, появится новый разделитель строк.

Я воссоздал поток, используя код Python. Кажется, это сработало, поэтому я добавил итерационный код, который повторял алгоритм пинг-понга и ждал появления флага.



Как пройти кибертесты на «КПП» часть 2

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



Как пройти кибертесты на «КПП» часть 2

Задача: «Протокол» Описание: Привет! Нам нужно извлечь секретные данные со специального сервера.

Мы мало что об этом знаем, но нам удалось перехватить трафик, соединяющийся с этим сервером.

Мы также знаем, что путь к этому секретному файлу: /usr/PRivAtE.txt. Вы можете найти снифф-файл здесь (ссылка на файл).

Расскажите, пожалуйста, в чем секрет! Удачи! Я скачал файл и открыл его с помощью Wireshark.

Как пройти кибертесты на «КПП» часть 2

И проверил зарегистрированные переговоры

Как пройти кибертесты на «КПП» часть 2

Это позволило мне понять, что происходит

Как пройти кибертесты на «КПП» часть 2

Я заметил, что между IP 35.157.111.68 на порту 20120 и портом 22 SSH есть связь.

Надо проверить этот порт 20120, решил я, а затем перейти к SSH (позже я понял, что в этом нет необходимости).

Я использовал команду nc, чтобы проверить этот IP-адрес и порт, и получил ответ: «0 8 Добро пожаловать».



Как пройти кибертесты на «КПП» часть 2

Я не был уверен, какие данные он ожидает, поэтому вернулся в Wireshark, чтобы посмотреть, есть ли там еще какие-нибудь подсказки.

Я отфильтровал все пакеты данных для 35.157.111.68 на порту 20120 и нашел легко читаемый диалог:

Как пройти кибертесты на «КПП» часть 2



Как пройти кибертесты на «КПП» часть 2



Как пройти кибертесты на «КПП» часть 2



Как пройти кибертесты на «КПП» часть 2



Как пройти кибертесты на «КПП» часть 2

Я воссоздал все это с помощью командной строки nc:

Как пройти кибертесты на «КПП» часть 2

Я заметил, что ответ на мой запрос «2 3 XOR» отличался от того, что было в файле.

Я повторял всю процедуру снова и снова, чтобы увидеть, меняется ли каждый раз ответ.

Как пройти кибертесты на «КПП» часть 2



Как пройти кибертесты на «КПП» часть 2

Как я и думал, 4 полученных значения каждый раз были разными, как и конечные данные.

Похоже, что полученные четыре значения являются ключом к расшифровке итоговых данных.

Я также заметил, что числа перед каждым пакетом данных не случайны.

Это выглядит так.

Первая цифра означает порядок: 0 -> первый, 1 -> второй, 2 -> третий и т.д. Вторая цифра означает продолжительность фразы 8 -> «Добро пожаловать», 5 -> «Привет» -> и т.д. Я задавался вопросом, может ли это быть ключом к расшифровке.

Потому что конечные данные представляют собой непрерывную строку блоков из 4 HEX-значений, а ключ XOR также представляет собой 4 HEX-значения.

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

И я попытался расшифровать:

Как пройти кибертесты на «КПП» часть 2

Все получилось, но в полученных данных не было флага.



Как пройти кибертесты на «КПП» часть 2

Перечитал правила и вспомнил, что путь к этому секретному файлу: /usr/PRivAtE.txt Я повторил процедуру еще раз, но на этот раз запросил путь «/usr/PRivAtE.txt».



Как пройти кибертесты на «КПП» часть 2

Я попробовал еще раз расшифровать окончательные данные:

Как пройти кибертесты на «КПП» часть 2

И флаг был у меня в руках:

Как пройти кибертесты на «КПП» часть 2

Вам удалось? Пишите свои идеи и варианты, буду рад комментариям.

Теги: #информационная безопасность #программирование #Образовательный процесс в ИТ #Логические игры #веб #учебный процесс ИТ #кибертесты #хакеру

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.