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

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

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

Таски решать тут: @writeup_ctf_bot
Download Telegram
Ребят, кто-то решал "Чужая память" в категории реверс? Напишите плз
👍2🔥1
Ребят, админ болеет. Постараюсь к концу недели покидать какие-то свои райтапы, а так же буду очень благодарен если вы поделитесь своими

В планах на эта группу:
- анонсировать тут разные CTF и кибербез мероприятия
- делиться райтапами и развивать уютную ИБ тусовку
- возможно оффлайн делать хакспейс для всех

Всем спасибо, пошёл дальше болеть и выздоравливать
👍14🙏21🖕1
Сегодня в канале в 18:00 у нас будет супер-экслюзив от ТОП-10 в рейтинге платформы, который так многие ждали. Намекну, что это #stegano
🤯91🔥1🥱1
#stegano
"Внимательный читатель"

Автор: @Max_RSC

ТОП-10 на платформе Codeby Games подготовил райтап по таску "Внимательный читатель", который многие ждали!

Перед нами трактат «О значении и успехе знания, божественного и человеческого» Фрэнсиса Бэкона — человека, чье имя, уверен, знакомо каждому, кто интересуется криптографией. Гуглим оригинал трактата и сравниваем с документом из вложения. Для этого можно воспользоваться как онлайн-сервисами (пример: https[:]//diffcheck[.]io), так и консольной утилитой diff. Становится ясно, что в некоторых словах различаются регистры первых букв, а в некоторых местах вместо одного пробела между словами присутствуют два пробела. Выписываем буквы, регистры, которые различаются, а также выписываем пробелы. Получим длинную строку со строчными и прописными буквами, разделенными пробелами, которую, по понятным причинам, я приведу не полностью:

oM savcf Osc pMef tce KSh...

Это не шифр, как можно подумать, а банальная «морзянка»: строчные буквы надо заменить на тире, а прописные буквы надо заменить на точки, после чего декодировать, воспользовавшись любым онлайн-сервисом на свой выбор. При декодировании выяснится, что фраза, которая принимается как флаг, написана с ошибкой. Насколько я могу судить, здесь ошибся сам автор таска. Я уверен, что вам не составит труда сообразить, что нужно сделать, и все же назову как ДОЛЖНО выглядеть последнее слово (в котором встречается ошибка) фразы — D1FF3RENCE.

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

#codebygames
🔥146👍3
И на ночь глядя, хардовый таск с Тинькофф CTF
«Сигнал из космоса»


https://youtu.be/RDe9VegrRew

#TinkoffCTF2024
🔥52
Ребятки, всем хороших выходных!
Всем усиленно отдыхать!
8🔥4🖕3
Всем доброе утро!
Надеюсь всем удалось отлично отдохнуть

Если кто вдруг кто не знал, то с 23 по 26 мая будет Positive Hack Days Fest 2.

Это киберфестиваль для всех, кто хочет погрузиться в мир кибербеза

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

Вот думаю может разыграть три билета на закрытую часть феста среди подписчиков?

Ну и конечно же, присылайте ваши райтапы, обязательно опубликуем ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥64
Ребят, хотим подготовить серию райтапов по криптографии, но нам нужна ваша помощь в выборе!

Напишите, пожалуйста, в комментах какие таски с codeby вам было бы интересно увидеть? 
3
IMG_20250320_141657_803.jpg
154.6 KB
Друзья, публикуем для вас два райтапа с Tinkoff CTF 2024 от ТОП-10 на Codeby Games!

"Элементарно, Ватсон!" от @Max_RSC

Я выделяю два основных способа решить "Ватсона": посредством программирования и классическим методом с помощью двух цилиндров и ленты из бумаги. К сожалению, и тот, и другой способы достаточно продолжительные по времени. Поскольку речь идет о соревнованиях, мы не можем себе позволить тратить время там, где его тратить вовсе не обязательно. Я опишу третий способ: быстрое решение с помощью онлайн-сервиса.

Вам наверняка известно, что шифр, который дан – это модифицированный вариант скиталы, она же сцитала, она же шифр Древней Спарты, достаточно эффективный для своего времени шифр. Насколько мне известно, первым работу скиталы описал Плутарх. Разумеется, изобретателем этого шифра философ не является.

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

Мы воспользуемся замечательным сеpвиcом dCode. В поиске находим Scytale Cipher, вставляем шифртекст в соответствующее поле, просим сохранить пунктуацию (Keep punctuation and spaces), выбираем опцию Try all possible sizes, другими словами запускаем брутфорс-атаку и... видим, что у нас ничего не вышло: все еще нечитаемый текст. Почему так? Потому что мы не указали ключ – количество букв на виток, за это отвечает опция Number of letters per turn of band.

Я предвижу вопрос: "Максим, но как узнать длину ключа?". Есть много способов, я назову самый очевидный: перебор всех возможных вариантов – всех возможных длин. Перебор займет не больше пяти минут, потому что длина ключа – 32 буквы на виток. Результат можно наблюдать на скриншоте.

Хочу отметить, что в картотекe, которую мы расшифровали, будет присутствовать не один флаг, а несколько. Правильный флаг начинается с "tctf{Cr1...". Строки разбиты, но продолжение флага долго искать не придется.

"Глухой видеофон" от @Max_RSC

Открываем hex-редактор, изучаем картинку. Отсутствие маркера FF D9 в конце файла позволяет нам понять, что в картинке может быть спрятан другой файл.

Продолжаем изучение, например с помощью утилиты strings. Hаходим сигнатуру "....ftypisom" – это однозначно говорит о том, что в картинке спрятан файл формата mp4. Нам осталось лишь извлечь этот файл из картинки. Для этого я написал скрипт на Питоне: в цикле for последовательно перебираются байты картинки до тех пор, пока не найдется сигнатура 0000001с6674797069736f ("....ftypisom" в hex-нотации), сразу после этого все в том же цикле создается файл result.mp4, куда записываются байты, начиная с сигнатуры. Здесь важно убедиться, что скрипт корректно обрабатывает байты и не пропускает важные данные. Последним шагом в скрипте выполняется операция from hex.

Теперь запускаем result.mp4 как видеоролик любым просмотрщиком – в видеоролике и будет находиться флаг.

#crypto #stegano #TinkoffCTF2024
10👍1🔥1
Forwarded from Purple Chronicles (Hunter Biden)
Разбор задания "Минное поле" с платформы Codeby Games😎
https://telegra.ph/Codeby-Games-Minefield-writeup-09-05

Вернёмся к одной из самых опасных уязвимостей — SSTI. Вслепую поэксплуатируем инъекцию механизма шаблонов Jinja2 в приложении, написанном на Flask🐍, а для получения обратного шелла научимся использовать ngrok🥷
Приятного изучения!
#пентест #web #ssti
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥2
Увидел, как @while_not_False выложил лист ресурсов с задачками CTF

Не могу им не поделиться. Хакайте с удовольствием

What Is CTF Sites?

CTF Sites is the biggest collection of CTF sites, contains only permanent CTFs. I started this project more for myself in the beginning, like a cheat sheet but then I thought it would be good to make it publicly available, it would help a lot of people.

https://ctfsites.github.io/
🔥61
Доброе утро!

#WEB
Таск: Магическая админка
от
@exited3n

На Python

import time
from hashlib import md5


def is_valid_number(hashed_value):
return all(c.isdigit() for c in hashed_value[2:])


def find_valid_number():
start_time = time.time()
i = 0
while True:
hashed_value = md5(str(i).encode()).hexdigest()
hashed_value = md5(hashed_value.encode()).hexdigest()
if hashed_value[:2] == "0e":
print(f"{i} {hashed_value}")
if is_valid_number(hashed_value):
break
i += 1
end_time = time.time()
execution_time = (end_time - start_time) / 60
print(f"<b>Total Execution Time:</b> {execution_time:.2f} Mins")


if __name__ == "__main__":
find_valid_number()



На PHP

<?php
$time_start = microtime(true);
$i = 0;
while (1){

if (substr(md5(md5(strval($i))), 0, 2) === "0e"){
echo $i;
echo " ";
echo md5(md5(strval($i)));
echo "\n";
if (ctype_digit(substr(md5(md5(strval($i))), 2))){
exit();
}
}
$i++;
}

$time_end = microtime(true);
$execution_time = ($time_end - $time_start)/60;
echo '<b>Total Execution Time:</b> '.$execution_time.' Mins';

?>

#codebygames
👍8🔥3🤬1
#WEB

Введение в WebSocket от @cherepawwka, ТОП 15 на платформе Codeby

Описание от автора
В этой статье мы поговорим о том, что такое веб-сокеты и зачем они нужны, чем они отличаются от других способов обмена информацией между клиентом и сервером, а также напишем простой скрипт на Python🐍 — WebSocket client для решения таска с платформы CodeBy Games🚩

Оригинальный пост 📝

Читать: https://telegra.ph/Intro-to-WebSockets-05-02

#codebygames
Please open Telegram to view this post
VIEW IN TELEGRAM
😍5🔥32
Forwarded from Positive Hack Days Media
This media is not supported in your browser
VIEW IN TELEGRAM
На киберфестивале Positive Hack Days 2 мы предложим вам взломать нас 😏

Да, это не шутка. Мы проведем SEQuest — конкурс, в котором любой желающий сможет без последствий попробовать себя в роли хакера и проверить свои скилы в социальной инженерии. Ну а за успешное выполнение заданий мы щедро наградим участников.

😏 Что нужно будет сделать

Если коротко — выполнить семь заданий с разным уровнем сложности незаметно для организаторов, то есть нас. Вот они:

1. Изготовить копию бейджа организатора на свое имя.
2. На стойке регистрации получить настоящий бейдж организатора на свое имя.
3. Сделать футболку организатора или принести оригинальную.
4. Получить доступ к громкой связи мероприятия.
5. Получить уникальный стикер из штаба конференции.
6. Пройти в штаб организаторов и узнать пароль от Wi-Fi.
7. Получить доступ к прилавку с мерчем фестиваля.

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

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

😮 Как принять участие

Расписаться на стенде конкурса и получить полные правила (подробности — на сайте). Перед началом конкурса его организатор Антон Бочкарев, основатель «Третьей стороны», проведет базовый экскурс в социальную инженерию, который поможет участникам. Ну а дальше — дело за вами.

За решения заданий вы будете получать баллы, а те, кто займут призовые места, — получат мерч профи социальной инженерии. Ждем вас и не желаем удачи 🤓

@PHDays
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥42🤯1
#crypto
Алиса не знает алгебру

Автор: @Max_RSC (ТОП-10 на платформе Codeby Games)

Ссылка на задание 🚩

Прежде всего отмечу два важных момента:

1. Если вы не математик, для решения таска вам потребуется уверенный навык программирования на языке Python. Надеюсь, это понятно.

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

Подключаемся к серверу:

nc 62.173.140.174 11002


Мы получили значения N, e_1 и e_2. Скопируем их куда-нибудь — еще пригодятся.

В подавляющем большинстве случаев в тасках, где фигурирует RSA, мы имеем дело с реализацией одноименного алгоритма, имеющей ту или иную уязвимость. В данном случае уязвимость заключается в том, что используются две экспоненты e_1 и e_2 вместо одной e, как должно быть в RSA. Подобное "нововведение" сразу наводит на мысль о Common Modulus Attack.

Внимательно изучив скрипт, который нам предоставили организаторы, мы сможем понять логику работу сервера: одно и то же сообщение шифруется с использованием сначала одной экспоненты e_1 и модуля N, затем с использованием другой экспоненты e_2 и модуля N. На выходе получается не один шифртекст c как должно быть, а два разных шифртекста c1 и c2. Это серьезная уязвимость и в CTF мы еще не раз встретим подобные таски.

Возвращаемся к серверу. Про действия [1] и [2] в принципе можно забыть, так как для решения таска они не понадобятся. Выбираем действие [4]. Сервер отдает нам два шифртекста, каждый из которых представляет собой сообщение, зашифрованное с использованием одного и того же модуля, но разных экспонент. Думаю, вы уже сообразили, что эти шифртексты уязвимы для Common Modulus Attack. Давайте договоримся, что в данном случае первый шифртекст — это c1, a второй — это c2. Однако шифртексты нам даны в hex-формате. Значит, прежде чем мы сможем с ними работать, нужно перевести эти два шифртекста из hex-формата в base10. Сделаем это с помощью Питона:

c1_hex = '43e2b4c84aff770b7388499cc2af2535655de75aa333b5e97fbe1f45b626c9d5b09901a5863ff2da652018058a9e87110b721c40593ac4d36ccdf1b3933d5dd2'
c1 = int(c1_hex, 16)
c2_hex = '55e70b7b592aa36ec9a7d61e4bd7930d590447cc1a243f2aeba2ff132e42bd8dcc1a4fdfef8659ed5f9aa96724290f2cdc80a6e353849b3d51c1524b071cea34'
c2 = int(c2_hex, 16)


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

from libnum import *

def common_modulus(e1, e2, c1, c2, N):
a, b, d = xgcd(e1,e2)
if b < 0:
c2 = invmod(c2, N)
b = -b
if a < 0:
c1 = invmod(c1, N)
a = -a
m = (pow(c1,a,N) * pow(c2,b,N)) % N
return [m, a, b, d]

def pad(m, d, i, N):
if -d*4*i < 0:
f = pow(invmod(2, N), d*4*i, N)
else:
f = pow(2, -d*4*i, N)
return m * f % N

N = # сюда пишем нашу N
e_1 = # сюда пишем нашу e_1
c1 = # сюда пишем нашу c1
e_2 = # сюда пишем нашу e_2
c2 = # сюда нашу c2

m, _, _, _ = common_modulus(e_1,e_2,c1,c2,N) plaintext = n2s(m)
print(plaintext.decode())


Если на вашей машине нет библиотеки libnum, то для начала придется ее установить:

pip install libnum


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

Возвращаемся к серверу и на этот раз выбираем действие [3]. Вводим расшифрованный ключ, после чего сервер отдаст нам флаг.

#codebygames
7🔥3🤯1
Ну что, кибер-котлеты, завтра встречаемся на пхд? Ставь фак, если идёшь
🖕20😢4🤨31🤔1
🔥7🥰42