# ООУИ 23/24. Финал, первый тур [TOC] ## Творческое ### Квантовое шифрование #### Балл: 2 #### Условие: В последние годы область квантового шифрования претерпела значительные изменения, став одним из наиболее обсуждаемых направлений в информационной безопасности. Квантовое шифрование использует принципы квантовой механики для обеспечения безопасности передачи информации, что теоретически делает её невосприимчивой к взлому с помощью классических и даже квантовых вычислений. **Задание:** Ваша задача — провести анализ перспектив, пользы и угроз, связанных с применением квантового шифрования в информационной безопасности. Ваш ответ должен включать следующие аспекты: 1. Перспективы развития квантового шифрования: * Оцените потенциал квантового шифрования и его возможное влияние на будущее информационной безопасности. * Проанализируйте, какие технологические и теоретические проблемы ещё предстоит решить. 2. Польза квантового шифрования: * Опишите, как квантовое шифрование может улучшить защиту данных и коммуникаций. * Приведите примеры областей применения, где квантовое шифрование могло бы принести наибольшую пользу. 3. Угрозы и вызовы, связанные с квантовым шифрованием: * Рассмотрите потенциальные угрозы, которые квантовое шифрование может представлять для существующих систем безопасности. * Обсудите, какие вызовы стоят перед обществом и специалистами в области информационной безопасности при внедрении квантовых технологий. **Требования к ответу:** Ваш ответ должен быть подробным и аргументированным. По возможности, подкрепите свои утверждения примерами. Ожидается критический анализ представленных данных и мнений. **Примеры для вдохновения:** Пример пользы: Банковская система может использовать квантовое шифрование для обеспечения абсолютной безопасности транзакций и защиты от кибератак. Пример угрозы: Развитие квантовых компьютеров может сделать устаревшими существующие методы криптографии, что потребует пересмотра подходов к защите конфиденциальной информации. **Формат сдачи:** Ответ предоставляется в форме эссе. Ожидается чёткое структурирование текста, наличие введения, основной части и заключения. Ответ сохранять на рабочем столе с названием "твроческая задача Квантовое шифрование" ### Incident manager #### Балл: 2 #### Условие: **Задание:** Указано в приложенном файле **Требования к ответу:** Ваш ответ должен быть подробным и аргументированным. По возможности, подкрепите свои утверждения примерами. Ожидается критический анализ представленных данных и мнений. **Формат сдачи:** Ответ предоставляется в форме эссе. Ожидается чёткое структурирование текста, наличие введения, основной части и заключения. Ответ сохранять на рабочем столе с названием "твроческая задача Incident Manager" ## Paper ### AND or OR? #### Балл: 1.5 #### Условие: Составьте таблицу истинности для следующего логического выражения: ![image](https://hackmd.io/_uploads/Hk0Z45jeC.png) Здесь используются следующие логические операции: ![image](https://hackmd.io/_uploads/HJFzEqsxA.png) Вам необходимо построить таблицу истинности для данного выражения, учитывая все возможные комбинации значений переменных X, Y и Z которые могут быть либо 0 (ложь), либо 1 (истина). Данное задание необходимо делать на бумаге, описывая ход решения #### Решение: Таблица истинности данного выражения ![image](https://hackmd.io/_uploads/Hkz6Eqjx0.png) ### Виженер #### Балл: 1.5 #### Условие: Вам необходимо с помощью представленной ниже таблицы и шифра Виженера выполнить две задачи: 1. Зашифровать фразу «ctf its easy» с ключевой фразой «some key» 2. Расшифровать фразу «kmx c lnoiqg onixsgk hkimgk» используя ключевую фразу «ctf» Так же необходимо описать алгоритм и представить псевдо-код программы, позволяющей производить шифрование/дешифрование произвольной фразы с указанием ключа. ![image](https://hackmd.io/_uploads/HJtFt5jgR.png) #### Ответ: #### Решение: ## Web ### GetTheFile #### Балл: 1 #### Условие: Just read file and get your points! http://10.90.138.119:5555 #### Ответ: ctf{51mpl3_w4y_u51n6_4n07h3r_5ch3m3} #### Решение: ## PWN ### ha-ha, classic #### Балл: 1 #### Условие: It's just classic pwn task! nc 10.90.138.119 5050 #### Ответ: ctf{0V3rF10W_MY_8UFF3r} #### Решение: Для начала декомпилируем бинарный файл ![Снимок экрана 2024-04-10 в 083630](https://hackmd.io/_uploads/r1nxu5oeR.png) Тут сразу бросается в глаза функция strcmp - намек на переполнение буфера памяти. А еще есть пара констант заданного размера, их можно декодировать по примеру ниже: ![Снимок экрана 2024-04-10 в 083807](https://hackmd.io/_uploads/ryCX_9igC.png) и получить INNO и HELLO, при чем эти строки сравниваются, но есть еще ввод. В целом, если привести в исходный вид, то получим следующий код: ![Снимок экрана 2024-04-10 в 084705](https://hackmd.io/_uploads/SJYS_qslR.png) Здесь видим классический пример категории, а именно переполнение буфера на key[10], решение для такой задачи будет выглядеть так: ![image (4)](https://hackmd.io/_uploads/rkdPd5igR.png) Осталось подключиться по netcat и повторить это на сервере. ## Forensic ### hacker #### Балл: 1 #### Условие: My computer was hacked! I just get some strange file from hacker and message "try to find me, friend". Can you help me? #### Ответ: ctf{H4CK_7H3_P14N37} #### Решение: Определяем, что перед нами образ диска: ![image](https://hackmd.io/_uploads/B1DLv9jx0.png) Монтируем его: ![image (1)](https://hackmd.io/_uploads/H1gvP5se0.png) Видим кучу файлов-картинок, с разными изображениями. Копаемся в них, ищем что-то интересное, доходим до EXIF данных. ![image (2)](https://hackmd.io/_uploads/BkYvPcixC.png) Видим base64 в строке user comment, декодируем ![image (3)](https://hackmd.io/_uploads/Byuuw5jlR.png) ## Reverse ### Slowly #### Балл: 1 #### Условие: This code is so slowly... But i very need flag! #### Ответ: CTF{510W_45_5N411} #### Решение: Необходимо сделать декомпиляцию бинарного файла, получается такой результат: ![Снимок экрана 2024-04-10 в 085108](https://hackmd.io/_uploads/SyQid5jxC.png) ![Снимок экрана 2024-04-10 в 085101](https://hackmd.io/_uploads/SJvi_coxR.png) Видим кучу функций и вызовов, а еще странный **sleep** Два варианта решения - попытаться из каждой функции получить ее вывод и составить ручками флаг, или просто убрать sleep любым способом, поставивь на него брейки или пересобрав в целом. Исходный код задачи: ![carbon](https://hackmd.io/_uploads/ryKJKqilA.png) ## Network ### Двойное рукопожатие #### Балл: 1 #### Условие: Наш сервер слушает порт 31337. Если вы подключаетесь только одним способом, то в ответ - тишина. Если же подключаться по правильной схеме, а-ля port-knocking, то сервер вам обязательно ответит. Я еще не разобрался в комбинации, но у других коллег это получалось. Сейчас суббота, они недоступны.... помогите!!! #### Ответ: CTF{hWjFwQ8BvknXY73mDocv} #### Решение: Необходимо было взаимодействовать с сервером по следующему алгоритму: 1. Устанавливаем tcp-соединение: `nc 127.0.0.1 31337` 2. Отправляем сообщение по udp-протоколу на тот же номер порта: `echo "Hello, Server!" | nc -u 127.0.0.1 31337`. Соединение из пункта 1 не закрываем 3. Теперь по соединению из пункта 1 нужно отправить какие-нибудь данные (любой текст), тогда сервер ответит вам правильным флагом ## Misc ### file #### Балл: 1 #### Условие: Файл без опознавательных знаков был замечен на компьютере главного бухгалтера. Узнайте, что было спрятано, и являются ли эти данные критичными? #### Ответ: CTF{yPp8iPenT3Sfbhv6AlqL} #### Решение: Файл был преобразован по следующему алгоритму: ```bash! #!/bin/bash # Create a file named today.txt with specific content echo "CTF{yPp8iPenT3Sfbhv6AlqL}" > today.txt # Create a ZIP archive named today.zip with password protection zip -P '2024-03-16' today.zip today.txt # Generate a random name for the Zstandard archive # This uses the UUID tool to generate a unique name random_name=$(uuidgen) # Compress the ZIP file into a Zstandard (.zst) archive with the random name tar -zcvf "${random_name}".tar.gz today.zip mv "${random_name}".tar.gz "${random_name}" rm today.txt today.zip # Display the name of the generated Zstandard archive echo "Generated tar archive: ${random_name}" ``` Требовалось восстановить цепочку и получить файл: 1. узнать тип файла (tar.gz) и разархивировать его 2. поработать с файлом today.zip, подобрав пароль (актуальная дата - 2024-03-16), разархивировать 3. прочитать файл today.txt ## PPC ### печь #### Балл: 1 #### Условие: на вход вам дана последовательность слов, в ответ необходимо отправить количество глаголов (в инфинитиве). Раундов будет много. В случае, если слово является существительным и глаголом, используется вариант глагол (например, печь). #### Ответ: CTF{s1dMp0LILYYLtn19aPVH} #### Решение: Исходный код сервера ```python import random import select import sys verbs = [] nouns = [] with open('verbs.txt', 'r') as f: verbs = [x.rstrip() for x in f.readlines()] with open('nouns.txt', 'r') as f: nouns = [x.rstrip() for x in f.readlines()] def find(input, data = []): return len(set(input).intersection(set(data))) for i in range(100): result = [] verbs_count = 0 nouns_count = 0 for j in range(100): if random.random() > 0.3: result.append(random.choice(verbs)) else: result.append(random.choice(nouns)) print(" ".join(list(set(result)))) i, o, e = select.select( [sys.stdin], [], [], 3 ) if len(i) == 0: print('Time is up!') exit() count = sys.stdin.readline().strip().rstrip() if int(count) == find(result, verbs): print('Good! Next round...') else: print('Wrong answer! Count is ', find(result, verbs)) exit() print('CTF{s1dMp0LILYYLtn19aPVH}') ``` Алгоритм решения такой: 1. Собрать все слова в словарь 2. Отфильтровать те, которые не являются глаголами (их значительно меньше, около 20 штук) 3. Написать алгоритм, который на основе текущего набора слов просчитывает количество глаголов и отправляет ответ на сервер 4. Пример такого скрипта находится в коде сервера, функция **find**