ru
Feedback
Райтапы по CTF{2026}

Райтапы по CTF{2026}

Открыть в Telegram

☺️ Уютное сообщество для публикации райтапов с разных CTF соревнований и платформ 💬 Наш чатик: @writeup_chat ✍️ По любому вопросу можно писать мне: @freenameruuuu ✅ Таски решать тут: @writeup_ctf_bot

Больше
4 327
Подписчики
+124 часа
+97 дней
+11630 день
Архив постов
Приехал мерч! Вручу на награждении!
Приехал мерч! Вручу на награждении!

Ребята все остальные кто присылал мне отчёты с райтапами. Не переживайте, я ваши обязательно выложу и процитирую, только позже

#криптография Тык-тык от Maxㅤ Ссылка на задание Если кратко: решетка Кардано. Зная формата флага (а значит, первые шесть симв
#криптография Тык-тык от Maxㅤ Ссылка на задание Если кратко: решетка Кардано. Зная формата флага (а значит, первые шесть символов ключа), можно расшифровать флаг без знания ключа. Нам дается таблица замен:
6 > $
7 > {
8 > _
9 > }
По-видимому, самому автору таск показался слишком простым, и он решил добавить дополнительное преобразование. Интересно, что на соревнованиях этот таск решили всего 4 команды. Если бы не подсказка, которую предоставил автор, скорее всего, таск не решил бы никто. Выполняем преобразование в соответствии с таблицей замен:
RB_01BWWD{NH_}U4_T$T14{__04W_0G04}WW
Теперь обратимся к подсказке: "Что-то с дырками и крутится". Сразу приходит на ум решетка Кардано.
Немного истории. Решетка Кардано — исторически первая известная шифровальная решетка. Этот метод шифрования был изобретен в XVI веке итальянским математиком и инженером Джероламо Кардано. Кстати, именно он впервые описал карданный вал, названный в его честь.
Метод шифрования, который предложил Джероламо Кардано, можно отнести к классу перестановочных шифров. Таски, в которых фигурирует решетка Кардано, мы еще не раз встретим на различных CTF. Для решения таска воспользуемся замечательным сервисом: https://merri.cx/enigmator/cipher/grille.html Прежде всего указываем формат решетки (Grille Size). Поскольку длина шифртекста составляет 36 символов, нетрудно догадаться, что формат решетки — 6x6. Теперь вводим шифртекст в строку Cipher Text. Вбиваем символы, которые нам известны, в Grille. Напомню, мы знаем первые шесть символов ключа — B0NU${. Нажимаем Decrypt. # здесь должна быть картинка, которую я прикрепил ниже Видим, что флаг все так же не читаем. Неудивительно, ведь мы вбили только 6 символов ключа. Сколько символов осталось подобрать? Какова длина ключа? Это должно быть число, на которое число 36 делится без остатка. Следовательно, это не может быть 7, и 8 тоже. Почти наверняка можно сказать, что длина ключа — 9 символов, а значит, нам осталось подобрать 3 символа. Сложная задача? Вовсе нет. Нужно просто подумать головой. На четвертой строке сразу после символа '{' идет символ '_', при этом два раза подряд, но флаг не может начинаться с символа '_', поэтому смело исключаем первые две клетки. На шестой строке расположился символ '}' — исключаем эту клетку, потому что фигурной скобкой заканчивается флаг. Осталось 9 символов, из которых нужно выбрать 3. Попробуем составить осмысленные слова из символов, которые нам доступны. Единственное, что приходит в голову — это W0W. В CTF с этого междометия нередко начинаются флаги. Сделаем предположение, что первое слово флага — это W0W. W0W можно составить всего двумя способами, один из которых сразу отобразит флаг.

#разное Великий математик от @while_not_False (пацана знаю лично, просто настоящая кибер-котлета для своих лет!) Ссылка на задание

from pwn import remote
import re

print('\033[31m')
host = "62.173.140.174"
port = 10360


