• 📣 БЕСПЛАТНЫЙ ВЕБИНАР WAPT & SQLiM: взламываем веб как профессионалы. Ждем вас 3 апреля 19:00 (МСК). регистрация здесь. Что разберём: Поиск уязвимостей через фаззинг, Реальные SQL- и командные инъекции (с выводом RCE), Эскалация привилегий после взлома, Разбор похожих задач из курсов WAPT и SQLiM.

    >>> Подробнее <<<

Hackerlab Нулевой шифр [Writeup]

M4x

Green Team
20.05.2024
10
13
BIT
186
Без лишних предисловий перейдем к делу.

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

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!