Без лишних предисловий перейдем к делу.
Давайте сначала посмотрим на файл request.txt с перехваченным запросом. Мы видим флаг, закодированный в base64, который передается через GET-запрос. Вот он:
Скопируйте эту строку, она нам еще пригодится. Файл request.txt нам больше не нужен, так что можно о нем забыть.
Теперь давайте заглянем в sourceCode.txt. Как можно понять из названия, это тот самый код с сервера, который, как говорится в описании, удалось перехватить — исходный код функции для шифрования. Забегая вперед, скажу, что для того, чтобы справиться с этой задачкой, вам точно понадобится хорошее знание Python.
В файлике sourceCode.txt мы видим строку:
Это говорит нам о том, что используется алгоритм шифрования RC4, который, к слову, считается устаревшим и уже не безопасным.
Далее, в коде мы видим:
Здесь мы видим, что ключом шифрования служат первые шесть символов флага. То есть, это будет CODEBY.
Затем у нас есть строка:
Это значит, что ключ хешируется, и для шифрования используются только первые 16 байт. Теперь у нас есть вся информация, чтобы расшифровать флаг. Я бы не советовал использовать онлайн-декодеры — скорее всего, они не помогут, да и в этом нет необходимости. Мы просто немного подправим код. Итак, приступим!
Сначала импортируем необходимые библиотеки:
Затем декодируем флаг из base64:
Указываем ключ. Не забываем, что ключ — это байтовая строка:
Хешируем ключ, но используем только его первые 16 байт:
Указываем, что будем использовать алгоритм шифрования RC4:
Теперь передаем флаг на вход функции для расшифровки:
И, наконец, печатаем флаг:
Запускаем скрипт и получаем флаг.
Не стоит просто копировать код — лучше подумайте над тем, что вы прочитали, и попробуйте написать скрипт самостоятельно. В конце концов, важно не только получить флаг и подняться в рейтинге, а прежде всего научиться чему-то новому.
Давайте сначала посмотрим на файл request.txt с перехваченным запросом. Мы видим флаг, закодированный в base64, который передается через GET-запрос. Вот он:
Код:
FLAG=lUmU56gHyTe0DabyGJIZEI9mGyx/4NG1tX8yhml1KmQWEdfQ3TNNkU3z1w==
Скопируйте эту строку, она нам еще пригодится. Файл request.txt нам больше не нужен, так что можно о нем забыть.
Теперь давайте заглянем в sourceCode.txt. Как можно понять из названия, это тот самый код с сервера, который, как говорится в описании, удалось перехватить — исходный код функции для шифрования. Забегая вперед, скажу, что для того, чтобы справиться с этой задачкой, вам точно понадобится хорошее знание Python.
В файлике sourceCode.txt мы видим строку:
Python:
cipher = Cipher(algorithms.ARC4(hashed_key), mode=None, backend=default_backend())
Это говорит нам о том, что используется алгоритм шифрования RC4, который, к слову, считается устаревшим и уже не безопасным.
Далее, в коде мы видим:
Python:
FLAG = '**{*******************************}'.encode()
key = FLAG[:6]
Здесь мы видим, что ключом шифрования служат первые шесть символов флага. То есть, это будет CODEBY.
Затем у нас есть строка:
Python:
hashed_key = hashlib.sha256(key).digest()[:16]
Это значит, что ключ хешируется, и для шифрования используются только первые 16 байт. Теперь у нас есть вся информация, чтобы расшифровать флаг. Я бы не советовал использовать онлайн-декодеры — скорее всего, они не помогут, да и в этом нет необходимости. Мы просто немного подправим код. Итак, приступим!
Сначала импортируем необходимые библиотеки:
Python:
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
import base64
import hashlib
Затем декодируем флаг из base64:
Python:
FLAG = base64.b64decode('lUmU56gHyTe0DabyGJIZEI9mGyx/4NG1tX8yhml1KmQWEdfQ3TNNkU3z1w==')
Указываем ключ. Не забываем, что ключ — это байтовая строка:
Python:
key = b'CODEBY'
Хешируем ключ, но используем только его первые 16 байт:
Python:
hashed_key = hashlib.sha256(key).digest()[:16]
Указываем, что будем использовать алгоритм шифрования RC4:
Python:
cipher = Cipher(algorithms.ARC4(hashed_key), mode=None, backend=default_backend())
encryptor = cipher.encryptor()
Теперь передаем флаг на вход функции для расшифровки:
Python:
ct = encryptor.update(FLAG) + encryptor.finalize()
И, наконец, печатаем флаг:
Python:
print(ct)
Запускаем скрипт и получаем флаг.
Не стоит просто копировать код — лучше подумайте над тем, что вы прочитали, и попробуйте написать скрипт самостоятельно. В конце концов, важно не только получить флаг и подняться в рейтинге, а прежде всего научиться чему-то новому.