def solve_equation(equation):
    pattern = r'\((.*?)\)\s*(\w+)\s*([\+\-\*\/])\s*(\w+)\s*=\s*(-?\d+)'
    match = re.match(pattern, equation)
    if match:
        x = match.group(2)  # значение после скобок и до оператора
        op = match.group(3)  # оператор
        y = match.group(4)  # значение после оператора и до знака равенства
        z = int(match.group(5))  # значение после знака равенства

        # Пробуем привести x и y к целому числу, если не получится - оставляем как строку
        try:
            x = int(x)
        except:
            pass
        try:
            y = int(y)
        except:
            pass

        if isinstance(x, str):
            if op == '+':
                result = z - y
            elif op == '-':
                result = z + y
            elif op == '*':
                result = z // y
            elif op == '/':
                result = z * y
            else:
                return None
        elif isinstance(y, str):
            if op == '+':
                result = z - x
            elif op == '-':
                result = x - z
            elif op == '*':
                result = z // x
            elif op == '/':
                result = x // z
            else:
                return None
        else:
            return None
        return result
    else:
        return None


def main():
    conn = remote(host, port)
    for _ in range(8):
        print(conn.recvline().decode())
    conn.sendline('start')
    for _ in range(3):
        print(conn.recvline().decode())
    while True:
        conn.recvline().decode()
        equation = conn.recvline().decode().strip()
        if "FLAG" in equation:
            print('\033[31m' + f"\n\n{equation}")
            break
        print('\033[32m' + f"{equation}")
        print(conn.recvline().decode())
        solution = solve_equation(equation)
        if solution is not None:
            print('\033[33m' + ">>> " + '\033[34m' + f"{solution}")
            conn.sendline(str(solution))
        else:
            print("Error")
            break
    conn.close()


if __name__ == "__main__":
    main()

Repost from Hacker Lab
🚩 Новые задания на платформе Codeby Games! 🏆 Категория Квесты — Отцы-основатели 🎢 Категория Разное — Текстурпак 🔎 Категор
🚩 Новые задания на платформе Codeby Games! 🏆  Категория КвестыОтцы-основатели 🎢 Категория РазноеТекстурпак 🔎 Категория OSINTДруг-анимешник Приятного хакинга!

+2
Все привет! ❤️ Я наконец-то замазал все (почти) флаги и выбрал ТОП 3 отчета на мой субъективный взгляд 1 место EXE.1sior, если быть, то лучшим во всем и это про вас! 50USDT ваши, скиньте мне ваш кошелек 2 место XLS Team, просто хорошо, ну вот хорошо и все! Получаете фирменные значки на всю команду. Скажите куда отправить 3 место SI team, за много букв, старались И вам значки отправлю, в следующий раз прям постарайтесь, есть куда стремиться Я хочу сказать всем спасибо, кто поделился райтами @collapsz, @GorgonzolaCTF, @dontunique, @Bbggleave, w33d, @Rean1mat0r Вы реальные кибер-котлеты, вносите боьшой вклад в развитие нашего уютненького, не токсичного, образовательного сообщества 😇

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

@Schwarz_Osint_contact @CyberFazaN, вы в курсе, что это был один из лучших CTF? Лайк если согласен

Завтра будет много райтапов, а пока разыграю значок за лучший райтапчик по HackOSINT! Ну и немножко USDT Присылайте!
Завтра будет много райтапов, а пока разыграю значок за лучший райтапчик по HackOSINT! Ну и немножко USDT Присылайте!

+1
exploit.py0.01 KB

+1
#WEB HackOSINT Задание "Калькилятор" от Евгения Ссылка на задание Пробуем запихнуть что-нибудь эдакое и видим в devtools браузера заголовок Debug, в котором лежит регулярка !~(^(-\d|\d).*\d$|^\d$) Пробуем 0+int("1")+0, получаем 1.0, похоже там python eval, вполне ожидаемо, остается придумать как это эксплуатировать Доставать результаты будем так 0+int.from_bytes("str".encode(),'big')+0, обратно конвертируем беря число и (7566450).to_bytes(6, 'big'). Если брать больше 6 байт, получается запись в scientific notation, можно конечно упаковать компактнее, но и так сойдет Пробуем пропихнуть __import__("os").popen, но не проходит, выясняем что дело в __. Но как быть? Оказывается import os написали уже за нас и можно дернуть os.popen("ls") Узнаем что флаг валяется рядом и вытаскиваем его по частям, пропихивая свой пейлоад между суммой нулей и конвертируя в число куски по 6 байтов Флаг ищи сам, хитрюшка! Заодно вытащили app.py но там ничего интересного. Забанены не только __, но и r'.*?([sS][yY][sS][tT][eE][mM]|[sS][hH]|[rR][mM]|[eE][xX][eE][cC]|__).*?' Почему автор таска не юзал re.I вопрос открытый)

