Без лишних предисловий перейдем к делу.
Давайте сначала посмотрим на файл 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
]
Здесь мы видим, что ключом шифрования служат первые шесть символов флага. То есть, это будет Antichat.
Затем у нас есть строка:
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:
Хешируем ключ, но используем только его первые 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:
Запускаем скрипт и получаем флаг.
Не стоит просто копировать код — лучше подумайте над тем, что вы прочитали, и попробуйте написать скрипт самостоятельно. В конце концов, важно не только получить флаг и подняться в рейтинге, а прежде всего научиться чему-то новому.