ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Задания/Квесты/CTF/Конкурсы (https://forum.antichat.xyz/forumdisplay.php?f=112)
-   -   Нулевой шифр [Writeup] (https://forum.antichat.xyz/showthread.php?t=1644822)

M4x 30.03.2025 16:58

Без лишних предисловий перейдем к делу.

Давайте сначала посмотрим на файл 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:


Код:

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
)

Запускаем скрипт и получаем флаг.

Не стоит просто копировать код — лучше подумайте над тем, что вы прочитали, и попробуйте написать скрипт самостоятельно. В конце концов, важно не только получить флаг и подняться в рейтинге, а прежде всего научиться чему-то новому.


Время: 13:58