#WEB HackOSINT Задание "Калькилятор" от Евгения Ссылка на задание Пробуем запихнуть что-нибудь эдакое и видим в devtools браузера заголовок Debug, в котором лежит регулярка !~(^(-\d|\d).*\d$|^\d$) Пробуем 0+int("1")+0, получаем 1.0, похоже там python eval, вполне ожидаемо, остается придумать как это эксплуатировать Доставать результаты будем так 0+int.from_bytes("str".encode(),'big')+0, обратно конвертируем беря число и (7566450).to_bytes(6, 'big'). Если брать больше 6 байт, получается запись в scientific notation, можно конечно упаковать компактнее, но и так сойдет Пробуем пропихнуть __import__("os").popen, но не проходит, выясняем что дело в __. Но как быть? Оказывается import os написали уже за нас и можно дернуть os.popen("ls") Узнаем что флаг валяется рядом и вытаскиваем его по частям, пропихивая свой пейлоад между суммой нулей и конвертируя в число куски по 6 байтов Флаг ищи сам, хитрюшка! Заодно вытащили app.py но там ничего интересного. Забанены не только __, но и r'.*?([sS][yY][sS][tT][eE][mM]|[sS][hH]|[rR][mM]|[eE][xX][eE][cC]|__).*?' Почему автор таска не юзал re.I вопрос открытый)

+1
exploit.py0.01 KB

+1
exploit.py0.01 KB

#криптография HackOSINT Бонусный трек Билибизяка от Max Ссылка на задание Сомневаюсь, что у кого-нибудь возникли трудности с первым этапом — это простейшее декодирование из binary. Инструмент Кибершеф, который для решения этого таска рекомендовали сами организаторы, автоматически определяет данную кодировку и любезно предлагает декодировать текст. Насколько я знаю, у большинства возникли трудности именно со вторым этапом. Итак, после преобразования из binary мы получили непонятные 24 числа. Здесь надо применить рецепт From Float. Обратимся к документации Кибершефа и узнаем, какое преобразование производит этот рецепт:
Convert from IEEE754 Floating Point Numbers
IEEE754 — это стандарт, описывающий формат представления чисел с плавающей точкой. Используется, например, в компиляторах различных языков программирования. Применяем рецепт From Float. Результат, который мы получили, не очень воодушевляет, но мы видим, что Кибершеф сразу подсказывает нам следующее преобразование: надо применить рецепт Gunzip. Делаем это и получаем строку в hex-нотации, которую Кибершеф снова предлагает нам декодировать, поначалу применив рецепт From Hex, а затем Url Decode. Так мы приходим к финальной строке, которая представляет собой стимовский урл: https://steamcommunity.com/id/oqnxyr Идем по ссылке и находим флаг в имени юзера. Кстати, кому-нибудь интересно, как выполнить преобразование From Float средствами Python? Если интересно, напишите об этом в комментариях — расскажу.

Завтра начну публиковать райтапы бонусного трека HackOSINT!

Кибер-котлеты! Привет! Нужна ваша помощь по железкам Если вы шарите в протоколе LoRa и по тому, как его прикручивать к оборуд
Кибер-котлеты! Привет! Нужна ваша помощь по железкам Если вы шарите в протоколе LoRa и по тому, как его прикручивать к оборудованию напишите мне пожалуйста. Есть один кейс

Мой дорогой друг, БРАТ, сдал экзамен по отрыжке (Burp) Если у вас есть вопросики и вы стремитесь стать кибер-котлетами учитесь и пишите ему! https://t.me/wr3dmast3rvs/46

Режиссерская версия