Райтапы по CTF{2025}
2.83K subscribers
215 photos
25 videos
87 files
393 links
☺️ Уютное сообщество для публикации райтапов с разных CTF соревнований и платформ

💬 Наш ламповый чатик: @writeup_chat

✍️ По любому вопросу можно писать мне: @freenameruuuu

Таски решать тут: @writeup_ctf_bot
Download Telegram
#writeup #misc
Discard от @Max_RSC

Дан шестнадцатеричный дамп. Назовем его stegofile и обратим:
xxd -r stegofile > res

Посмотрим, что мы получили:
cat res

Эта непонятная последовательность символов представляет собой примитивный шифр ROT-47. Чтобы перевести ROT-47 в ASCII, воспользуемся замечательным сервисом dCode:
https://www.dcode.fr/rot-47-cipher

Мы получили ссылку. Нетрудно догадаться, куда она ведет. Переходим.

Мы пришли на Discord-сервер, который называется CTF. Похоже, что здесь множество чатов. Неужели нужно идти в каждый? Нет. Организаторы оставили подсказку: "25". Вспомним другую подсказку: "Го в войс". Может быть, в 25-м по счету чате войса находится скрытое послание? На сервере два войса, поэтому мне пришлось проверить 25-е чаты в обоих. В первом чате не оказалось ничего, зато во втором было прикреплено вложение – архив WoW.zip.

Скачиваем и распаковываем архив. Мы получили файл WoW.img. На первый взгляд дан файл образа диска, но выполнив:
file WoW.img


...мы поймем, что на самом деле это картинка с расширением .png. Утилита binwalk сообщает, что в картинкe спрятан архив. Достаем егo:

binwalk --dd='.*' WoW.img

В архиве находится текстовый документ, который начинается со слов "Snow may be the only thing...". Слово "snow" наводит на мысль, что мы имеем дело со стеганографией и нужно использовать инструмент stegsnow.

stegsnow -C WhatLiesInside.txt

Выполняем эту команду и получаем флаг.

#HackOsint2024
12
#crypto #codebygames #writeup

Pайтап по таску Sophie German c Codeby Games от @Max_RSC (ТОП-10 на платформе) 🚩

В описании намекается, что криптограф допустил какую-то серьезную ошибку. Ошибка, о которой идет речь, заключается в том, что он забыл проверить наличие значения n в публичной базе FactorDB. Это означает, что факторы (p и q), произведение которых дало n, уже известны, поэтому решение становится простейшим:

1. Идем на caйт https://dcode.fr/rsa-cipher и вводим значения n, c, e в соответствующие поля.

2. Нажимаем кнопку "CALCULATE/DECRYPT".

После выполнения этих шагов мы получим флаг.
10
#googlectf #writeup #crypto
Redacted RSA 1 от @Max_RSC

Всем привет! Я планирую написать серию разборов задач по криптографии от Google CTF. Вкратце, суть заключается в том, что в каждой последующей задачке приватный ключ становится все более поврежденным. В Redacted RSA 1 нам предоставляется значение d, тогда как в Redacted RSA 2 извлечь d становится невозможно из-за сильного повреждения ключа. Тем не менее, значение d все еще можно рассчитать. Но давайте вернемся к первой, самой простой задачке этой серии.

В первом случае у нас есть часть приватного ключа, которая содержит не только значения открытого ключа (n и e), но и значение приватной экспоненты (d), то есть все необходимые данные для расшифровки. Основная сложность, с которой сталкиваются новички, заключается в том, что они не знают, как извлечь эти значения. Простым и доступным способом решения этой проблемы является использование онлайн-сервиса, такого как:

https://lapo.it/asn1js

Однако, чтобы ключ был правильно прочитан этим сервисом, необходимо выполнить несколько шагов. Во-первых, откройте приватный ключ в любом текстовом редакторе и замените все звездочки (*) на символы, допустимые в base64 (например, на «A»). После этого файл можно загрузить на сервис, который корректно интерпретирует данные. Если при попытке загрузить ключ на сервис возникла ошибка с сообщением наподобие "Error: Content size is not correct for container at offset 6", это означает, что вы что-то сделали не так.

В результате, загрузив наш поврежденный приватный ключ на сервис, мы увидели, что он все еще достаточно целостен, чтобы расшифровать шифртекст: значения n и d сохранились в полном объеме!

Я сделаю небольшое пояснение для новичков о значениях, которые мы рассматриваем:

modulus (n) – это модуль. Обычно в задачах на RSA значение n предоставляется. В данном случае n представляет собой длинную строку, начинающуюся с 641646.

publicExponent (e) – это публичная экспонента. В большинстве случаев она равна 65537, что является стандартом. Пара значений n и e в их совокупности образует открытый ключ.

privateExponent (d) – это приватная экспонента. Закрытый (приватный) ключ формируется из пары значений d и n. Именно закрытый ключ используется для расшифровки зашифрованного текста. В большинстве задач по RSA необходимо рассчитать или каким-то образом получить значение d. В Redacted RSA 1 d уже известно.

prime1 (p) – это первый фактор. В этой задачке значение p невозможно извлечь из-за повреждения приватного ключа, но нам это не нужно, так как у нас есть d.

prime2 (q) – это второй фактор. Произведение первого и второго факторов дает значение n. Аналогично, значение q невозможно извлечь, но это нам не нужно, так как у нас есть d.

Чтобы скопировать конкретное значение с данного сервиса, необходимо щелкнуть по нему левой кнопкой мыши и выбрать опцию "Сopy value".

Еще одной распространенной проблемой, с которой сталкиваются новички, является то, что они не знают, как перевести шифртекст в десятичный формат (base10). В контексте RSA мы обычно работаем с целыми числами. На мой взгляд, наиболее быстрым и доступным способом будет использование языков программирования, например, Python:

# Открываем файл
with open('encrypted.txt', 'rb') as file:
byte_data = file.read() # Читаем содержимое файла как байты
 
# Преобразуем байты в base10
encoded = int.from_bytes(byte_data, 'big')
 
# Выводим результат
print(encoded)

Теперь остается только расшифровать флаг. Авторы задачки предлагают использовать команду OpenSSL, однако у новичков это может вызвать трудности. На соревнованиях имеет смысл потратить время более эффективно, вместо того чтобы вспоминать, какая именно команда нужна для расшифровки. Поэтому проще воспользоваться сервисом dCode:

1. Идем на https://dcode.fr/rsa-cipher и вводим значения n, c, e, d в соответствующие поля.

2. Нажимаем кнопку "CALCULATE/DECRYPT" для выполнения расшифровки.

Хотел бы добавить, что задачка по-прежнему доступна для решения, и вы можете повторить описанные шаги.
2👍128🔥4🐳1